如何使用 ModelSim 查看波形中定点数的实际值? (系统Verilog)

How can I see real values of fixed-point numbers in waveform with ModelSim? (System Verilog)

我在代码中使用带符号的定点数。为了更容易验证这些值,我想看看它们在波形中代表的实数。 例如,假设:

    // 1bit signal, 4bits integer, 4bits fraction
    wire [8:0] my_number1 = 9'b1_1111_1000; // -0.5
    wire [8:0] my_number2 = 9'b0_0000_1000; //  0.5

我希望 my_number1 和 my_number2 分别为 -0.5 和 0.5。 当我使用 Cadence 工具时,我可以单击信号波形并选择 'create expression' 并简单地创建一个新信号:

    (my_number1*(2.0**-4))

ModelSim Altera Starter Edition 在其 GUI 上没有这个选项,所以我想我可以在我的测试台中创建一个与定点相关的真实信号,然后跟踪这个数字。

我试图在我的测试平台中创建一个真实信号:

    real my_number1_real = (my_number1*(2.0**-4));

但我只能看到 -0。我也试过 $bitstoreal 但我必须将它转换为 64 位数字并考虑指数等 (see wikipedia),所以这绝对不是一个简单的方法。

知道我该怎么做吗?

real my_number1_real = (my_number1*(2.0**-4));

是在时间 0 求值的常量表达式。像下面这样的东西会更好。

real my_number1_real;
always @* 
 my_number1_real = (my_number1*(2.0**-4));

我相信 always @* 在触发实数时可能会遇到问题,所以如果您可以使用系统 verilog,那么 always_comb 会更好。