2011-02-06 9 views
2

私はいくつかのv2k完全文法をgoogleで見つけることができますが、私は心が失われているか、ポート宣言に関して同じように壊れています。 例入力:Verilog 2001モジュール宣言文法をお探しですか?

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

私はイカルスソース、またはPerlの::のVerilogに見ることができますね。私は、上記の文法が壊れているという確認を得ることを望んでいます。もしそうでなければ、私が紛失しているものを指摘することができます。正しい文法のソースは素晴らしいでしょう...

答えて

3

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

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

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

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

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と同じです。

関連する問題