Icarus Verilog警告$readmemh:标准不一致,遵循1364-2005

Icarus Verilog警告$readmemh:标准不一致,遵循1364-2005,verilog,iverilog,Verilog,Iverilog,我正在尝试使用$readmemh读取内存文件,但我不确定正确的文件格式是什么,因为我看到了警告 在我的测试台中,我有以下内容: reg [7:0] progmem [4095:0]; initial begin $readmemh("progmem.txt", progmem); end 和progmem.txt包含: 01 03 ff 00 以此类推,总共有4096行。运行测试台时,vvp显示: $readmemh: Standard inconsistenc

我正在尝试使用
$readmemh
读取内存文件,但我不确定正确的文件格式是什么,因为我看到了警告

在我的测试台中,我有以下内容:

reg [7:0] progmem [4095:0];

initial begin
    $readmemh("progmem.txt", progmem);
end
progmem.txt
包含:

01
03
ff
00
以此类推,总共有4096行。运行测试台时,
vvp
显示:

$readmemh: Standard inconsistency, following 1364-2005

我已经试着查过了,但是我还没有找到一个解释来解释这到底意味着什么。

不同版本的IEEE Std 1364规定了如何通过
$readmemh
加载内存

1364-1995年声明:

。。。默认的起始地址是中给出的左侧地址 记忆宣言。将加载连续的字,直到 记忆已满

1364-2001年声明:

。。。默认起始地址应为 记忆。应加载连续字,直到最高 已到达内存中的地址

在您的声明中,左边的地址是4095,但最低的地址是0

我相信警告不是将第一个单词(01)加载到
progmem[4095]
,而是将第一个单词加载到
progmem[0]

当我将声明更改为以下内容时,屏幕上的
iverilog
上的警告将消失:

reg [7:0] progmem [0:4095];