【发布时间】:2023-03-19 08:10:02
【问题描述】:
谁能告诉我如何创建一个可以在verilog 中存储实际值的数组?
我尝试了以下方法,但没有成功:
real [31:0] in1_table [0:256];
【问题讨论】:
-
只说“它不起作用”是没有用的 你收到错误消息了吗?它以前如何?你得到了你没有预料到的结果吗?那是什么?
谁能告诉我如何创建一个可以在verilog 中存储实际值的数组?
我尝试了以下方法,但没有成功:
real [31:0] in1_table [0:256];
【问题讨论】:
如果你想要一个 32 位的 real,你需要使用 shortreal,否则 real 是 64 位的。对于实数,这些是您仅有的两个选择。你写的范围[31:0] 被认为是一个压缩数组范围,它只对整数类型有效。
【讨论】:
一种方法是使用解包数组。变化:
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 实数)。
【讨论】: