目录
可能遇到的问题
问题
解决方案
rom的初始化
用途
文件类型
如何生成初始化文件
示例
Altera
Xilinx
可能遇到的问题
问题
altera FPGA的rom找不到初始化文件,编译过程会提示类似的问题
Error(127001): Can't find Memory Initialization File or Hexadecimal (Intel-Format) File F:/test/stock.mif for ROM instance **ALTSYNCRAMError(127001): Can't find Memory Initialization File or Hexadecimal (Intel-Format) File F:/test/stock.mi for ROM instance *|altera_syncram_component|auto_generated|altsyncram1|ALTSYNCRAM
解决方案
在quartus Files打开需要初始化rom的IP,修改文件路径,指向初始化文件。
这里建议使用相对路径,而不是使用绝对路径:
- 使用绝对路径,如果FPGA工程拷贝到其他PC,且文件路径发生了变化,大概率会找不到初始化文件
- 使用相对路径,初始化文件放在FPGA工程根目录,在初始化rom IP修改文件路径:可仅填写文件名stock.mif
rom的初始化
用途
ROM可以断电存储数据,如果需要FPGA启动后马上可以应用一些数据,可以通过初始化ROM的方式实现,新建ROM IP,指定初始化文件。
文件类型
*.hex,*.mif,*.coe。其中*.hex和*.mif格式是用于altera的rom,*.hex和*.coe格式用于xilinx的rom
如何生成初始化文件
quartus参考fpga-mif文件生成_fpga mif文件-CSDN博客
高云 参考国产FPGA的ROM文件导入 - 知乎
示例
Altera
DEPTH=256; 存储器的深度,就是存多少个数据
WIDTH=8 ; 存储器的数据位宽,就是每个数据多少位
ADDRESS_RADIX=DEC ; 设置地址基值的进制表示,可以设为BIN(二进制),OCT(八进制),DEC(十进制),HEX(十六进制)
DATA_RADIX=DEC ; 设置数据基值的进制表示, 同上
CONTENT BEGIN 数据区开始
END;数据区结束
DEPTH = 1520;
WIDTH = 8;
ADDRESS_RADIX = UNS;
DATA_RADIX = HEX;
CONTENT BEGIN
0 : 00;
1 : 00;
2 : 00;
3 : 00;
……
END;
Xilinx
MEMORY_INITIALIZATION_RADIX:定义数据类型,有效值为2(2进制)、10(10进制)、16(16进制)。
MEMORY_INITIALIZATION_VECTOR:定义存储数据,可以用空格、逗号分隔,回车符分隔。
memory_initialization_radix = 16;
memory_initialization_vector =
00,
01,
02,
03,
……
FF;