FPGA仿真必備(1)——Matlab生成.mif文件——JPG圖片轉.mif文件——Matlab生成.txt文件

1. mif 文件

MIF(Memory Initialization File),內存初始化文件,用於 Altera / Intel 的 FPGA 器件的 RAM 或 ROM 配置。
例如:
(1)圖像處理中,使用 ROM 存儲圖片或字體信息,進行圖像的先關處理或者VGA顯示的字模、固定圖片等;
(2)數字信號處理中,使用 ROM 存儲 FIR 濾波器等所需的濾波係數;
(3)DDS 信號發生器中,部分實現方式採用 ROM 存儲一個週期的採樣波形,通過以不同間隔的讀取方式輸出不同頻率的波形;

mif 文件

WIDTH=8;				%指定位寬爲8位
DEPTH=4;				%指定數據深度爲4,即有4個數據

ADDRESS_RADIX=UNS;		%指定描述地址的數據類型爲無符號數
DATA_RADIX=UNS;			%指定描述存儲數據的數據類型爲無符號數	

CONTENT BEGIN			
0:245;					%地址0存儲245
1:245;
2:0;
3:6;
END;

2. matlab 製作 mif 文件

以 . jpg 圖片爲例,轉成 .mif 文件。
首先是讀取 .jpg 圖片並進行灰度化(sobel算法處理需要),此時 image_1 數組中保存的是 0~255 之間的數據,可以用無符號的 8 位二進制數據表示,此後按照格式寫入數據。

對於其他的數據,也是按照這種方法,只是將 image_1 中的數據換成你要寫入的數據。

clear all
close all

image_1 = imread('T2.jpg');         % 讀取圖片
image_1 = rgb2gray(image_1);        % 轉成灰度圖(Sobel算子是針對灰度圖像提取邊緣)
figure;
imshow(image_1);                    % 顯示圖片

fid=fopen('T2.mif','W' );           % 打開T1.mif文件向裏面寫數據,如果還沒有建立這個文件,會自動建立之後打開
fprintf(fid,'WIDTH=8;\n');          % 數據寬度爲8位(灰度值是0-255,8位的數據)
fprintf(fid,'DEPTH=32400;\n\n');     % 數據的深度(180*180的圖片,32400個數據)
fprintf(fid,'ADDRESS_RADIX=UNS;\n');% 地址數據爲無符號數(unsignedfprintf(fid,'DATA_RADIX=UNS;\n\n'); % 像素數據也是無符號數
fprintf(fid,'CONTENT BEGIN\n');     
for x = 1:32400                      % 32400個數據
    fprintf(fid,'%d:%d;\n',x-1,image_1(x)); % 寫入數據
end
fprintf(fid,'END;');                % 文件結束    
fclose(fid);                        % 關閉文件

3. matlab 製作 txt 文件

txt文件廣泛應用於matlab與FPGA聯合仿真中,特別是在 TestBench中,經常需要先使用 Matlab 將待仿真的輸入數據製作成 .txt 文件,然後在 TestBench 中讀取該 txt 文件作爲輸入數據,並將模塊的輸出數據寫入新的 txt 文件,可以使用 Matlab 讀取輸出數據並進行繪圖、數據比對等性能分析等。

%將數據以十進制格式寫入txt文件 
data = ...;					%數據數組
fid =fopen('s1.txt','w'); 
fprintf(fid,'%8d\r\n',data); 
fprintf(fid,';'); 
fclose(fid);

4. matlab 讀取 txt 文件

%從文本文件中讀取數據
%讀取的數據放在 data 變量中
fid=fopen('E:\FPGA\s2.txt','r');
[data, count] = fscanf(fid,'%lg',inf);
fclose(fid);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章