无法在 Verilog 中创建“真实”类型数组

Posted

技术标签:

【中文标题】无法在 Verilog 中创建“真实”类型数组【英文标题】:Can't create a 'real' type array in Verilog 【发布时间】:2020-10-28 07:26:16 【问题描述】:

我尝试在 Icarus Verilog 中以以下方式创建一个“真实”类型的值数组:

parameter width = 10;
shortreal b [width-1:0] = 0.0181,0.0487,0.1227,0.1967,0.2273,0.1967,0.1227,0.0487,0.0181;

给出以下错误:

error: Cannot assign to array b. Did you forget a word index?

我浏览了 icarus verilog src 代码错误消息,对此的解释是“特殊情况:左值是整个内存或数组 slice”。这实际上是 l 值的错误。检测 通过注意索引计数是否小于 数组维度(未打包)”,我认为这意味着数组索引大小与声明的 [width-1:0] 不同,如果我理解的话,这是不正确的。

我也试过了:

parameter width = 10;
parameter [32:0] b [width-1:0] = 0.0181,0.0487,0.1227,0.1967,0.2273,0.1967,0.1227,0.0487,0.0181;

但没有任何成功。

使用带有 -g2012 标志的 Icarus Verilog(用于 SV 支持)

【问题讨论】:

【参考方案1】:

只有填充整个数组时才可以使用所谓的数组连接。您的数组有 10 个元素,但右侧只有 9 个:

parameter width = 10;
shortreal b [width-1:0] = 0.0181,0.0487,0.1227,0.1967,0.2273,0.1967,0.1227,0.0487,0.0181,0.0181;

【讨论】:

无论如何,商业模拟器就是这种情况。伊卡洛斯似乎并不喜欢它。 edaplayground.com/x/9AQG 另外,我是否应该使用 I/O 文件操作来完成此操作?比方说,将数字放在 .txt 中,然后将它们放在与上述相同尺寸的内存中? @Ginjas 这取决于你。如果这些数字是从其他程序写入文件的,那么我想最好编写一些 Verilog/SV 来读取该文件,而不是将这些值粘贴到您的代码中。 (除非代码是可合成的,我怀疑你的合成器会理解它。)

以上是关于无法在 Verilog 中创建“真实”类型数组的主要内容,如果未能解决你的问题,请参考以下文章

通过未经检查的类型转换在 Java 中创建泛型数组

在打字稿中创建数组类型[关闭]

无法在 codeigniter 中创建多维数组

在 Fortran 中创建具有不同类型元素的数组

在 Java 中创建一个 bytea 数组以传递给 Postgresql 存储过程

无法在 spark/pyspark 中创建数组文字