找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6090|回复: 1
收起左侧

VGA显示640*480真彩色图像时FPGA存储资源不够用怎么办

[复制链接]
ID:91350 发表于 2015-11-1 15:50 | 显示全部楼层 |阅读模式

本次试验采用的器件是Cyclone IV E EP4CE15F17C8,其存储资源有516096个比特。一般情况下,如果我们要用纯逻辑在VGA显示器上显示一幅640*480真彩色图像时需要存储资源为640*480*24=7372800比特,是本次试验所用器件的存储资源的14多倍。很明显,存储资源远远不够用,怎么办?很多人想到的用FPGA显示图像的解决办法一般要么显示640*480二值图像(307200比特,刚好够用),要么搭建一个嵌入式系统,然后由嵌入式软件传送图像数据给FPGA进行VGA显示。而本次试验将给出FPGA纯逻辑显示640*480彩色图像,存储资源不够用,怎么办?当然是先缩小图像存放于只读存储器ROM中,再放大显示。虽然这样做显示出来的图像有点粗糙,但达到在存储资源不够的情况显示640*480彩色图像的目的。那么,图像该缩小到多大?嗯。。。为了避免显示畸形,应该在横向和纵向缩放相同的比率。经过计算,横向和纵向各缩小4倍,即由分辨率640*480到160*120。这可以用画图实现,如图1所示。然后将图片另存为bmp文件。

5100000011-6358152480404500003559978.bmp

图1 图像分辨率设置

此时,需要FPGA存储资源为160*120*24=460800比特,刚好够用。于是乎,生成mif文件,如图2所示。

5100000011-6358152550630500001945201.bmp

图2 生成mif文件

接着,在工程中调用ROM并加载刚刚生成的mif文件,如图3和图4所示。

5100000011-6358152564556500009419560.bmp

图3 设置ROM的数据位宽和深度

5100000011-6358152569678500009531755.bmp

图4 加载mif文件

当工程全部搭建好后,编译综合,结果出现错误,如图5所示。根据错误提示,本工程占用的存储资源过多,需要60块M9K,而该系列FPGA只有56块M9K,从而不够用。

5100000011-6358152628922800009377629.bmp

图5 编译综合报错

那怎么办呢?继续缩小图片?NO,再缩小,显示出来的图像还能看吗?我们应该从其他方面着手,让24位图像变为16位图像,16位图像数据可以显示65536中颜色,人眼是很难分辨出来的,故该方案可以真彩色图像的效果。mif文件生成如图6所示,选择RGB565(其实该软件生成的是BGR565的图像数据)。

5100000011-6358152699013900006909907.bmp

图6 生成RGB565mif文件

重新将mif文件加载到ROM中,如图7和图8所示。

5100000011-6358152738189400009718072.bmp

图7 设置ROM数据位宽和深度

5100000011-6358152742459100009660832.bmp

图8 加载mif文件

其中在代码实现图像放大的方法是:由于图像横向和纵向都缩小了4倍,640*480与160*120的图像数据映射关系为640*480的每行四个像素点对应160*120的一个像素点,640*480的每四行对应160*120的一行。代码如程序清单1所示。

程序清单1

//---------------------------------------------
//  lcd xpos & ypos   
wire [10:0] rom_xpos = lcd_request ? lcd_xpos : 11'd0;  
wire [10:0] rom_ypos = lcd_request ? lcd_ypos : 11'd0;  
//---------------------------------------------
//  address of ROM
wire    [14:0]      addr;
assign  addr = rom_xpos[10:2] + rom_ypos[10:2] * 11'd160;

还要将RGB565转换成RGB888进行显示,可对RGB565的地位补零,如程序清单2所示。

程序清单2

//---------------------------------------------
//  lcd data output
assign  lcd_rgb = (lcd_en == 1'b1) ? {lcd_data[4:0],3'b0,lcd_data[10:5],2'b0,lcd_data[15:11],3'b0} : 24'h000000;

工程搭建完成后,综合编译,所消耗资源如图9所示。

5100000011-6358152821571300005063169.bmp

图9 工程消耗的资源情况

最后,将生成的sof文件下载到FPGA中,可在显示器中看到如图10所示的效果。

5100000011-6358152839460400004465200.jpg

图10 效果图1

再给出另一张效果图,如图11所示。

5100000011-6358152859645100003641467.jpg

图11 效果图2



回复

使用道具 举报

ID:214006 发表于 2017-6-30 16:01 | 显示全部楼层
好高大上   充分利用资源   换个更大点的存储空间更好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表