我有一个 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
关于operator-keyword - verilog 中的“<<”运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17691265/