SystemVerilog - 使用$ realtobits()访问数组中的元素

时间:2017-08-17 16:13:44

标签: system-verilog

当我尝试使用$realtobits()函数从SystemVerilog中的数组访问值时,我从ModelSim中得到了一些愤怒:

reg [1:0] TEST_VALUE;
localparam real TEST_TABLE [0:3] = { 8, 9, 10, 11 };
initial begin
   TEST_VALUE = $realtobits( TEST_TABLE[2] );
   $display( "0x%X", TEST_VALUE );
end

我可以编译它,但是当我尝试在ModelSim中加载模拟设计时,我得到:

# vsim -voptargs=+acc work.top 
# Loading sv_std.std
# Loading work.top
# ** Error: (vsim-PLI-3077) /home/russv/sdi2x_hdmi/firmware/shared/video/video_signal_format_table.sv(64): $realtobits : Function takes only one argument of type real.
#         Region: /top
# Error loading design

(操作文字:$realtobits : Function takes only one argument of type real.

在我看来,通过索引到real值数组,我应该访问一个类型为real的值。并且只有一个参数 - 函数调用中没有逗号。

思考?最后我实际上想要访问一个二维数组,但我觉得如果我能破解这个测试用例,我可以想出来。

2 个答案:

答案 0 :(得分:0)

我在尝试您的代码时没有收到该错误消息。你不应该使用$ realtobits。这是通过Verilog中的Verilog端口传递实数的黑客攻击,其中端口必须是整数值。

答案 1 :(得分:-1)

我最终使用显式数组转换进行转换:

typedef reg [N:0] reg_N_bits_wide_t;
...
SYNTHESIZED_TABLE[i] = reg_N_bits_wide_t'(REAL_VALUE_TABLE[i]);

如果有其他人在这里结束。