Systemverilog(グリーンブック)Chapter 2-Data Types

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になります。 

 

 

オリジナルの記事を14件公開 10 件を獲得 表示回数20,000回以上

おすすめ

転載: blog.csdn.net/Jay_who/article/details/105230693