【问题标题】:Verilog display reg value based on fraction lengthVerilog 根据分数长度显示 reg 值
【发布时间】:2016-03-02 10:38:03
【问题描述】:

假设您有一个带符号的 32 位数字,其小数长度为 16 位。也就是说,前 16 个 MSB 是整数部分,其余(16 个 LSB)是小数部分。在verilog中有没有办法以10为底显示这个数字,这样更容易阅读小数。

例如:

0000 0000 0000 0001 1000 0000 0000 0000 应显示为 1.5

我正在使用赛灵思。我在网上查过,我还没有找到办法做到这一点。

【问题讨论】:

    标签: verilog xilinx hdl fixed-point


    【解决方案1】:

    使用$itor整数到实数来转换你的二进制模式(整数)。并使用2.0(一个实数,而不是 2 整数)的 (**) -16 次方,即小数位数:

    module tb;
      initial begin
        $display("%g",$itor(32'b01_1000000000000000) * 2.0**-16);
      end
    endmodule
    

    开启EDA Playground

    【讨论】:

    • 谢谢。有没有办法使用监视器来做到这一点?因为当我在测试台中使用显示时,我得到的值为 0。即使我设置了等待 30ns,那么显示的值也为零。只有当我使用监视器时,我才会得到 0,然后是预期值。
    • @user3697625 你能展示你的测试平台,或者显示问题的最小示例。我认为问题不在于$display() $monitor 在值更改时触发,因此很可能在值有效时未请求显示。
    • :我有另一个问题的测试代码,我正在等待答案:有使用 $monitor() 但如果我切换到 $display() 我得到一个零。这是问题和测试平台的链接::link
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2023-04-04
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多