bir*_*n.K 5 verilog operator-keyword
我有一个verilog代码,其中有一行如下:
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
Run Code Online (Sandbox Code Playgroud)
这里将存储RAM_DEPTH什么以及<<操作员在这里做什么.
Mor*_*gan 18
<< 是一个二进制移位,向左移动1个位置.
4'b0001 << 1 => 4'b0010
Run Code Online (Sandbox Code Playgroud)
>>是一个二进制右移,将0添加到MSB.
>>>是一个有符号的移位,如果左输入被签名,它将保持MSB的值.
4'sb1011 >> 1 => 0101
4'sb1011 >>> 1 => 1101
Run Code Online (Sandbox Code Playgroud)
签名左操作数的三种方式是签名:
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
Run Code Online (Sandbox Code Playgroud)
1 << ADDR_WIDTH意味着1将向左移8位并将其指定为值RAM_DEPTH.
另外,1 << ADDR_WIDTH也意味着2 ^ ADDR_WIDTH.
鉴于ADDR_WIDTH = 8,然后2^8 = 256,那将是价值RAM_DEPTH