2016-03-02 96 views
0

假设您有一个带符号的32位数字,分数长度为16位。也就是说,前16个MSB是整数部分,其余(16个LSB)是小数部分。在verilog中有一种方法来显示这个基数为10的数字,这使得读取小数更容易。基于分数长度的Verilog显示寄存器值

例如:

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

我使用Xillinx。我在网上查找,但我还没有找到办法做到这一点。

回答

1

使用$itor整数来转换为二进制模式(整数)。并使用2.0(一个真实的,不是2的整数)至(**)-16的功率,分数位的数目:

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

EDA Playground

+0

谢谢。有没有使用显示器来做到这一点?因为当我在我的测试平台中使用display时,我得到的值为0.即使我设置了等待30ns,然后显示值为零。只有当我使用监视器时,我得到0然后是期望值。 – user3697625

+0

@ user3697625你可以显示你的测试台,或者显示问题的最简单的例子。我不认为这个问题是'$ display()'$ monitor触发器的问题,因为当值有效时,它可能不会被请求显示。 – Morgan

+0

:我有另一个questin上的测试代码,我正在等待一个答案:有使用$ monitor()但如果我切换到$ display()我得到一个零。这里是问题和测试的链接:: [link](http://stackoverflow.com/questions/35735806/ways-to-implement-recipricals-on-verilog/35767951#35767951) – user3697625