我有一个声明如此的注册:
logic signed [15:0][2:0][15:0] registers;
当我将2的恭维数字放入数组并算术地移动数字时,它会改为逻辑移位:
registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;
显然,如果没有签名,系统将按逻辑移位而不是算术移位。但是你可以清楚地看到,“寄存器”肯定是签名的。
有人知道我在这里可能缺少什么吗?
谢谢!
答案 0 :(得分:11)
使用Verilog,一旦你选择了部分,结果就是unsigned
。使用部件选择上的$signed
系统任务进行签名。
res = $signed(registers[0][0]) >>> 2;