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

问题描述

我正在尝试使用 $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] 中。

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

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