问题描述
我正在尝试使用 $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];