1. 程式人生 > >利用matlab進行ROM初始化mif檔案方法(轉)

利用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; //

資料位寬為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檔案格式。這樣或許也會比較簡單。