Xilinx 中Block ram的初始化檔案.coe建立

weixin_30558305發表於2015-10-23

http://www.eefocus.com/guozhiyang/blog/14-03/302479_5e3a4.html

1.在Matlab中生成正餘弦波形的浮點值,並量化為16bit定點波形數值

另一種方法:

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不太一樣),說明資料匯入正確。

 對於ROM模組,主要是生成相應的.coe檔案。

% 生成 ROM 的 .coe檔案

clc

clear all

close all

 x = linspace(0, pi/2 ,1024);     % 在區間[0,2pi]之間等間隔地取1024個點

 y_cos = cos(x);

 y_sin = sin(x);

 

 y_cos = y_cos * 2^16;   

 y_sin = y_sin * 2^16;

 

 fid = fopen('D:/cos_coe.txt','wt');   fprintf(fid, ' .0f \n ' , y_cos);

 fclose(fid);

 

  fid = fopen('D:/sin_coe.txt','wt');

 fprintf(fid, ' .0f \n ' , y_sin);     

 fclose(fid);

2.生成.coe檔案。在D盤根目錄下,將cos_coe.txt和sin_coe.txt的字尾改成.coe。開啟檔案,把每一行之間的空格用文字替換功能換成“,”(這可以通過強大的UltraEdit來實現!),並在最後一行新增一個分號“;”。最後,在檔案的最開始新增下面兩行:

memory_initialization_radix=10;

memory_initialization_vector=

然後,儲存檔案退出。

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檔案錯誤型別主要有資料基數不對和資料的長度不對兩種。

 

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的模擬庫,然後按照一般模擬過程就可以了

轉載於:https://www.cnblogs.com/agllero/p/4905085.html

相關文章