跳转至

2024 计算机组成原理问答(持续更新)

为了实现算术右移,使用了 SystemVerilog 的 >>> 语法,但是从结果来看实现成了逻辑右移?

引用 SystemVerilog IEEE 1800-2017 标准中的规定:

The arithmetic right shift shall fill the vacated bit positions with zeros if the result type is unsigned. It shall fill the vacated bit positions with the value of the most significant (i.e., sign) bit of the left operand if the result type is signed.

因此为了让它实现成算术右移而不是逻辑右移,需要保证 result type 是 signed 而非 unsigned。为了实现这个目的,可以用 $signed 把第一个操作数转换为有符号数,再把算术右移的结果直接赋值到一个 signed wire 中,再拿这个 signed wire 参与后续计算,也可以用 $unsigned 再转换回无符号数。


最后更新: 2024年9月18日
作者:Jiajie Chen