用modelsim_se软件仿真bmp图片,可在modesim中实现一些图片处理算法和查看效果
本文以最简单的仿真一副bmp图像为例,实现RGB_YCrCb的modelsim仿真,带源工程
1、先在本地建立文件夹
2、首先打开moselsim
3、新建库和新建项目,保存到建立的文件夹里面
4、把设计文件,tb文件加入项目中(自己新建文件敲代码也可以)
5、编译文件(complile all),查找错误,修改bug
6、点击simulate --> start simulation--->点击Libraies --> add...
这一步是将项目中所需要的库加入进去,选择设计的库路径即可,比如设计文件所在的路径,还有依赖的设计文件的路径,比如altera_mf.v所在的路径
点击ok ---->cancel
7、再点击simulate --> start simulation,找到库中的tb文件,
如果没在work库中找到tb文件,可以在自己建立的库中找一下,没找到会出现如下错误,这时可以重新新建一个库再simulation
8、仿真成功
添加波形
9、设计时间,点击run即可
代码解析
tb文件
代码中需要把bmp图片 转化成 rgb数据格式带有行场信号的信号,经过图像处理算法后再转化成bmp图片,以下是bmp图片的读取和结果图片的写入
initial begin
iBmpFileId = $fopen("D:\\study\\fpga\\modelsim_save\\img_gray\\PIC\\1_Jing_J66819.bmp","rb");
//640 * 480图片
//将输入BMP图片加载到数组中
//rBmpData 读出是按字节为单位
iCode = $fread(rBmpData,iBmpFileId);
/*
BMP文件头共14字节;BMP信息头共40字节;剩余部分为图像数据640 * 480 * 3(字节)
第18-21字节存图片宽度,大端存储模式
第22-25字节存图片高度
*/
//根据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);
//打开输出BMP图片
oBmpFileId_1 = $fopen("D:\\study\\fpga\\modelsim_save\\img_gray\\PIC\\output_file_1.bmp","wb+");
//延迟13ms,等待第一帧图片处理结束
#13000000
//输出第一张
for (iIndex = 0; iIndex < iBmpSize; iIndex = iIndex + 1) begin
if(iIndex < 54)
Vip_BmpData_1[iIndex] = rBmpData[iIndex];
else
Vip_BmpData_1[iIndex] = vip_pixel_data_1[iIndex-54];
end
//将数组中的数据写到输出BMP图片中
for (iIndex = 0; iIndex < iBmpSize; iIndex = iIndex + 4) begin
rBmpWord = {Vip_BmpData_1[iIndex+3],Vip_BmpData_1[iIndex+2],Vip_BmpData_1[iIndex+1],Vip_BmpData_1[iIndex]};
$fwrite(oBmpFileId_1,"%u",rBmpWord);
end
//关闭输出BMP图片
$fclose(oBmpFileId_1);
//打开输出的Txt文本
oTxtFileId = $fopen("D:\\study\\fpga\\modelsim_save\\img_gray\\PIC\\output_file.txt","w+");
//输出特征值
/*
for(i=0;i<8;i = i + 1)begin
for(j=0;j<8;j = j + 1) begin
//$fdisplay(oTxtFileId,"%b",char_feature[i][7-j]);
$fdisplay(oTxtFileId,"%b",char_feature[i][j]);
end
$fdisplay(oTxtFileId,"\n");
end
*/
//将数组中的数据写到输出Txt文本中
$fwrite(oTxtFileId,"%p",rBmpData);
//关闭Txt文本
$fclose(oTxtFileId);
end
完整项目如下
https://download.csdn.net/download/eachanm/89107717