一种modelsim+matlab的FPGA图像处理仿真方法

一、基本结构

       使用modelsim工具,调用Verilog的系统函数,将图像数据读入testbench的memory组。在处理后调用系统函数将数据保存成文件。这些系统函数是不可综合成硬件的,仅用于仿真测试。图像数据需要使用matlab生成,因为普通图片是进行过压缩储存的,需要把图片还原成原始rgb或ycrcb数据流。同理处理完保存的图片原始数据需要用matlab进行处理,转换成可用于显示的图片格式。

二、相关系统函数的调用

1、$readmemh

调用方法:$readmemh("<数据文件名>",<存储器名>);例如:

`timescale 10ns/1ns
module test;
reg set;
reg[15:0] memory[0:7];    //注意这里每个存储单元的长度为16位,因为每个数字是四位十六进制数,换算成二进制数是16位
reg[4:0] n;
initial
	begin
		$readmemh("file2.txt",memory);
	for(n=0;n<=7;n=n+1)
		$display("%h",memory[n]);
	end
endmodule
————————————————
版权声明:本文为CSDN博主「east1203」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38037810/article/details/79598647

拓展:

(1)$readmemh是将文件以hex十六进制格式读入,同理$readmemb则是将文件以二进制格式读入

(2)文件"file2.txt"是可以包含路径的,如不包含路径则默认存放在同testbench文件目录下,包含路径时应使用“/”,

       如"D:/xxx/file2.txt"

2、$fopen 、$fdisplay

       写文件相对较麻烦一点,需要先定义一个变量使用$fopen语句打开一个文件来获取文件句柄,再使用$fdisplay命令写入,当然还有其他的文件写入命令,但是$fdisplay写入的时候每次都会自动转行,使用较为方便

integer out_frame0;
initial
begin//获取文件句柄
    out_frame0 =  $fopen("C:/Users/...../out_frame0.dat","w");
end

always @(posedge pclk)
begin
    if (file_out_en == 1)
        $fdisplay(out_frame0,"%h",pixel_data_wr);
end

猜你喜欢

转载自blog.csdn.net/a1254484594/article/details/105562302