利用matlab進行ROM初始化mif檔案方法(轉)
工具使用版本:Quartus II 13.0+Matlab2012d
撰寫人:Strive_JP
關於FPGA中ROM初始化,最近學會了利用matlab強大的資料處理能力來初始化ROM當中的資料。
先簡單介紹下FPGA內部的RAM。這裡為了簡單起見,以EP4CE10為例,先來看下資源情況。
EP4CE10內部有414Kbits的儲存容量。有EP4CE10的片記憶體儲器記憶體為M9K。這樣,可以計算出EP4CE10內部的M9K有46片。再看看handbook裡面介紹的配置特性。
由上圖可以看出FPGA雖然內部擁有一定數量的M9K,但配置深度和配置位寬均有一定的限制。
介紹完上述那些,言歸正傳,這裡提出一種利用matlab檔案來初始化ROM內部資料的方式,即對.mif檔案進行配置。
假設一組影象資料,現在想將其寫入ROM中,以供後續的工程呼叫。影象資料儲存在.txt檔案中,格式型別如下所示:
這裡只顯示了部分影象資料,實際資料有幾千上萬行。咋辦?總不能一點點地敲入ROM的初始化檔案中去吧。別人介紹的軟體處理方法也沒提過這種情況。這時候,想到是否可以利用matlab強大的資料處理能力,來對.txt檔案進行處理,再修改為.mif檔案儲存後直接讓quartusII讀取呢。
思路是有了,接下來看看一個可供quartusII識別的.mif檔案內部是什麼結構。此時以txt文件開啟一個簡單配置完成的檔案來看看。
.mif檔案中的內容包括以下幾個重要方面: |
WIDTH=8; //
DEPTH=256; //儲存深度為256
ADDRESS_RADIX=UNS; //地址型別為無符號整型
DATA_RADIX=UNS; //資料型別為無符號整型
CONTENT BEGIN
0:1; //地址0的儲存器內容為1
1:3; //地址為1的儲存器內容的3
[2:255]:0;//地址為2~255的儲存器內容為0
END;
這樣,即可利用matlab構造類似的檔案儲存方式。利用matlab將上述的影象資料轉換成.mif。程式碼如下所示:
clear; clc; close all; fid=fopen('data_8bits.txt');%開啟待轉換資料的.txt檔案 temp=fscanf(fid,'%x');%掃描檔案 n=1024; fid=fopen('convert_data.mif','w');%開啟待寫入的.mif檔案 fprintf(fid,'WIDTH=8;\n');%寫入儲存位寬8位 fprintf(fid,'DEPTH=1024;\n');%寫入儲存深度1024 fprintf(fid,'ADDRESS_RADIX=UNS;\n');%寫入地址型別為無符號整型 fprintf(fid,'DATA_RADIX=HEX;');%寫入資料型別為16進位制 fprintf(fid,'CONTENT BEGIN\n');%起始內容 for i=0:n-1 fprintf(fid,'\t%d:%x;\n',i,temp(i+1));
end fprintf(fid,'END;\n'); fclose(fid);%關閉檔案
這樣將data_8bits.txt檔案轉換後文件convert_data.mif開啟後以及利用quartusII開啟.mif檔案如下所示:
完全沒有任何問題。
針對這種.txt文件其實更直接的方法是採用EXCEL表,將資料做成符合.mif檔案格式。這樣或許也會比較簡單。