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

System verilog SystemVerilog-使用$realtobits()访问数组中的元素,system-verilog,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 我可以编译它,但当我尝试在Mo

当我尝试使用
$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只接受一个类型为real的参数。

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


想法?最后,我真的想访问一个二维数组,但我觉得如果我能破解这个测试用例,我就可以找到答案。

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

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

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

以防其他人在这里结束。

您不需要任何强制转换或转换功能;这是隐式处理的。