最近在玩Altera的FPGA,當我用Quartus II自帶的IP核生成ROM時,出現了各種問題,於是在網上各種查資料,終於解決了我的問題。這里做一下小結,方便自己日后查閱。
Quartus II 和ISE在仿真和初始化時有些些區別,這里簡要介紹一下二者的初始化和仿真步驟:1、用Quartus II創建並仿真ROM
Step1:在Quatus II工程下生成一個ROM
Step2:編寫.mif文件,作為ROM的初始化文件
Step3:將.mif文件拷貝到Modelsim工程下
Step4:進行Modelsim仿真
初始化文件.mif文件的編寫需要按照一定的格式,很多文章都有介紹,我這里也總結一下:初始化文件一般有.hex文件和.mif文件,但是一般都是用文本文件寫好初始化的數據,然后將后綴改為.mif,這樣做簡單方便,故使用的比較廣泛。先看一個簡單的mif文件的內容(可以用記事本將mif文件打開,看到里面的代碼):
DEPTH=256; %存儲器的縱向容量,就是存多少個數據,本例中是256個
WIDTH=8 ; %存儲器的橫向寬度,就是每個數據多少位,8位寬
ADDRESS_RADIX=DEC ; %設置地址基值(實際就是地址用什么進制的數表示) 可以設為BIN(二進制),OCT(八進制),DEC(十進制),HEX(十六進制)
DATA_RADIX=DEC ; %設置數據基值 同上
%數據區里的地址和數據值要和這里設置的值一致,即這里如果設置了
%DEC那么,數據區的地址和數據都要用十進制來表示。
CONTENT %開始數據區
BEGIN
0:0; %前面是地址,后面是數據,都是用十進制表示(上面的DEC)
1:1;
……%如果表示成這樣 [0..255]:10; 意思就是從0到255都是數據10.
255:255;
END; %結束
2、用ISE創建並仿真ROM
Step1:在ISE工程下生成一個ROM
Step2:編寫.coe文件,作為ROM的初始化文件
這一步與Quartus II不同,因為Quartus II中ROM的初始化文件為.mif或者.hex,而在ISE中ROM的初始化文件是.coe文件,所以需要編寫.coe文件。.coe文件的格式很簡單,下面就是一個.coe文件的內容:
MEMORY_INITIALIZATION_RADIX=16; //表示ROM內容的數據格式是16進制
MEMORY_INITIALIZATION_VECTOR=
0a,
0b,
0c; //每個數據后面用逗號或者空格或者換行符隔開,最后一個數據后面加分號
Step3:用Core Generator完成ROM的例化后會生成一個.mif文件,這是Modelsim進行ROM仿真時需要的初始化文件,將.mif文件拷貝到Modelsim工程下。
Step4:進行Modelsim仿真