【问题标题】:Arithmetic shift acts as a logical shift, regardless of the signed variable算术移位充当逻辑移位,与有符号变量无关
【发布时间】:2013-01-07 13:37:18
【问题描述】:

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

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

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

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

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

有人知道我在这里可能缺少什么吗?

谢谢!

【问题讨论】:

    标签: verilog bit-shift system-verilog


    【解决方案1】:

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

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

    【讨论】:

    • 这个可以合成吗?还有其他方法吗?
    • 在SystemVerilog中,你也可以使用演员res = signed'(registers[0][0]) >>> 2;两者都应该是可合成的
    • 对我来说,它的工作原理如下:res = $signed(registers[0][0] >>> 2);
    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2011-04-29
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多