无论有符号变量如何,算术移位都充当逻辑移位

use*_*095 6 verilog bit-shift system-verilog

我有一个声明如此的寄存器:

logic signed [15:0][2:0][15:0] registers;
Run Code Online (Sandbox Code Playgroud)

当我将2的恭维数放入数组并算术地移动数字时,它会改为逻辑移位:

registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;
Run Code Online (Sandbox Code Playgroud)

显然,如果没有签名,系统将按逻辑移位而不是算术移位.但是你可以清楚地看到,"寄存器"肯定是签名的.

有谁知道我在这里可能会缺少什么?

谢谢!

Mar*_*rty 11

使用Verilog,一旦你进行了部分选择,结果就是unsigned.使用$signed部件选择上的系统任务使其签名.

res = $signed(registers[0][0]) >>> 2;
Run Code Online (Sandbox Code Playgroud)