在進行fpga設計時,經常要對rom模組進行初始化。ise或quartus ii軟體本身具備的初始化功能對於較小的rom是行之有效的,但面對大容量的rom時就顯得捉襟見肘了。而matlab作為一神器,在這時就有了用武之地。使用它生成.coe或.mif檔案,可以起到事半功倍的效果。
一、了解.coe檔案的格式
在ise中,對rom進行初始化的檔案是.coe檔案。它的格式如下:
memory_initialization_radix=10; -->檔案儲存資料的進製,10即為10進製
memory_initialization_vector = -->資料向量
65534,65533,……,65532,65528; -->所儲存的10進製資料,每個資料使用逗號隔開,最後分號結束
**.coe檔案的前兩行的開頭格式是固定的,不能改變的。
**--|第一行:memory_initialization_radix=《進製》;
**--|第二回:memory_initialization_vector=
**所儲存的資料數量與大小,是與設計rom的位寬和深度相對應的。
二、使用matlab生成.coe檔案
2.1 以下程式用於為位寬為16bit,深度為1024的rom生成初始化檔案
width=16;
%rom的位寬
depth=1024; %rom的深度
x=linspace(0,2*pi,depth);
%在乙個週期內產生1024個取樣點
y_cos=cos(x);
%生成余弦資料
y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;
%將余弦資料全部轉換為整數
fid=fopen('c:usersadministratordeskto
pcos_coe.coe','w');
%建立.coe檔案
fprintf(fid,'%d,n',y_cos);
%向.coe檔案中寫入資料
fclose(fid);
%關閉.coe檔案
2.2 編輯.coe檔案(最好使用ultraedit開啟)
--在前兩行新增
memory_initialization_radix=10;
memory_initialization_vector =
--將最後的逗號改為分號
--最後檔案格式:
memory_initialization_radix=10;
memory_initialization_vector =
65534,
65533,
.....
65334,
65287;
Verilog中ROM的使用
rom read only memory 唯讀儲存器。有兩個特點 資料不可修改。可以被初始化。呼叫記憶體中的資料前,需要先申請足夠大的記憶體空間,並將資料初始化到記憶體中,然後輸入資料所在的位址,輸出需求的資料。以比較兩個2bit二進位制數的大小的 為例。module lab3 2bit compa...
MATLAB大量生成符合變數並且使用
對於建立一兩個符號變數,直接使用sym或syms就可以,但對於大量的符號變數的建立和使用,該怎麼樣呢?本人首先得到的辦法是 for j 1 20 syms k num2str j end效果如圖 但是雖然成功解決了建立的問題,可是作為迴圈引用的話無法引用 又犯起了難題,如果有人能夠解決的話,希望不吝...
使用Matlab生成集合的冪集 powerSet
求集合的冪集網上有較多的方法,例如回溯法 遞迴法等等。在此不再進行闡述。在此使用matlab下的方法combntns,該方法介紹如下 combntnsall possible combinations of a set of values c combntns choicevec,choose re...