经过一个半小时的折腾,终于弄清了ROM调用.mif文件和.hex文件的区别,所以备份下来,以供后面翻阅。
一些原始数据需要满足断电不丢失的的需求,要存储在ROM里,而在FPGA中,一般存入ROM中的文件格式有.mif、.hex、.coe这三种格式,.hex、.coe格式一般是用于Xilinx版本,.mif、.hex格式一般用于altera版本的ROM。
在这里针对altera版本的ROM所使用的.mif、.hex格式在调用时注意他们的不同。以生成一个正弦波为例。
图一 (a)
图一(b)
图一为调用.mif格式所产生的modelism仿真中ROM读取的数据以及仿真波形,显然,波形只有一半,这是因为当.mif中的数据是正时,modelsim是能够支持的,当数据负数时,modelsim无法读取,就会将数据默认为0;所以会在modelism出现以下内容:
# ERROR: rom_mif_sin12w10d.mif, line 257, Invalid Altera-mif record.
表明从257个数据以后,mif文件里的数据没有读取。所以图一(a)可以看出,从257以后,数据全为0。
图二是调用.hex格式所产生的modelism仿真中ROM读取的数据以及仿真波形,显然,从图二(a)中可以看出从ROM读取的数据是完整的,所以仿真的波形图也是完整的。这是因为hex文件在存储负数时,是按照补码的形式存的。所以一般使用ROM调用,推荐使用.hex文件。
图二(a)
图二(b)
如果有负数还要使用.mif文件的话,可以将.mif文件里的数据格式改为二进制,modelism仿真中也可以从ROM进行正确读取。为了省事,一般最好直接就使用.hex文件,这样altera版本和Xilinx版本的ROM都可以直接调用,而且不用考虑.mif格式中的负数问题。
就先写到这里。继续加油!endure!