經過一個半小時的折騰,終於弄清了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!