基于FPGA的VGA图像显示与控制.doc

上传人:b****3 文档编号:2490824 上传时间:2022-10-30 格式:DOC 页数:8 大小:948.50KB
下载 相关 举报
基于FPGA的VGA图像显示与控制.doc_第1页
第1页 / 共8页
基于FPGA的VGA图像显示与控制.doc_第2页
第2页 / 共8页
基于FPGA的VGA图像显示与控制.doc_第3页
第3页 / 共8页
基于FPGA的VGA图像显示与控制.doc_第4页
第4页 / 共8页
基于FPGA的VGA图像显示与控制.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

基于FPGA的VGA图像显示与控制.doc

《基于FPGA的VGA图像显示与控制.doc》由会员分享,可在线阅读,更多相关《基于FPGA的VGA图像显示与控制.doc(8页珍藏版)》请在冰豆网上搜索。

基于FPGA的VGA图像显示与控制.doc

基于FPGA的VGA图像显示与控制

课程要求:

采用verilog语言,基于FPGA的VGA图像显示,即能够在显示器上实现动态彩色图像的显示。

VGA显示接口的理论分析:

硬件采用CycloneII系列的EP2C20Q240C8N,它含有240个引脚。

对于VGA的显示器遵循800*600@75模式,其中800是指每行中显示的像素的个数,而600是指屏幕每一列所包含的像素的个数。

VGA工业标准规定了具体地,在扫描过程中的时序图如下:

行扫描时序图

场扫描时序图

每场信号对应625个行周期,其中600行为图像显示行,每场有场同步信号,该脉冲宽度为3个行周期的负脉冲;每行显示行包括1056个点时钟,其中800点为有效显示区,每行有一个行同步信号的负脉冲,该脉冲宽度为80个点时钟。

这样我们可以知道,行频为625*75=46857Hz。

需要的点时钟的频率为:

625*1056*75=49.5MHz约为50MHz。

由上图可知,实际上在真正的实现过程中,每一行扫描所花的时间实际上比显示一行的像素所花的时间多了1056-800=256个像素点。

同理,每一场的扫描时间多了625-600=25个行时间。

设计思路:

我们采用BmpToMif工具把BMP格式的图像转换为.mif文件。

利用QuartusII7.2自带的MegaWizardPlug-InManager产生一个ROM存储器,并用其来初始时.mif文件。

即将图像文件写入到存储器里面。

然后利用编程来控制图像的显示。

设计步骤:

1、工程创建:

创建一个Project取名字为vga,在创建工程的向导中选着CycloneII系列的EP2C20Q240C8。

2、代码书写:

新建一个VerilogHDLFile编写程序代码如下:

`timescale1ns/1ps

moduletupian(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b,addr);

inputclk,rst_n;

outputhsync,vsync,vga_r,vga_g,vga_b;

reghsync,vsync;

output[14:

0]addr;

reg[14:

0]addr;

reg[10:

0]x_cnt;//行坐标

reg[9:

0]y_cnt; //列坐标

parameterh_Ta=80,h_Tb=128,h_Tc=32,h_Td=800,h_Te=8,h_Tf=8,h_Tg=1056;

parameterv_Ta=3,v_Tb=14,v_Tc=7,v_Td=600,v_Te=0.8,v_Tf=0.2,v_Tg=625;

//-------------------行场的计数-------------------

always@(posedgeclk)

begin

if(x_cnt==h_Tg-1)x_cnt<=0;

elsex_cnt<=x_cnt+1;

end

always@(posedgeclk)

begin

if(y_cnt==v_Tg-1)y_cnt<=0;

elseif(x_cnt==h_Tg-1)

y_cnt<=y_cnt+1;

end

//-------------------同步信号产生-------------------

always@(posedgeclk)

begin

if(x_cnt<=h_Ta-1)hsync<=0;

elsehsync<=1;

end

always@(posedgeclk)

begin

if(y_cnt<=v_Ta-1)vsync<=0;

elsevsync<=1;

end

//---------------有效显示区坐标--------------------

wirevalid;

assignvalid=(x_cnt>=11'd187)&&(x_cnt<=11'd987)&&(y_cnt>=10'd31)&&(y_cnt<=10'd631);

wire[9:

0]xpos;

wire[9:

0]ypos;

assignxpos=x_cnt-11'd187;

assignypos=y_cnt-10'd31;

//-----------------显示图像-----------------------

reg[27:

0]k;

always@(posedgeclk)

begin

if(k<=67108864)

begin

if((ypos>=9'd100&&ypos<=9'd229)&&(xpos>=10'd65&&xpos<=10'd192))

addr<=(ypos-100)*128+(xpos-65);

elseaddr<=0;

end

else

begin

if((ypos>=9'd100&&ypos<=9'd229)&&(xpos>=10'd573&&xpos<=10'd700))

addr<=(ypos-100)*128+(xpos-65);

elseaddr<=0;

end

if(k>134217728)k=0;

elsek=k+1;

end

endmodule

编写好程序后,点击保存,将文件起名为tupian,并将其设置为顶层文件。

点击startcompilation按钮,进行汇编。

3、为tupian.v产生Symbolfile(符号文件):

编译完成后,点击File菜单——Create/Update——Createsymbolfilesforcurrentfile。

4、新建原理图文件,并导入产生的符号文件:

点击菜单File——new——BlockDiagram/SchematicFile,双击原理图的空白处,将Project目录下的刚产生的符号文件引入到原理图。

如下图:

5、创建ROM并用它存储要显示的图片文件:

1)采用BmpToMif工具将BMP格式的图片转换为.mif文件如下图,打开软件,打开要转换的图片,颜色类型选为彩色(8)色,点击生成Mif文件。

给生产的文件起一个名字。

2)利用QuartusII7.2自带的MegaWizardPlug-InManager产生一个ROM并将图片引入进去。

双击原理图空白处,点击MegaWizardPlug-InManager——选择Creatanewcustommegafunctionvariation,在安装的插件中找到MemoryCompiler,选择ROM:

1-PORT,选择Verilog语言,并为输出的文件起一个名字。

如设置如下:

点击Next,在弹出的窗口中,设置输出总线为3位,并为其分配的存储空间能够存储图片总的像素点的大小。

其他默认。

设置如下:

点击Next,前面一直默认,走到page5of7,即第五步,点击Browse,将之前产生的.mif文件加入进来。

如下图:

点击Next,直至完成。

6、将tupian符号文件和刚生成的Rom进行连线。

如下图:

7、引脚的绑定和设置

1)点击菜单Assignments——pin,为各引脚绑定如下:

2)将绑定的管脚设置为I/O复用:

点击菜单Assignments——Device——点击DeviceandPinOptions,切换到标签Dual-PurposePins,将nCEO的值设置为常规的I/O口。

如下图:

8、将原理图文件设置成为顶层文件,然后点击编译运行,运行后,引脚绑定如下:

9、将编译生成的.sof文件下载到硬件里:

实验结果:

实验效果如下图,彩色图片能够在两个位置进行动态显示,可以在代码中控制。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1