【问题标题】:Creation of array in verilog that can store real values在verilog中创建可以存储实际值的数组
【发布时间】:2023-03-19 08:10:02
【问题描述】:

谁能告诉我如何创建一个可以在verilog 中存储实际值的数组? 我尝试了以下方法,但没有成功:

real [31:0] in1_table [0:256];

【问题讨论】:

  • 只说“它不起作用”是没有用的 你收到错误消息了吗?它以前如何?你得到了你没有预料到的结果吗?那是什么?

标签: arrays verilog


【解决方案1】:

如果你想要一个 32 位的 real,你需要使用 shortreal,否则 real 是 64 位的。对于实数,这些是您仅有的两个选择。你写的范围[31:0] 被认为是一个压缩数组范围,它只对整数类型有效。

【讨论】:

    【解决方案2】:

    一种方法是使用解包数组。变化:

    real [31:0] in1_table [0:256];
    

    到:

    real in1_table [31:0] [0:256];
    

    这对我来说适用于 2 个不同的模拟器:

    module tb;
    
    real in1_table [31:0] [0:256];
    
    initial begin
        in1_table[0][0] = 5.666;
        in1_table[0][1] = 16.67;
        $display(in1_table[0][0]);
        $display(in1_table[0][1]);
    end
    
    endmodule
    
    /*
    
    Output:
    
    5.666
    16.67
    
    */
    

    请参阅 IEEE Std 1800-2012,第 7.4 节“打包和解包数组”。

    来自“7.4.1 打包数组”

    压缩数组只能由单个位数据类型(位、 logic、reg)、枚举类型和递归其他打包数组和 压缩结构。

    我将此解释为不允许使用 real 类型的打包数组。

    这假设您想要一个多维实数数组(32x257 实数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      相关资源
      最近更新 更多