7

私は次のような行があるVerilogコードを持っています:

parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;

ここに何を格納しRAM_DEPTH<<ここでオペレータが何をするか。

4

3 に答える 3

20

<<はバイナリ シフトで、1 を左に 8 桁シフトします。

4'b0001 << 1 => 4'b0010

>>MSB に 0 を追加するバイナリ右シフトです。
>>>左の入力が符号付きの場合、MSB の値を維持する符号付きシフトです。

4'sb1011 >>  1 => 0101
4'sb1011 >>> 1 => 1101

左オペランドが署名されていることを示す 3 つの方法:

module shift;
  logic        [3:0] test1 = 4'b1000;
  logic signed [3:0] test2 = 4'b1000;

  initial begin
    $display("%b", $signed(test1) >>> 1 ); //Explicitly set as signed
    $display("%b", test2          >>> 1 ); //Declared as signed type
    $display("%b", 4'sb1000       >>> 1 ); //Signed constant
    $finish;
  end
endmodule
于 2013-07-17T05:17:09.993 に答える
6

1 << ADDR_WIDTHは、1 が 8 ビット左にシフトされ、 の値として割り当てられることを意味しますRAM_DEPTH

また、1 << ADDR_WIDTH2^ADDR_WIDTH も意味します。

が与えられた場合ADDR_WIDTH = 8、それ2^8 = 256はの値になりますRAM_DEPTH

于 2013-07-17T05:09:41.460 に答える
3

<<他の多くの言語と同様に、左シフト演算子です。

ここでRAM_DEPTHは、 またはと同等1の によって左シフトされます。8 bits2^8256

于 2013-07-17T05:10:01.880 に答える