如何使用 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
会更好。
我在代码中使用带符号的定点数。为了更容易验证这些值,我想看看它们在波形中代表的实数。 例如,假设:
// 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
会更好。