用verilog编写fpga的vga显示.docx
- 文档编号:8740815
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:65.28KB
用verilog编写fpga的vga显示.docx
《用verilog编写fpga的vga显示.docx》由会员分享,可在线阅读,更多相关《用verilog编写fpga的vga显示.docx(9页珍藏版)》请在冰豆网上搜索。
用verilog编写fpga的vga显示
用verilog编写fpga的vga显示(z)
VGA工业标准是640x480x60Hz,主要有5个信号,即三个颜色信号R/G/B、行同步信号HS和场同步信号VS。
它是从左上角开始一行接一行的扫描,扫描完一屏后又回到左上角扫描。
标准要求是场频59.94Hz,行频31469Hz,时钟频率25.175MHz
这是Altera的DE2开发板上自带的演示程序。
可以先搜一下VGA工业标准的时序图,再看这个代码就会很简单,
就不注释了。
弄清楚行同步、场同步、前肩、后肩,一切都easy
moduleVGA_Controller(//HostSide
iRed,
iGreen,
iBlue,
oRequest,
//VGASide
oVGA_R,
oVGA_G,
oVGA_B,
oVGA_H_SYNC,
oVGA_V_SYNC,
oVGA_SYNC,
oVGA_BLANK,
oVGA_CLOCK,
//ControlSignal
iCLK,
iRST_N);
`include"VGA_Param.h"
//HostSide
input[9:
0]iRed;
input[9:
0]iGreen;
input[9:
0]iBlue;
outputregoRequest;
//VGASide
output[9:
0]oVGA_R;
output[9:
0]oVGA_G;
output[9:
0]oVGA_B;
outputregoVGA_H_SYNC;
outputregoVGA_V_SYNC;
outputoVGA_SYNC;
outputoVGA_BLANK;
outputoVGA_CLOCK;
//ControlSignal
inputiCLK;
inputiRST_N;
//InternalRegistersandWires
reg[9:
0]H_Cont;
reg[9:
0]V_Cont;
reg[9:
0]Cur_Color_R;
reg[9:
0]Cur_Color_G;
reg[9:
0]Cur_Color_B;
wiremCursor_EN;
wiremRed_EN;
wiremGreen_EN;
wiremBlue_EN;
assignoVGA_BLANK=oVGA_H_SYNC&oVGA_V_SYNC;
assignoVGA_SYNC=1'b0;
assignoVGA_CLOCK=iCLK;
assignoVGA_R=(H_Cont>=X_START&&H_Cont V_Cont>=Y_START&&V_Cont ? iRed: 0; assignoVGA_G=(H_Cont>=X_START&&H_Cont V_Cont>=Y_START&&V_Cont ? iGreen: 0; assignoVGA_B=(H_Cont>=X_START&&H_Cont V_Cont>=Y_START&&V_Cont ? iBlue: 0; //PixelLUTAddressGenerator always@(posedgeiCLKornegedgeiRST_N) begin if(! iRST_N) oRequest<=0; else begin if(H_Cont>=X_START-2&&H_Cont V_Cont>=Y_START&&V_Cont oRequest<=1; else oRequest<=0; end end //H_SyncGenerator,Ref.25.175MHzClock always@(posedgeiCLKornegedgeiRST_N) begin if(! iRST_N) begin H_Cont<=0; oVGA_H_SYNC<=0; end else begin //H_SyncCounter if(H_Cont H_Cont<=H_Cont+1; else H_Cont<=0; //H_SyncGenerator if(H_Cont oVGA_H_SYNC<=0; else oVGA_H_SYNC<=1; end end //V_SyncGenerator,Ref.H_Sync always@(posedgeiCLKornegedgeiRST_N) begin if(! iRST_N) begin V_Cont<=0; oVGA_V_SYNC<=0; end else begin //WhenH_SyncRe-start if(H_Cont==0) begin //V_SyncCounter if(V_Cont V_Cont<=V_Cont+1; else V_Cont<=0; //V_SyncGenerator if(V_Cont oVGA_V_SYNC<=0; else oVGA_V_SYNC<=1; end end end endmodule 显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。 在 FPGA 的设计中可以使用很少的资源,就产生 VGA 各种控制信号。 这个示例在RHicSP2200B FPGA 开发板/学习板上使用 VGA 接口在显示器上显示了文字以及简单的图形,可以作为VGA显示设计的参考. 显示器术语 像素与分辨率 显示器的显示方式有两种: A/N(Alphabet/Number: 字符/数字)显示方式和APA(AllPointAddressable: 全点寻址) 显示方式,即文本显示方式和图形显示方式。 A/N方式已淘汰不用,目前微机都采用APA图形方式。 显示器上输出的一切信息,包括数值、文字、表格、图象、动画等等,都是由光点(即像素)构成的。 组成屏幕显示画面的最小单位是像素,像素之间的最小距离为点距(Pitch)。 点距越小像素密度越大,画面越清晰。 显示器的点距有0.31mm、0.28mm、0.24mm、0.22mm等多种。 分辨率指整屏显示的像素的多少,是衡量显示器的一个常用指标。 这同屏幕尺寸及点距密切相关,可用屏幕实际显示的尺寸与点距相除来近似求得。 点距为0.28mm的15英寸显示器,分辨率最高为1024×768。 显示器尺寸 显示器屏幕尺寸以对角线来度量,常用的显示器有 14、15、17、19、21 英寸等。 显示器水平方向长度与垂直方向高度之比一般为4: 3。 扫描频率 显示器采用光栅扫描方式,即轰击荧光屏的电子束在 CRT 屏幕上从左到右(受水平同步信号 HSYNC 控制)、从上到下(受垂直同步信号VSYNC控制)做有规律的移动。 光栅扫描又分逐行扫描和隔行扫描。 电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。 此后,电子束又回到左上方起点,开始下一帧的扫描。 这种方法也就是常说的逐行扫描显示。 而隔行扫描指电子束在扫描时每隔一行扫一线,完成一屏后再返回来扫描剩下的线,这与电视机的原理一样。 隔行扫描的显示器比逐行扫描闪烁得更厉害,也会让使用者的眼睛更疲劳。 目前微机所用显示器几乎都是逐行扫描。 完成一行扫描所需时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描所需的时间称为垂直扫描时间,其倒数为垂直扫描频率,又称刷新频率,即刷新一屏的频率。 常见的有60Hz、75Hz等,标准VGA显示的场频60Hz,行频为31.5kHz。 显示带宽 带宽则指显示器可以处理的频率范围。 如果60Hz刷新频率的VGA方式,其带宽达 640×480×60=18.4MHz;70Hz 刷新频率1024×768分辨率的SVGA方式,其带宽达1024×768×70=55.1MHz。 早期的显示器频率固定。 现在流行的多屏显示器采用自动跟踪技术,使显示器的扫描频率自动与显示卡的输出同步,达到较宽的适用范围。 显示卡术语 一个像素点可有多种颜色,由表示该像素的二进位数(又称像素的位宽)决定。 像素位宽为 8bit,则每个像素有 28=256 种颜色;位宽为16bit则有216=65536种颜色,位宽为 24bit 则有 224 即一千七百多万种颜色。 显示卡内的D/A(数/模)转换电路将每个像素的位宽(二进位整数)转换成对应亮度的 R、G、B(红、绿、蓝)模拟信号,控制屏幕上相应的三色荧光点发光,产生所要求的颜色。 随着PC机的不断更新换代,显示控制卡(即显示适配器)的标准也不断发展。 从最初的MDA(单色显示适配器)→CGA(彩色图形显示适配器)→EGA(增强型图形适配器)→VGA(视频图形阵列适配器)。 VGA一改以前显示卡采用的数字视频信号输出,而用模拟视频信号输出,VGA 卡内的 D/A转换器将数字信号转换为控制R、G、B三原色的模拟信号,使像素色彩变化非常平滑,更适合人的视觉感受。 性能高于VGA并与之兼容的显示适配卡有TVGA和SVGA。 随着Windows的普及和对快速度、多色彩、高分辨率的需要,一些厂家在 SVGA 芯片中增加更多的硬件来支持 Windows 的加速,这类显示适配器一般被称作AVGA(AcceleratedVGA: 加速VGA)。 目前大多数微机上的显示卡都属于AVGA类型。 显示卡主要由图形处理芯片、视频存储器及BIOS芯片等组成。 一般AVGA类型显示卡的控制器由单块AVGA芯片充当,其中包含的图形加速控制器对提升图形功能至关重要。 显示卡的性能主要取决于卡上使用的图形芯片。 早期的图形芯片没有帧缓冲器,有关帧的操作都要由 CPU去处理,降低了显示速度。 现在多数显示卡上都设置具有图形处理功能的加速芯片,可处理像Windows类型的图形任务而减少 CPU 参与。 更高级的显示卡上有协处理器,可大大减免 CPU的处理和参与。 利用视频存储器VRAM储存显示数据,可减少甚至免去访问系统主存,加快显示速度。 640×480-16色VGA显示一屏需640×480×Log216/8=154KB 显示存储器,1024×768 真彩显示一屏则需1024×768×24÷8≈2.3MB。 显示卡插在系统板的扩展槽内,通过电缆连接到机箱背面的15针D型插座连接器上。 某些高档的主板内置了显示卡的功能。 CRT 显示器背面有一个与显示器连接好的视频电缆,电缆的末端是 15针插入式连接器,使用时将它直接插入主机机箱背面的15孔D型插座上即可。 VGA时序设计 在VGA中,水平同步脉冲在光栅扫描线需要回到水平开始位置也就是屏幕的左边的时候插入,垂直同步脉冲在光栅扫描线需要回到垂直开始位置也就是屏幕的上方的时候插入。 复合同步脉冲是水平同步脉冲与垂直同步信号的组合。 RGB为像素数据,在没有图像投射到屏幕时插入消隐信号,当消隐有效时,RGB信号无效。 水平时序 在水平时序中,包括以下几个时序参数: 水平同步脉冲宽度;水平同步脉冲结束到水平门的开始之间的宽度;一个视频行可视区域的宽度;一个完整的视频行的宽度,从水平同步脉冲的开始到下一个水平同步脉冲的开始。 垂直时序 在垂直时序与水平时序类似,包括以下几个不同的时序参数: 垂直同步脉冲宽度;垂直同步结束到垂直门的开始之间的宽度;一个视频帧可是区域的宽度;一个完整视频帧的宽度,从垂直同步脉冲到下一个垂直同步脉冲的开始。 组合视频帧时序 视频帧由vlen个视频行组成,每一行由hlen个像素,水平门与垂直门的“与”函数即为可是区域,图像的其他区域为消隐区。 目前存在很多种不同VGA模式,以下就常见的各种模式种参数进行说明,给出 VGA模式中各种时序参数可以参考。 表1 水平时序 说明: 有效时间包括 6 列过扫描边界列,有些时序表将这几列加在后沿和前沿中 表2 垂直时序 说明: 有效时间包括 4 行过扫描边界行,有些时序表中将这几行加在后沿和前沿中。 *当有效时间增加时,它超过了vsync信号的上升沿,因此前沿为-1 在实际设计中如何通过不同的系统频率确定适当的显示模式? 例如在RhicSP2200 开发板中FPGA 的系统时钟频率为 50MHz。 这个时钟频率可以用来设计显示 800X600 模式,为了显示器显示效果好,采用场频(刷新频率)75Hz,那么帧长可以确定为 666,而行总长设计为 1000 像素。 根据以上所述,我们可以设计如Examples1类似HDL代码,使用这段代码在Valid有效期间对RGB中Blue两位赋值1,得到一个蓝色屏幕显示边界如图1所示。 色彩原理 RGB 色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红、绿、蓝三个通道的颜色,通过三种基本颜色亮度值从0~255不同产生出其他各种颜色,这种模式叫加色模式。 为什么叫加色模式呢,举个例子,通常使用的电视屏幕和电脑屏幕上的显示就是这样的模式,在没有图象时,屏幕是黑的,若R,G,B三色亮度都为255 时混合叠加打在屏幕上时则显示成白色。 就是加起来是白色的意思,叫加色模式。 这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。 而与我们电脑相关的地方,就是目前的显示器大都是采用了RGB颜色标准,这就是为什么它对我们来说这么重要了。 在显示器上,是通过电子枪打在屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示 32 位颜色,约有一百万种以上的颜色。 如果说它所显示的颜色还不能完全吻合自然界中的某种色彩的话,那已经几乎是我们肉眼所不能分辩出来的了。 而 RhicSP2200 开发板系统中每一个色彩都是使用 2bit 来表示的,因此可见RhicSP2200 系统可以出现64 种不同的颜色。 其他色彩的使用请在实际工作中更多的加以体会。 显示 通过以上的讲述,已经可以在计算机显示器上显示一个有颜色的区域了,在这个小节中我们再举一个简单的例子,在显示器中显示两个镶嵌的正方形,字符等显示与其类似,可以参考瑞芯科技其他设计示例。 例如我们可以在xpos与ypos的某一区间给RGB信号赋不同的值将得到如图2所示的显示效果。 例子 1: 使用 50MHz 时钟频率产生的 VGA同步脉冲以及视频有效信号 modulesync_gen_50m( rst_n,//synthesisattributeclock_bufferofrst_nisibufg; clk, hsync, vsync, valid, x_cnt, y_cnt ); input rst_n ; input clk ; output hsync ; output vsync ; output valid ; output [9: 0] x_cnt ; output [9: 0] y_cnt ; reg hsync ; reg vsync ; reg valid ; reg [9: 0] x_cnt ; reg [9: 0] y_cnt ; always@(posedgeclkornegedgerst_n) if(! rst_n) x_cnt<=10'd0; elseif(x_cnt==10'd1000) x_cnt<=10'd0; else x_cnt<=x_cnt+1'b1; always@(posedgeclkornegedgerst_n) if(! rst_n) y_cnt<=10'd0; elseif(y_cnt==10'd665) y_cnt<=10'd0; elseif(x_cnt==10'd1000) y_cnt<=y_cnt+1'b1; always@(posedgeclkornegedgerst_n) if(! rst_n) begin hsync<=1'b0; vsync<=1'b0; end else begin hsync<=x_cnt<=10'd50; vsync<=y_cnt<=10'd6; end always@(posedgeclkornegedgerst_n) if(! rst_n) valid<=1'b0; else valid<= ((x_cnt>10'd180)&&(x_cnt<10'd980)&& (y_cnt>10'd35) &&(y_cnt<10'd635)); endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog 编写 fpga vga 显示