verilog将像素数据写入txt_FPGA仿真必备(1)——Matlab生成.mif文件/.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');% 地址数据为无符号数(unsigned)

fprintf(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);

你可能感兴趣的:(verilog将像素数据写入txt_FPGA仿真必备(1)——Matlab生成.mif文件/.txt文件)