UltraEditphp
對於ROM模塊,主要是生成相應的.coe文件。html
1.在Matlab中生成正餘弦波形的浮點值,並量化爲16bit定點波形數值:app
% 生成 ROM 的 .coe文件
clc
clear all
close all函數
2.生成.coe文件。在D盤根目錄下,將cos_coe.txt和sin_coe.txt的後綴改爲.coe。打開文件,把每一行之間的空格用文本替換功能換成「,」(這能夠經過強大的UltraEdit來實現!),並在最後一行添加一個分號「;」。最後,在文件的最開始添加下面兩行:開發
memory_initialization_radix=10;get
memory_initialization_vector=it
而後,保存文件退出。
3.將coe文件加載到BLOCKROM所生成的ROM中。新建一個BLOCKROM的IP Core, 其位置爲「Memories & Storage Elements---->RAMs & ROMs----->Block Memory Generator v2.4」。在第1頁中選擇「single port rom」,在第2頁中選擇位寬爲16,深度爲1024,在第3頁下載coe文件,以下圖,而後雙擊Finish,完成IP Core的生成。若是coe文件生成得不對,Browse前面的框中是顯示紅色的文件名,coe文件錯誤類型主要有數據基數不對和數據的長度不對兩種。
另外一種方法:
Xilinx的ROM的初始化是一件很麻煩的事情,要導入Coe文件。
Alteral是mif和hex文件,有專門的軟件能夠生成。
coe文件的格式以下:
MEMORY_INITIALIZATION_RADIX=10;
MEMORY_INITIALIZATION_VECTOR=
512,515,518,522,525,528,531,535,538,54
。。。。。。。。12,23;
注意:前面的2行不要動,RADIX後面的數字表示的是進制,這裏取10進制。結尾用的是分號
在matlab中關鍵的步驟以下,咱們以一個週期1000個採樣,位數爲10位的正弦表格爲例子。
n=0:999 ;y=round(sin(2*pi*0.001*n)*512)+512;//後面加上512是爲了防止出現負數
y=mod(y,1024);//由於是10位,因此,沒有1024,對1024取餘數,把1024轉化成0
dlmwrite('b.txt',y);//dlmwrite函數是使得產生的數據之間是用逗號隔開的。
獲得b.txt文件,用記事本打開,在最上面加上
MEMORY_INITIALIZATION_RADIX=10;
MEMORY_INITIALIZATION_VECTOR=
同時數據結尾用分號結尾
最後另存爲,選擇後綴爲.coe,將文件導入到ROM之後,單擊show,或者是顯示初始數據的按鈕(各個ISE不太同樣),說明數據導入正確。
MODELSIM下rom仿真。
利用Xilinx公司的芯片作FPGA開發的時候用到了ROM,確定要對ROM作仿真,通過了一天的努力,總算能夠作仿真了,如今把過程寫出來,供你們參考一下。
1.首先須要編譯XINLINX的庫文件,經常使用有三個庫xinlixcorelib,unisims,simprims,編譯過程在上一個帖子中。
2.Modelsim不支持mif文件只支持HEX文件,這裏須要對文件進行轉換,下載DLL文件convert_hex2ver.dll下載地址爲:
http://www.eccsdk.com/bbs/read.php?tid=1562&fpage=2 3.把Modelsim安裝目錄下的配置文件modelsim.ini文件中進行修改,把 List of dynamically loaded objects for Verilog PLI applications ; Veriuser = veriuser.sl 修改成 List of dynamically loaded objects for Verilog PLI applications Veriuser = C:/Modeltech_6.1e/win32/convert_hex2ver.dll 其中 C:/Modeltech_6.1e/win32/convert_hex2ver.dll爲dll文件的保存位置 4.把rom.v和rom.mif文件拷貝到同一個目錄下,在仿真時首先須要加載XIlinx的仿真庫,而後按照通常仿真過程就能夠了