我有一个verilog代码,其中有一行如下:
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
这里将存储什么RAM_DEPTH
以及什么是<<
操作员在这里做。
<<
是二进制移位,将 1 左移 8 位。
4'b0001 << 1 => 4'b0010
>>
是二进制右移,在 MSB 上加 0。
>>>
是一个有符号移位,如果左输入有符号,则保持 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)