2016-04-22 21 views
-1

FPGAプログラミングのためのVerilog HDLの講義シリーズの一環として、符号付き8ビットのより大きいコンパレータを作成するためにこのコードを与えられました。私はxillinx ISEでこれをシミュレートしており、構文が正しいことを示しています。しかし、私はbegin:comparison行を理解していません。手続き型の@always(*)ブロックでbegin文とend文が必要であると理解していますが、この場合には:comparisonが削除されてもモジュールはコンパイルされません。Begin:comparison手順ブロックのステートメント

:comparisonsgt = intA > int B;行を参照していますが、その理由を理解することはできません。また、その形式のbegin文とend文に関する多くの情報を見つけることができます。

module sgtc(input [7:0] a,b, output reg sgt); 
[email protected](*) begin:comparison 

    integer intA, intB; 
    intA = a; 
    intB = b; 
    sgt = intA > intB; 

end 

endmodule 
+0

なぜintAとintBが必要ですか? – toolic

+0

コンストラクトの理解に助けが必要なときにコンパイラのエラーを表示するのに常に役立ちます –

+0

なぜ人々はこれをダウン投票していますか? –

答えて

1

comparisonは、ブロックの名前に過ぎません。コードの作成者は、それを合法的なものと呼んでいた可能性があります。しかし、Verilogで、あなたはブロックに名前を持っていたあなたは、あなたがやっている正確に何である、その中に変数を宣言したい場合:

integer intA, intB; 

をですから、名前を削除する場合、これは違法なのVerilogとなり、そのなぜそれがコンパイルされないのですか(Verilogのみのコンパイラで)。

ブロック内に変数を宣言した場合、ブロックに名前を付けるという制限は、System-Verilogで解除されます。したがって、System-Verilogのこの側面を理解しているコンパイラを使用すると、コンパイルされます。

+0

SystemVerilogでブロック名を削除すると、名前付きブロックの外側からブロック内で宣言された変数にアクセスできなくなり、ブロックにローカルになります。 –