7

我有一个这样声明的寄存器:

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

当我将 2 的补码数放入数组并算术移位该数字时,它会进行逻辑移位:

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

显然,如果数字没有符号,系统将进行逻辑移位而不是算术移位。但是,您可以清楚地看到,“寄存器”肯定是签名的。

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

谢谢!

4

1 回答 1

13

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

res = $signed(registers[0][0]) >>> 2;
于 2013-01-07T13:50:09.277 回答