算术移位充当逻辑移位,与带符号变量无关



我有一个寄存器声明如下:

logic signed [15:0][2:0][15:0] registers;

当我将一个2的恭维数放入数组并对该数进行算术移位时,它会逻辑移位:

registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;

显然,如果数字没有符号,系统将进行逻辑移位而不是算术移位。但是,正如您可以清楚地看到的,'registers'肯定是有符号的。

有人知道我可能在这里错过了什么吗?

谢谢!

使用Verilog,一旦您执行part-select,结果是unsigned。使用$signed系统任务对选中的部件进行签名。

res = $signed(registers[0][0]) >>> 2;

最新更新