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

问题描述

我尝试用以下方式在Icarus Verilog中创建“实型”值数组:

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

给出以下错误

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

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

我也尝试过:

parameter width = 10;
parameter [32:0] b [width-1:0] = {0.0181,0.0181};

但没有成功。

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

解决方法

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

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