2

Google で v2k の完全な文法をいくつか見つけることができます。入力例:

module foo ( 
    input x, 
     output [2:0] y);
endmodule;

その構文を解析する文法が見つかりませんが、次のようなものを list_of_port の「ポート」として受け入れます。

         { name[3:0], name2[2:0]} 
.. or ..   .name( othername )

つまり、モジュール インスタンス化ポート バインディングの文法で見られると予想されるものは、モジュール ポート宣言に提供されます。

http://www.externsoft.ch/download/verilog.html#module_declaration

http://www.syncad.com/VeriLogger_bnf_Syntax_Verilog_2001.htm#list_of_ports

icarus のソース、または Perl::Verilog を調べることができると思います。ただし、上記の文法が壊れていることを確認したいと思っています. 正しい文法のソースは素晴らしいでしょう...

4

1 に答える 1

3

最初のコード ブロックは、IEEE 1364-2001 (Sec 12.3.3) 以降のすべてのバージョンで有効な list_of_port_declarations 構文を使用します。最初のリンクの文法は不完全です。2 番目のリンクにはこの構文が含まれているようです

2 番目のコード ブロックは確実に有効です。モジュール定義でインスタンス ポートのように見える構文は、明示的なポート コンストラクトです。あまり頻繁には使用されませんが、これらは、内部で使用されているものとは異なる信号インターフェイスを外部に提示したい場合に使用されます。以下にいくつかの例を示します。

module mod1(portA);
input portA; //Implicit port named portA connected to implicit wire portA
endmodule

ここで、portA は暗黙的であり、同じ識別子 portA を共有するため、入力宣言から属性を継承します。

module mod2(.expA(sigA));
wire sigA;
endmodule

module top;
wire sigB;
mod2 modInst(.expA(sigB));
endmodule

この例では、mod2 モジュールの明示的なポートを使用します。内部的には expA は sigA に接続されていますが、インスタンス modInst でわかるように、名前付き接続には外部名を使用します。

module mod3 (.expA({sigC,sigD}), sigF, .expB(sigG[1],sigB[3:0]));
output reg [3:0] sigC, sigD;
input wire [1:0] sigG;
input wire [7:0] sigB;
output wire sigF;
endmodule

これも有効です。ポート expA は、sigC と sigD の連結の幅を想定しています。ポート expB と同じです。

于 2011-02-07T07:32:04.373 に答える