当我尝试使用$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的值。并且只有一个参数 - 函数调用中没有逗号。
思考?最后我实际上想要访问一个二维数组,但我觉得如果我能破解这个测试用例,我可以想出来。
答案 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]);
如果有其他人在这里结束。