【问题标题】:SystemVerilog - Accessing Elements in an Array with $realtobits()SystemVerilog - 使用 $realtobits() 访问数组中的元素
【发布时间】:2017-08-17 16:13:44
【问题描述】:

当我尝试使用 $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 值的数组,我应该访问单个实数类型的值。而且只有一个参数——函数调用中没有逗号。

想法?最后我实际上是想访问一个二维数组,但我觉得如果我能破解这个测试用例,我就可以解决这个问题。

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      以防其他人在这里结束。

      【讨论】:

      • 你应该不需要任何转换或转换函数;这是隐式处理的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多