操作我有一個Verilog代碼中有如下一行:「<<」用Verilog
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
這裏什麼都將存儲在RAM_DEPTH
和什麼是<<
運營商在這裏做。
操作我有一個Verilog代碼中有如下一行:「<<」用Verilog
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
這裏什麼都將存儲在RAM_DEPTH
和什麼是<<
運營商在這裏做。
<<
是一個二進制移位,將1移到左邊的8個位置。
4'b0001 << 1 => 4'b0010
>>
是一個二進制右移,將0加到MSB。
>>>
是一個帶符號的移位,如果左輸入被簽名,它將保持MSB的值。
4'sb1011 >> 1 => 0101
4'sb1011 >>> 1 => 1101
三種方式表示左操作簽署:
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
謝謝.. :),也感謝分享'>>>'操作符的概念.. :) –
>>>操作符只在移位操作數被簽名時才保留MSB。如果移位的操作數是無符號的,就像在你的例子中那樣,>>>操作符就像>>操作符一樣插入零。 – 2013-07-17 10:57:12
@JoeHass,謝謝。更新了答案。 – Morgan
1 << ADDR_WIDTH
意味着1將向左移位8位,並將被指定爲RAM_DEPTH
的值。
另外,1 << ADDR_WIDTH
也意味着2^ADDR_WIDTH。
鑑於ADDR_WIDTH = 8
,然後2^8 = 256
那將是RAM_DEPTH
<<
值左移位運算符,因爲它在許多其他語言。
這裏RAM_DEPTH
將是1
左移8 bits
,這相當於2^8
或256
。
這在IEEE標準1800年至2012年 – toolic
[IEEE標準1800年至2012年(http://standards.ieee.org是記錄/getieee/1800/download/1800-2012.pdf)現在免費。 – Morgan