算术移位充当逻辑移位,而不管符号的变量的(Arithmetic shift acts as a lo

2019-07-17 22:14发布

我得声明为使寄存器:

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

当我把一个2的补数到阵列和算术移位的数目,它逻辑移位来代替:

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

显然,该系统将逻辑移位,而不是算术移位,如果数量不签名。 但是,你可以清楚地看到,“登记”肯定是签名。

有谁知道我会在这里失去了?

谢谢!

Answer 1:

使用Verilog,一旦你采取了部分选择,结果是unsigned 。 使用$signed系统任务的部分选择,使其签署。

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


文章来源: Arithmetic shift acts as a logical shift, regardless of the signed variable