mif檔案 coe檔案的建立

2021-10-22 00:06:38 字數 1854 閱讀 7410

在fpga中使用rom的應用是十分常見的,但資料較少時,可以直接使用quartus ii 或者vivado工具直接產生mif檔案或者coe檔案。但當資料量很大的時,在eda工具中,乙個個輸入這是非常繁瑣的、不現實的,針對這種情況,一般是使用如matlab、c等高階語言產生mif檔案/coe檔案,然後新增到eda工具中。

​ 在vivado中建立rom時,需要利用coe檔案初始化rom。下面將建立乙個含有正弦波的coe檔案。

depth    =256; % rom深度    

width =8; % 資料寬度

sin_coe = sin(2*pi*(0:depth-1)/depth); % 將正弦波分為256份

sin_coe = sin_coe*(2^(width-1)-1); % 正弦波的幅值範圍為-1~1,

%將其轉為變為-127~127

%(看到部落格是乘以128的,但是這樣的話,8位的資料寬度好像不滿足

sin_coe = round(sin_coe+(2^(width-1)-1)); % 將其轉為非負數並取整。此時範圍為0~254

fid =fopen('sine.coe','wt'); % 建立檔案

fprintf(fid,'memory_initialization_radix=10;\n'); % memory_initialization_radix:定義儲存器初始化值的基,可取值為2,10,16等

fprintf(fid,'memory_initialization_vector=\n'); % memory_initialization_vector 儲存器內資料向量

for idnex =1:depth

if(idnex​ coe檔案提供了一種設定記憶體初始化值的高層次方法,但實際上並不能直接使用。當生成ip核,vivado會將coe檔案轉換為mif檔案。mif檔案儲存了原始值,用於儲存類ip核的初始化和**模型。

建立後如下:

depth =256; % rom深度

width =8; % 資料寬度

sin_mif = sin(2*pi*(0:depth-1)/depth);

sin_mif = sin_mif*(2^(width-1)-1);

sin_mif = round(sin_mif+(2^(width-1)-1)); % 將其轉為非負數並取整。此時範圍為0~254

fid =fopen('sine.sin','wt'); % 建立檔案

fprintf(fid,'depth=%d;\n',depth);

fprintf(fid,'width=%d;\n',width);

fprintf(fid,'address_radix=uns;\n'); % 位址的基 可取值為bin(二進位制),hex(十六進製制),oct(八進位制),dec(有符號十進位制),uns(無符號十進位制)

fprintf(fid,'data_radix=uns;\n'); % 資料的基

for idnex =1:depth

fprintf(fid ,'%d:%d;\n',idnex-1,sin_mif(idnex)); % 其表示的方法需要和上面申明的基相同

end

fprintf(fid ,'end');

fclose(fid);

建立如下:

COE檔案格式

在ise中,rom的ip核生成需要初始化檔案。這個初始化的檔案字尾是 coe 實際上把 txt 換成 coe 就可以了,軟體讀取的格式是一樣的。這個 coe 檔案有一定的格式,格式如下 memory initialization radix 10 memory initialization vect...

COE檔案是什麼

coe檔案 在某些ip核的配置中,需要使用coe coefficient 檔案來傳遞引數,例如matlab自動生成fir濾波器所需的濾波係數檔案以及ram中的初始化資料檔案等。coe檔案是一種ascii文字檔案,檔案頭部定義資料基數 radix 可以時2 10或16。資料以向量的形式給出,向量以分號...

mif檔案生成方法

mif檔案就是儲存器初始化檔案,即memory initialization file,用來配置ram或rom中的資料。常見生成方法 quartus自帶的mif編輯器生成 mif軟體生成 高階程式語言生成 前兩種方法都有一定的缺陷,主要介紹第三中方法,按照mif檔案格式,使用高階程式語言 matla...