我得声明为使寄存器:
logic signed [15:0][2:0][15:0] registers;
当我把一个2的补数到阵列和算术移位的数目,它逻辑移位来代替:
registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;
显然,该系统将逻辑移位,而不是算术移位,如果数量不签名。 但是,你可以清楚地看到,“登记”肯定是签名。
有谁知道我会在这里失去了?
谢谢!
我得声明为使寄存器:
logic signed [15:0][2:0][15:0] registers;
当我把一个2的补数到阵列和算术移位的数目,它逻辑移位来代替:
registers[0][0] = 16'b1000000000000000;
registers[0][0] = registers[0][0]>>>2;
显然,该系统将逻辑移位,而不是算术移位,如果数量不签名。 但是,你可以清楚地看到,“登记”肯定是签名。
有谁知道我会在这里失去了?
谢谢!
使用Verilog,一旦你采取了部分选择,结果是unsigned
。 使用$signed
系统任务的部分选择,使其签署。
res = $signed(registers[0][0]) >>> 2;