`timescale 1ns / 1ps
module Image_Processing_tb;
integer iBmpFileId; //输入BMP图片
integer oBmpFileId; //输出BMP图片
integer oTxtFileId; //输入TXT文本
integer iIndex = 0; //输出BMP数据索引
integer pixel_index = 0; //输出像素数据索引
integer iCode;
integer iBmpWidth; //输入BMP 宽度
integer iBmpHight; //输入BMP 高度
integer iBmpSize; //输入BMP 字节数
integer iDataStartIndex; //输入BMP 像素数据偏移量
reg [ 7:0] rBmpData [0:2000000]; //用于寄存输入BMP图片中的字节数据(包括54字节的文件头)
reg [ 7:0] Vip_BmpData [0:2000000]; //用于寄存视频图像处理之后 的BMP图片 数据
reg [7:0] rBmpWord; //输出BMP图片时用于寄存数据(以word为单位,即4byte)
reg [ 7:0] pixel_data; //输出视频流时的像素数据
reg clk;
reg rst_n;
reg [ 7:0] vip_pixel_data [0:230400]; //320x240x3
//产生50MHz时钟
initial clk = 0;
always #10 clk = ~clk;
//复位信号
initial begin
rst_n = 0;
#100;
rst_n = 1;
end
//--------------------------------------------------//
//------------读取外部的图片文件夹位置--------------//
//--------------------------------------------------//
initial begin
//分别打开 输入/输出BMP图片,以及输出的Txt文本
// 导入图片部分,需要更改
iBmpFileId = $fopen("E:\\vivado_fpga\\Image_sobel\\Image_sobel\\picture\\ly\\luosi.bmp","rb");
// 输出的图片
oBmpFileId = $fopen("E:\\vivado_fpga\\Image_sobel\\Image_sobel\\picture\\ly\\luosi_test.bmp","wb+");
oTxtFileId = $fopen("E:\\vivado_fpga\\Image_sobel\\Image_sobel\\picture\\ly\\luosi_3.txt","w+");
// =======2种方法=======
// 使用绝对路径:oBmpFileId = $fopen("E:\\vivado_fpga\\Image_sobel\\Image_sobel\\picture\\ly\\pic.bmp","wb+");
// 将图片加入工程:iBmpFileId = $fopen("che_BMP.bmp","rb");
//将输入BMP图片加载到数组中
iCode = $fread(rBmpData,iBmpFileId);
//根据BMP图片文件头的格式,分别计算出图片的 宽度 /高度 /像素数据偏移量 /图片字节数
iBmpWidth = {rBmpData[21],rBmpData[20],rBmpData[19],rBmpData[18]};
iBmpHight = {rBmpData[25],rBmpData[24],rBmpData[23],rBmpData[22]};
iBmpSize = {rBmpData[ 5],rBmpData[ 4],rBmpData[ 3],rBmpData[ 2]};
iDataStartIndex = {rBmpData[13],rBmpData[12],rBmpData[11],rBmpData[10]};
//关闭输入BMP图片
$fclose(iBmpFileId);
//将数组中的数据写到输出Txt文本中
$fwrite(oTxtFileId,"%p",rBmpData);
//关闭Txt文本
$fclose(oTxtFileId);
//延迟2ms,等待第一帧VIP处理结束
#2000000
//加载图像处理后,BMP图片的文件头和像素数据
for (iIndex = 0; iIndex
1659364566
查看更多评论