Verilogでは、初心者はregとwireの違いがわからないことがよくありますが、ポートの駆動にどちらを使用する必要がありますか?異なるモジュールを接続するときはどうすればよいですか?これは、図1に示すように、Systemverilogで改善されています。
図、黄色論理、ビット、ロジック及びREGは、 ある符号無し型、ブルー整数、バイト、shortint、INT及び倍長整数である符号付きタイプ。4値ロジックと2値ロジックの割り当てについては、次の質問1:
logic [7:0] a = 8'b1000_0000;
bit [7:0] b = 8'b1000_0000;
byte c = 8'b1000_0000;
initial begin
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", c);
end
印刷される値は、128、128、-128です。
回答:ロジックとビット;これら2つは符号なしの数値なので、a = b = 128です。バイトは符号付きの値であり、値の最初のビットは符号ビットであるため、c = 8'b1000_0000の値を計算するときは、最初にcの値から1 = 8'b0111_1111を減算し、次にcの値を逆にします。 128、現時点ではc値は-128です。
2つの値のビット幅が異なる場合、値の間でどのように演算が実行されますか?質問2のように:
byte signed_vec = 8'b1000_0000;
bit [8:0] result_vec;
initial begin
result_vec = signed_vec;
$display("@1 result_vec = 'h%x", result_vec);
result_vec = unsigned'(signed_vec);
$dispaly("@2 result_vec = 'h%x", result_vec);
end
符号付きsigned_vec自体は8ビットです。このときに符号なし9ビット値のresult_vecを割り当てる必要がある場合は、1ビットsigned_vec = 9'b11000_0000 = 9'h180で拡張されます。
変換記号'を使用して8ビットの符号なし値を変換し、それを9ビットの符号なし値に割り当てます。最初のビットは0で埋められ、出力は9'h080になります。
図2に示すように、データ形式変換の場合:
4値ロジックには2値ロジックにはないxおよびzタイプが含まれているため、数値変換を実行するときに4値ロジックを2値ロジックに割り当てると、どのようなことが起こりますか?質問3に示すように:
logic [3:0] x_vec = 'b111x;
bit [2:0] b_vec;
/implicit conversion
initial begin
$display("@1 x_vec = 'b%b", x_vec);
b_vec = x_vec;
$display("@2 b_vec = 'b%b", b_vec);
end
ここで、符号なし4値ロジックが符号なし2値ロジックに割り当てられている場合、4値ロジックは4ビットであり、2値ロジックは3ビットであるため、4値ロジックの上位ビットは切り捨てられます。そして、4値の論理xが2値の論理に到達するとxは0になります。