欢迎来到天天文库
浏览记录
ID:18302562
大小:160.50 KB
页数:9页
时间:2018-09-16
《基于verilog的vga显示控制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、VGA时序下面的图是本人画了一个晚上的结果,个人认为能够比较详细的阐述VGA的信号时序。VGA的时序根据不同的显示分辨率和刷新频率会有变化,具体各种类型的时序信息可以参考下面的网站,这里非常详细的说明的每一种显示模式的VGA时序信息。http://www.tinyvga.com/vga-timing二、VGA电平 VSYNC,HSYNC为标准TTL电平,0V~3.3V。RGB的电平在0V~0.7V之间(0V为黑色,0.7V为全色)。 三、程序顶层框图VGA产生行同步(HSYNC),场同步信号(VSYNC),并产生每个像素的地址输入单口RO
2、M(显存)中,ROM输出该点需要显示的颜色值。 四、单口ROM(显存)设计程序的显示模式为800*600,72Hz刷新频率,像素频率为50MHz。每个像素需要显示的颜色存储在单口RAM中,每种颜色用8个字节表示,则如果要显示800*600分辨率,则需要800*600字节(480KB)的单口ROM,由于FPGA内部没有这么大的RAM(我用的是ep2c8),因此我把屏幕上100*100个像素组成的矩形作为一个逻辑像素(即显示同一种颜色),这样只要8*6字节(48字节),用FPGA自带的RAM是很容易实现的。ROM中颜色存储地址表将全屏划分成8*6
3、的方格,每个方格的颜色存储在ROM中,VGA控制器不断产生行坐标(ROM水平地址)和场坐标(ROM垂直地址),最后组合成ROM实际地址输入ROM中,ROM输出该地址的颜色值,显示在LCD中。 五、程序设计VGA控制器程序moduleVGA(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b);inputclk;//50MHzinputrst_n;//复位信号outputhsync;//行同步信号outputvsync;//场同步信号//R、G、B信号输出output[1:0]vga_r;output[2:0]vg
4、a_g;output[2:0]vga_b;//--------------------------------------------------reg[10:0]x_cnt;//行坐标(这里包括了行同步、后沿、有效数据区、前沿)reg[9:0]y_cnt;//列坐标(这里包括了场同步、后沿、有效数据区、前沿)reg[5:0]Xcoloradd;reg[2:0]Ycoloradd;parameterLeft=184,PixelWidth=100,Top=29;always@(posedgeclkornegedgerst_n)if(!rst_n
5、)x_cnt<=10'd0;elseif(x_cnt==11'd1040)x_cnt<=10'd0;//行计数记到1040elsex_cnt<=x_cnt+1'b1;always@(posedgeclkornegedgerst_n)//产生行地址(ROM水平地址)if(!rst_n)Xcoloradd<=6'b000000;elseif(x_cnt>=Left&&x_cnt=Left+PixelWidth&&x_cnt6、lWidth)Xcoloradd<=6'b000001;elseif(x_cnt>=Left+2*PixelWidth&&x_cnt=Left+3*PixelWidth&&x_cnt=Left+4*PixelWidth&&x_cnt7、>=Left+5*PixelWidth&&x_cnt=Left+6*PixelWidth&&x_cnt=Left+7*PixelWidth&&x_cnt8、rnegedgerst_n)if(!rst_n)y_cnt<=10'd0;elseif(y_cnt==10'd666)y_cnt<=10'd0;//场同步记到666
6、lWidth)Xcoloradd<=6'b000001;elseif(x_cnt>=Left+2*PixelWidth&&x_cnt=Left+3*PixelWidth&&x_cnt=Left+4*PixelWidth&&x_cnt7、>=Left+5*PixelWidth&&x_cnt=Left+6*PixelWidth&&x_cnt=Left+7*PixelWidth&&x_cnt8、rnegedgerst_n)if(!rst_n)y_cnt<=10'd0;elseif(y_cnt==10'd666)y_cnt<=10'd0;//场同步记到666
7、>=Left+5*PixelWidth&&x_cnt=Left+6*PixelWidth&&x_cnt=Left+7*PixelWidth&&x_cnt8、rnegedgerst_n)if(!rst_n)y_cnt<=10'd0;elseif(y_cnt==10'd666)y_cnt<=10'd0;//场同步记到666
8、rnegedgerst_n)if(!rst_n)y_cnt<=10'd0;elseif(y_cnt==10'd666)y_cnt<=10'd0;//场同步记到666
此文档下载收益归作者所有