基于Verilog的VGA驱动设计1时序分析

合集下载

VGA时序分析

VGA时序分析

VGA时序分析常见的刷新率时序表A(us)Line Period B(us) Sync pulse length C(us) Back porch D(us) Active video time E(us) Front porch根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用DE0板上的50MHz的有源晶振。

为了显示器显示效果好,采用刷新频率为72Hz。

以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns水平扫描Horizonal(Line)A 水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;B 同步脉冲为120像素(Pix)C 后沿为61个像素(Pix)D 有效时间为806个像素(Pix)E 前沿为53个像素/////////////////////////////////////水平扫描参数的设定///////////////////////////////////////////////////parameter LinePeriod =12'd1040;parameter H_SyncPulse=10'd120;parameter H_BackPorch=10'd61;parameter H_ActivePix=10'd806;///////////////////////////////////////水平扫描计数///////////////////////////////////////////////////////always @ (posedge clk or negedge rst_n)if(!rst_n) x_cnt <= 1;else if(x_cnt == LinePeriod) x_cnt <= 1;else x_cnt <= x_cnt+ 1;///////////////////////////////////水平扫描信号hsync产生///////////////////////////////////////////////////////always @ (posedge clk or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt == 1) hsync_r <= 1'b0; //产生hsync信号else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1;O(ms) Frame Period P(ms)Sync length Q(ms)Back porch R(ms)Active video time S(ms)Front porch垂直扫描Vertical(Frame)O 垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;P 同步脉冲为6个行扫描,时间为6x1040x20ns=125us;Q 后沿为21个行扫描,时间为21x1040x20ns=436us;R 有效时间为604个行扫描,时间为604x1040x20ns=12563us;S 前沿为35个行扫描,时间为35x1040x20ns=728us.////////////////////////////////////////////////垂直扫描参数的设定//////////////////////////////////////////////////////// parameter FramePeriod="10"'d666;parameter V_SyncPulse=10'd6;parameter V_BackPorch=10'd21;parameter V_ActivePix=10'd604;///////////////////////////////////////////////垂直扫描计数///////////////////////////////////////////always @ (posedge clk or negedge rst_n)if(!rst_n) y_cnt <= 1;else if(y_cnt == FramePeriod) y_cnt <= 1;else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1;////////////////////////////////////////////////// 垂直扫描信号hsync产生////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) vsync_r <= 1'b1;else if(y_cnt == 1) vsync_r <= 1'b0; //产生vsync信号else if(y_cnt == V_SyncPulse) vsync_r <= 1'b1;并不是每个像素都能显示的,只有在有效区域像素区域内才能显示RGB/////////// 垂直扫描信号hsync产生///////////////////////////////////////////////////wire valid; //有效显示区标志assign valid =(x_cnt >= (H_SyncPulse+H_BackPorch)) &&(x_cnt < (H_SyncPulse+H_BackPorch+H_ActivePix)) &&(y_cnt >= (V_SyncPulse+V_BackPorch)) &&(y_cnt < (V_SyncPulse+V_BackPorch+V_ActivePix));初步整理的时序行周期32us(频率31.3Hz)行同步脉冲时间7us场频率60Hz路漫漫其修远兮,吾将上下而求索。

FPGA之VGA显示器驱动设计

FPGA之VGA显示器驱动设计

VGA显示器驱动设计小梅哥为芯航线FPGA学习套件编写2016年7月13日星期三目录VGA显示器驱动设计 (1)VGA标准介绍 (2)VGA 扫描方式 (2)VGA标准时序分析 (3)芯航线FPGA学习套件VGA电路介绍 (4)小结 (6)VGA 控制器设计 (6)第一步,设计行扫描计数器 (6)第二步,设计场扫描计数器 (6)第三步,产生行同步信号和场同步信号 (7)第四步,输出数据 (7)第五步,输出正确的行列扫描位置 (8)完整VGA控制器设计 (8)VGA控制器仿真验证 (10)Testbench设计 (10)仿真结果分析 (12)VGA控制器板级验证 (12)板级验证需求 (13)板级验证电路设计 (13)添加PLL时钟分频单元 (14)完整的测试电路代码 (15)板级验证 (17)VGA标准介绍计算机显示器有许多现实标准,常见的有VGA、SVGA等,在这里我们用VGA接口来控制显示器,VGA是Video Graphics Adapter(Array)的缩写,即视频图形阵列。

作为一种标准的显示接口得到广泛的应用。

VGA接口常使用15针的DB15接口,该接口引脚功能如下表所示:VGA 扫描方式在VGA标准兴起的时候。

常见的彩色显示器一般由CRT(阴极射线管)构成,色彩是由RGB(红、绿、蓝)三基色组成。

显示是用逐行扫描的方式解决。

阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生RGB三基色,合成一个彩色像素,扫描从屏幕的左上方开始,从左到右,从上到下进行扫描,每扫完一行,电子束都回到屏幕的左边下一行的起始位置。

在这期间,CRT对电子束进行消隐。

每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方。

同时进行场消隐,预备下一场的扫描。

随着显示技术的发展,出现了液晶显示器,液晶显示器的成像原理与CRT不同,液晶显示器是通过对液晶像素点单元施加电压与否,来实现液晶单元的透明程度,并添加三色滤光片、分别使R 、G 、B 这3中光线透过滤光片,最后通过3个像素点合成一个彩色像素点,从而实现彩色显示。

VGA接口时序及其实现方式总结_20140514

VGA接口时序及其实现方式总结_20140514

VGA接口时序及其实现方式总结1.VGA信号理论 (2)1.1VGA端口的结构: (2)1.2显示器工作机理 (3)1.3扫描频率 (4)1.4显示带宽 (4)1.5显示卡术语 (4)2.VGA 时序规范 (5)2.1 时序规范结构: (5)2.2 同步信号及同步头 (7)(1)同步头 (7)(2)行同步信号 (8)(3)场同步信号 (8)2.3 像素点信号 (8)2.4 行信号 (9)2.5 场信号 (9)3.VGA信号时序说明 (10)4.参考文献 (11)VGA接口时序及其实现方式总结1.VGA信号理论显示器上输出的一切信息,包括数值、文字、表格、图象、动画等等,都是由光点(即像素)构成的。

组成屏幕显示画面的最小单位是像素,像素之间的最小距离为点距(Pitch)。

点距越小像素密度越大,画面越清晰。

显示器的点距有 0.31mm、0.28mm、0.24mm、0.22mm 等多种。

分辨率指整屏显示的像素的多少,是衡量显示器的一个常用指标。

这同屏幕尺寸及点距密切相关,可用屏幕实际显示的尺寸与点距相除来近似求得。

点距为 0.28mm 的 15 英寸显示器,分辨率最高为 1024×768。

1.1VGA端口的结构:VGA端口是视频输出端口,端口一共包含15个管脚,如下图:在通常使用的连接方法里面,15个管脚里面的5个是最重要的,他们包括3个基本红,绿,蓝三条基本色彩线和水平与垂直两条控制线。

由这5条控制线,我们一共可以在屏幕内显示8种不同的色彩(8种组合)。

1.2VGA 显像原理在显示器内部,电流流过线圈产生磁场,控制电子束流过显示器表面,水平是从左向右流,垂直方向是从上向下流。

只有当电子沿正方向流的时候(即从左向右,从上到下)显示器工作,而当电子返回显示器的左面或上面的时候显示器不工作。

显示器屏幕尺寸以对角线来度量,常用的显示器有 14、15、17、19、21 英寸等。

显示器水平方向长度与垂直方向高度之比一般为 4:3。

基于FPGA的VGA显示详解(附VHDL代码)

基于FPGA的VGA显示详解(附VHDL代码)

基于FPGA的VGA显示(后附VHDL代码)整个VGA的时序操作很简单,就是形成一个具有一定占空比的电平周期。

只是整个VGA的操作涉及到一些专有名词,理解上比较困难,一旦明白了这些是什么意思后,操作即将变得很简单。

VGA工作流程:常见的彩色显示器,一般由CRT (阴极射线管)构成,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描或隔行扫描的方式实现图像显示,由VGA控制模块产生的水平同步信号和垂直同步信号控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。

扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。

行同步信号HS 和场同步信号VS是两个重要的信号。

注意点:什么时候消隐?为什么要消隐?当一行扫描完毕后然后电子枪又转到下一行的这段时间或是扫描完所有的行后电子枪回到第一行的这段时间,这两段时间都要消隐。

在消隐的时间内,数据是无效的。

这样就保证电子枪的回扫的个动作不干扰显示,因为回扫这个动作是很频繁的,若在这个时间段内数据有效,那么就回在显示屏上出现电子枪回扫的轨迹。

消隐的时候我们干什么?消隐这个动作是显示屏(CRT)执行的,我们在编程时只要注意有这么个东西就行。

同步信号(包括HS和VS)是什么?这个就相当于一个数据起始信号,表明数据马上就要开始了。

如果撇开具体的设备,那么这个信号和AD、DA中常用的Sync(同步)、CS(片选)信号相当。

该信号一般为负电平,但对于有的显示器可不关心该信号的极性,因为它内部可自动转换正负逻辑。

对于普通的VGA显示器,需要引出5个信号:R,G,B:三原色;HS:行同步信号;VS:场同步信。

基于FPGA的VGA显示设计报告

基于FPGA的VGA显示设计报告

正文一,VGA时序标准VGA是一种常用的显示输出接口,采用行场扫描控制结合RGB三色合成原理,输出显示信号。

每个VGA接口为15针接口,分三行排布,每行5针。

如图所示:图1.1 VGA接口15针并未全部使用,有效的信号线共5根,即红绿蓝三基色信号线:R,G,B,每线电压从0V到0.71V变化,表示无色到饱和,依据电平高低,显示颜色的饱和程度。

行同步控制信号,Hsync,控制每行扫描像素的有效和失效。

场同步:Vsync,控制场方向,即整个图像显示过程的时间长度,场同步中的显示部分的时间长度,等于每行扫描时间的总和。

在不同刷新频率下,显示每个像素的时间是不同的,相同刷新频率下,每个像素显示时间是固定的,所以,不同的每个像素写入时间,导致了分辨率的不同。

因为VGA的显示是逐行扫描,每行从左到右扫描,到了行尾,回归到下一行的行头,继续向尾部扫描。

所以,显示原理是逐次写入每行的像素数据,直到整幅图像显示成功为止。

VGA显示的数据是不能锁存的,所以必须一次又一次的连续输入数据,72Hz的刷新率下,一秒钟显示72幅图像,所以,需要连续写入72幅图像,才能达到一秒的显示效果。

所以,VGA显示图像,要反反复复写入图像数据,才能得到持续的显示效果。

图1.2 VGA接口线序VGA显示,无法做到类似于TFT液晶屏的定点写入,VGA是扫描式暂时显示,所以时序显得尤为重要,时序出现失误,图像会出现走形,无法达到准确效果。

而显示的时序控制主要依靠两条数据通道:行同步和场同步,即Hsync和Vsync,其控制了扫描显示的起点和终点,同时控制扫描起点的时间,通过时间的控制,达到确定的显示效果。

具体的控制时序图如下:图1.3 VGA 同步时序VGA显示中,以每个像素写入时间作为FPGA时钟周期,所以每个时钟周期写入一组RGB像素值。

逐行写入,所以每行数据显示的结果,拼凑成一帧图像,72Hz下,每秒显示72帧图像。

由于本设计要求静态显示效果,所以,我们只定义一帧的数据,最后无限循环执行即可。

基于FPGA的VGA显示控制器设计研究

基于FPGA的VGA显示控制器设计研究

基于FPGA的VGA显示控制器设计研究作者:李德明来源:《电子世界》2012年第23期【摘要】本设计采用了以FPGA为主控器件的设计方法,将VGA控制器分成几个子模块,采用Verilog HDL硬件描述语言对各个模块进行描述设计,并利用EDA软件,完成对局部模块和整体模块的代码编写及仿真验证。

通过分析VGA显示的基本原理和信号要求,设计整个系统的软件、硬件结构,包括VGA时序和显存时序的发生,通过按键控制实现横彩条、竖彩条图案的选择,并进一步设计出实现文字和图像的显示。

【关键词】VGA显示;FPGA;时序控制;控制器VGA(video graphic array)作为一种标准的显示接口得到了广泛的应用,基于VGA接口标准的显示器作为一种通用型显示设备,已经成为很多电子数码产品的常用输出设备。

与嵌入式系统中常用的TFT液晶显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。

驱动VGA接口显示器,需要很高的扫描频率,以及极短的处理时间,实现VGA显示功能,既可以使用专用的VGA接口芯片,也可以用FPGA来实现对VGA显示器的驱动控制。

本设计采用Altera公司的FPGA芯片驱动VGA接口显示器显示彩条及简单的图形,FPGA的运行速度块,管脚资源丰富,容易实现大规模的系统设计,有大量的软核可用,便于进行二次开发。

另外,由于FPGA具有可重构能力、抗干扰性强等特点,因此,FPGA在工业控制等领域越来越受到重视。

利用FPGA完成VGA显示控制,可以使图像的显示脱离PC机的控制,形成体积小、功耗低的嵌入式便携式系统,应用于地面勘测、性能检测等方面,具有重要的现实意义。

1.VGA显示技术原理VGA显示控制主要有五个信号线,分别为R、G、B、VSYNC(场同步)、HSYNC(行同步)信号。

红(R)、绿(G)、蓝(B)是大家熟知的三原色,R、G、B这三个模拟信号的电平范围是由0.4V到0.7V,由R、G、B的电压差便可以产生出所有的颜色。

基于FPGA进行VGA控制器设置实现显示器条纹显示

基于FPGA进行VGA控制器设置实现显示器条纹显示实验目的与要求:VGA控制器设计实现显示器条纹显示要求:通过FPGA板的VGA接口在显示器上显示一幅640*480由六条不同颜色的条纹组成的图像。

实验内容:VGA简介VGA彩色显示器,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描方式实现图像显示,由VGA控制模块产生的水平同步信号(HS)和垂直同步信号(VS)控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。

扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。

显示需要R,G,B,Hsync(行同步),Vsync(帧同步)五个信号输出到显示器,本设计按照VGA工业标准输出640*480@60Hz.对应的时序如下:图1 VGA接口信号基本时序图图2 FPGA板上的VGA接口图3 VGA(640*480@60Hz)时序图VGA显示的设计模块为:hsclkvsVGA显示模r块grst_nb说明:设计中FPGA板的VGA接口将R,G,B分别设为定义为2位,3位,3位,例如显示红色RGB可以输出为11000000,绿色输出为00111000,蓝色输出为00000111.表1 25MHz 640*480@60Hz模式下VGA的时序规格说明1. 像素时钟配置为25Mhz。

2. 编写代码时,需要用到的常数参考表一。

3. 输出到显示器上的条纹为从上到下依次为R G B R G B,640*80,。

4. 本实验使用FPGA板:Sparant3EXC3S500E,建project时,需要选择板的型号,。

实验方法、步骤:1、基本设计思想如下图所示:分为这四个模块,产生Hsync(行同步),Vsync(帧同步)以及RGB色彩的输出。

VGA产生行同步(HSYNC)

【原创】基于Verilog的VGA显示控制(有源码)一、VGA时序下面的图是本人画了一个晚上的结果,个人认为能够比较详细的阐述VGA的信号时序。

VGA的时序根据不同的显示分辨率和刷新频率会有变化,具体各种类型的时序信息可以参考下面的网站,这里非常详细的说明的每一种显示模式的VGA时序信息。

/vga-timing二、VGA电平VSYNC,HSYNC为标准TTL电平,0V~3.3V。

RGB的电平在0V~0.7V之间(0V为黑色,0.7V为全色)。

三、程序顶层框图VGA产生行同步(HSYNC),场同步信号(VSYNC),并产生每个像素的地址输入单口ROM(显存)中,ROM输出该点需要显示的颜色值。

四、单口ROM(显存)设计程序的显示模式为800*600,72Hz刷新频率,像素频率为50MHz。

每个像素需要显示的颜色存储在单口RAM中,每种颜色用8个字节表示,则如果要显示8 00*600分辨率,则需要800*600字节(480KB)的单口ROM,由于FPGA内部没有这么大的RAM(我用的是ep2c8),因此我把屏幕上100*100个像素组成的矩形作为一个逻辑像素(即显示同一种颜色),这样只要8*6字节(48字节),用FPGA自带的RAM是很容易实现的。

ROM中颜色存储地址表将全屏划分成8*6的方格,每个方格的颜色存储在ROM中,VGA控制器不断产生行坐标(ROM水平地址)和场坐标(ROM垂直地址),最后组合成ROM实际地址输入ROM中,ROM输出该地址的颜色值,显示在LCD中。

五、程序设计VGA控制器程序module VGA(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b);input clk;//50MHzinput rst_n;//复位信号output hsync;//行同步信号output vsync;//场同步信号//R、G、B信号输出output[1:0]vga_r;output[2:0]vga_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@(posedge clk or negedge rst_n)if(!rst_n)x_cnt<=10'd0;else if(x_cnt==11'd1040)x_cnt<=10'd0;//行计数记到1040else x_cnt<=x_cnt+1'b1;always@(posedge clk or negedge rst_n)//产生行地址(ROM水平地址)if(!rst_n)Xcoloradd<=6'b000000;else if(x_cnt>=Left&&x_cnt<Left+PixelWidth)Xcoloradd<=6'b000000;else if(x_cnt>=Left+PixelWidth&&x_cnt<Left+2*PixelWidth)Xcoloradd<=6'b000001;else if(x_cnt>=Left+2*PixelWidth&&x_cnt<Left+3*PixelWidth)Xcoloradd<=6'b000010;else if(x_cnt>=Left+3*PixelWidth&&x_cnt<Left+4*PixelWidth)Xcoloradd<=6'b000011;else if(x_cnt>=Left+4*PixelWidth&&x_cnt<Left+5*PixelWidth)Xcoloradd<=6'b000100;else if(x_cnt>=Left+5*PixelWidth&&x_cnt<Left+6*PixelWidth)Xcoloradd<=6'b000101;else if(x_cnt>=Left+6*PixelWidth&&x_cnt<Left+7*PixelWidth)Xcoloradd<=6'b000110;else if(x_cnt>=Left+7*PixelWidth&&x_cnt<Left+8*PixelWidth)Xcoloradd<=6'b000111;else Xcoloradd<=6'b110000;//背景颜色地址always@(posedge clk or negedge rst_n)if(!rst_n)y_cnt<=10'd0;else if(y_cnt==10'd666)y_cnt<=10'd0;//场同步记到666else if(x_cnt==11'd1040)y_cnt<=y_cnt+1'b1;//每计数完一行,场同步就加一always@(posedge clk or negedge rst_n)//产生列地址(ROM垂直地址)if(!rst_n)Ycoloradd<=3'b000;else if(y_cnt>=Top&&y_cnt<Top+PixelWidth)Ycoloradd<=3'b000;else if(y_cnt>=Top+PixelWidth&&y_cnt<Top+2*PixelWidth)Ycoloradd<=3'b001;else if(y_cnt>=Top+2*PixelWidth&&y_cnt<Top+3*PixelWidth)Ycoloradd<=3'b010;else if(y_cnt>=Top+3*PixelWidth&&y_cnt<Top+4*PixelWidth)Ycoloradd<=3'b011;else if(y_cnt>=Top+4*PixelWidth&&y_cnt<Top+5*PixelWidth)Ycoloradd<=3'b100;else if(y_cnt>=Top+5*PixelWidth&&y_cnt<Top+6*PixelWidth)Ycoloradd<=3'b101;else Ycoloradd<=3'b110;//背景颜色地址//--------------------------------------------------//signal port ROMwire[7:0]color;wire[5:0]coloradd;assign coloradd={Ycoloradd,3'b000}|Xcoloradd;//将水平地址和垂直地址合成ROM实际地址sprom u1(coloradd,clk,color);//---------------------------------------------------wire valid;//有效数据显示区标志,就是你在液晶屏幕上可以看到的区域assign valid=(x_cnt>10'd184)&&(x_cnt<10'd984)&&(y_cnt>10'd29)&&(y_cnt<10'd629);//--------------------------------------------------reg hsync_r,vsync_r;always@(posedge clk or negedge rst_n)if(!rst_n)beginhsync_r<=1'b0;vsync_r<=1'b0;endelse beginhsync_r<=x_cnt>=10'd120;//产生hsync信号(行同步)when x_c nt>=50,then hsync_r=1,else0;低电平同步vsync_r<=y_cnt>=10'd6;//产生vsync信号(场同步)my LCD islow syncendassign hsync=hsync_r;assign vsync=vsync_r;//--------------------------------------------------//颜色输出assign vga_r[1]=valid?color[7]:1'b0;assign vga_r[0]=valid?color[6]:1'b0;assign vga_g[2]=valid?color[5]:1'b0;assign vga_g[1]=valid?color[4]:1'b0;assign vga_g[0]=valid?color[3]:1'b0;assign vga_b[2]=valid?color[2]:1'b0;assign vga_b[1]=valid?color[1]:1'b0;assign vga_b[0]=valid?color[0]:1'b0;endmodule六、运行结果七、后记在这次程序中只在ROM中存储了一些随机的数,因此显示出来是一些小方格,如果ROM做的更大,完全可以存储一幅图像,显示在LCD中。

基于Verilog的VGA显示控制电路设计

基于Verilog的VGA显示控制电路设计作者:王涌肖顺文罗春梅来源:《数字技术与应用》2019年第04期摘要:采用自上而下的设计方法实现了一个分辨率较高、显示迅速且协议简单的VGA显示控制电路。

在QUARTUS II 13.1软件开发平台上使用Verilog HDL语言来完成时序模块和彩条像素模块的描述、编译,最后在第三方仿真工具Modelsim-Altera中对其进行模拟仿真,结果显示,该设计满足系统要求,能够成功的通过VGA接口在显示器上显示图案。

关键词:Verilog HDL语言;VGA技术;QUARTUS II 13.1;Modelsim-Altera中图分类号:TN92 文献标识码:A 文章编号:1007-9416(2019)04-0150-020 引言近年来,随着数字电路设计技术的逐步发展,集成电路的发展越来越趋近于超大规模、更低功耗及超高速[1]。

Verilog HDL就是在迫切需要设计者使用EDA工具完成大规模集成电路设计发展要求的情况下应运而生的,它使用编写代码的方法来完成数字电路的设计,不管是底层的门级电路,还是高层的行为描述,都可以通过代码实现,这种方式大大的提高了数字电路的设计效率[2]。

本文就是采用Verilog_HDL语言来实现一个VGA显示控制电路。

VGA接口由于具有传输速率高,协议简单,成本低等特点,因此被广泛使用。

1 设计原理1.1 VGA时序分析VGA主要用于计算机显卡传输图像到显示器的桥梁,将显卡处理的视频图像数据实时传输到显示器上进行显示。

广义的VGA为VGA显示器,狭义的VGA为VGA分辨率的时序。

由IBM公司推出的采用RGB模拟信号的VGA视频传输标准,定义了具有60Hz刷新频率、可产生1677万种色彩的640×480像素格式。

VGA的行扫描时序情况,如图1所示。

行同步时期a、行消隐后肩b、行显示时期c、行消隐前肩d四部分组成一个完整的扫描周期。

VGA时序分析

VGA时序分析Vertical timing information 垂直扫描时序根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3E Starter Kit板上的50MHz 的有源晶振。

为了显示器显示效果好,采用刷新频率为72Hz。

以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns水平扫描Horizonal(Line)A 水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;B 同步脉冲为120像素(Pix);C 后沿为61个像素(Pix);D 有效时间为806个像素(Pix);E 前沿为53个像素。

/////////////////////////////////////水平扫描参数的设定/////////////////////////////////////////////////// parameter LinePeriod =12'd1040;parameter H_SyncPulse=10'd120;parameter H_BackPorch=10'd61;parameter H_ActivePix=10'd806;///////////////////////////////////////水平扫描计数/////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) x_cnt <= 1;else if(x_cnt == LinePeriod) x_cnt <= 1;else x_cnt <= x_cnt+ 1;///////////////////////////////////水平扫描信号hsync产生/////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt == 1) hsync_r <= 1'b0; //产生hsync信号else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1;垂直扫描Vertical(Frame)O 垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;P 同步脉冲为6个行扫描,时间为6x1040x20ns=125us;Q 后沿为21个行扫描,时间为21x1040x20ns=436us;R 有效时间为604个行扫描,时间为604x1040x20ns=12563us;S 前沿为35个行扫描,时间为35x1040x20ns=728us。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Verilog的VGA驱动设计(一)VGA时序分析VGA时序分析电阻DAC转换网络和640X480的VGA时序图:图1扫描频率显示器采用光栅扫描方式,即轰击荧光屏的电子束在CRT屏幕上从左到右(受水平同步信号HSYNC控制)、从上到下(受垂直同步信号VSYNC控制)做有规律的移动。

光栅扫描又分逐行扫描和隔行扫描。

电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。

此后,电子束又回到左上方起点,开始下一帧的扫描。

这种方法也就是常说的逐行扫描显示。

Horizonal Timing图2A (us) Line PeriodB (us) Sync pulse lenghtC (us) Back porchD (us) Active video timeE (us) Front porchVertical Timing图3O (ms) Frame PeriodP (ms) Sync lengthQ (ms) Back porchR (ms) Active video timeS (ms) Front porchHorizonal timing information 水平扫描时序图4Notes:∙Active area is actually an active area added with 6 overscan border pixels (in some other VGA timing tables those border pixels are included in back and front porch)Vertical timing information 垂直扫描时序图5Notes:∙Active area is actually an active area added with 4 overscan border lines (in some other VGA timing tables those border lines are included in back and front porch)Note than when the active part of VGA page is widened, it passes by the rising edge of the vertical sync signal in some modes (marked with *)根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3E Starter Kit板上的50MHz的有源晶振。

为了显示器显示效果好,采用刷新频率为72Hz。

以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns水平扫描Horizonal(Line)A 水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;B 同步脉冲为120像素(Pix);C 后沿为61个像素(Pix);D 有效时间为806个像素(Pix);E 前沿为53个像素。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描参数的设定//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter LinePeriod =12'd1040;parameter H_SyncPulse=10'd120;parameter H_BackPorch=10'd61;parameter H_ActivePix=10'd806;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描计数//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) x_cnt <= 1;else if(x_cnt == LinePeriod) x_cnt <= 1;else x_cnt <= x_cnt+ 1;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描信号hsync产生//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt == 1) hsync_r <= 1'b0; //产生hsync信号else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1;垂直扫描Vertical(Frame)O 垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;P 同步脉冲为6个行扫描,时间为6x1040x20ns=125us;Q 后沿为21个行扫描,时间为21x1040x20ns=436us;R 有效时间为604个行扫描,时间为604x1040x20ns=12563us;S 前沿为35个行扫描,时间为35x1040x20ns=728us。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描参数的设定//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter FramePeriod="10"'d666;parameter V_SyncPulse=10'd6;paramete r V_BackPorch=10'd21;parameter V_ActivePix=10'd604;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描计数//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) y_cnt <= 1;else if(y_cnt == FramePeriod) y_cnt <= 1;else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描信号hsync产生//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)if(!rst_n) vsync_r <= 1'b1;else if(y_cnt == 1) vsync_r <= 1'b0; //产生vsync信号else if(y_cnt == V_SyncPulse) vsync_r <= 1'b1;并不是每个像素都能显示的,只有在有效区域像素区域内才能显示RGB//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描信号hsync产生////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wire valid; //有效显示区标志assign valid =(x_cnt >= (H_SyncPulse+H_BackPorch)) &&(x_cnt < (H_SyncPulse+H_BackPorch+H_ActivePix)) && (y_cnt >= (V_SyncPulse+V_BackPorch)) &&(y_cnt < (V_SyncPulse+V_BackPorch+V_ActivePix));下面是测量逐行扫描60HZ的电视盒的VGA时序波形:图6水平—垂直同步信号图7水平—垂直同步信号图8 RED-BLUE颜色信号图9水平同步-R颜色图10颜色R-垂直同步图11初步整理的时序行周期32us(频率31.3Hz)行同步脉冲时间7us场频率60Hz参考资料1)VGA Signal Generation with the XS Board2)CPLD驱动VGA显示器/user1/636/archives/2007/43935.html(图1)3)VGA timing information/documents/pc/vga_timing.html(图2、图3、图4、图5)4)瑞芯科技设计示例RHic013:使用FPGA控制VGA显示5)VGA Controller,Altium6) VGA接口时序波形/dzbbs/20070204/200765205519734395.html(图6、图7、图8、图9、图10、图11)。

相关文档
最新文档