使用matlab生成rom初始化檔案.coe

原點qiang發表於2019-03-31

在進行FPGA設計時,經常要對rom模組進行初始化。Vivado ISE或Quartus II軟體本身具備的初始化功能對於較小的rom是行之有效的,但面對大容量的rom時就顯得捉襟見肘了。而matlab作為一神器,在這時就有了用武之地。使用它生成.coe或.mif檔案,可以起到事半功倍的效果。

1、瞭解.coe檔案的格式

在ISE中,對rom進行初始化的檔案是.coe檔案。它的格式如下:
memory_initialization_radix=10; -->檔案儲存資料的進位制,10即為10進位制
memory_initialization_vector = -->資料向量
0,402,804,1206,1608,2009,2411,2811,3212, -->所儲存的10進位制資料,每個資料使用逗號隔開,最後分號結束

.coe檔案的前兩行的開頭格式是固定的,不能改變的。

memory_initialization_radix=10;	//10表示<10進位制>
memory_initialization_vector=
…
…

所儲存的資料數量與大小,是與設計rom的位寬和深度相對應的。

2、使用matlab生成.coe檔案

2.1 以下程式用於為位寬為16bit,深度為1024的rom生成初始化檔案

n  = 16;%量化位數
f  = 5e4; %訊號頻率Hz
fs = 25600000; %取樣頻率Hz
N  = 1024; %本次共取樣點數
t  = (0:N-1)/fs; %取樣時間s
x  = sin(2*pi*f*t); %訊號取樣值
y  = x*(2^(n-1)); %量化
y_z= round(y); %四捨五入取整
    
%生成y.coe檔案
fid=fopen('E:\matlab-function\y.coe','w'); %建立y.coe檔案
fprintf(fid,'%d,\n',y_z) %向y.coe中寫入資料
fclose(fid); %關閉y.coe檔案

2.2 編輯.coe檔案(最好使用UltraEdit開啟)

  • 在前兩行新增
memory_initialization_radix=10;
memory_initialization_vector =
  • 將最後的逗號改為分號
  • 最後檔案格式:
memory_initialization_radix= 10;
memory_initialization_vector=
 0,
402,
804,
1206,
1608,
...
...
-2009,
-1608,
-1206,
-804,
-402;

相關文章