赞
踩
用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
完整项目如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。