VGA显示控制资料

合集下载

实验9 VGA显示控制器实验

实验9  VGA显示控制器实验

实验9 VGA显示控制器实验1、实验目的:1)理解VGA显示的基本原理。

2)学习计数器和LPM_ROM的使用方法2、实验原理:图1 VGA显示控制器的原理框图3、实验内容1)彩条信号实验a)创建锁相环,把输入的50MHz时钟变成25MHz,并创建元件。

b)利用所给的VGA_Pattern和VGA_Ctrl,创建元件。

c)完成顶层原理图,在QuartusⅡ上进行编译、综合、适配。

引脚锁定以及硬件下载测试。

2)显示自己的姓实验。

修改VGA_Pattern,利用if语句控制相应区域的相应值,在QuartusⅡ上进行编译、综合、适配。

引脚锁定以及硬件下载测试。

3)显示数字实验a)创建lpm_rom,手动输入“0”的mif文件。

b)顶层文件为numTop.v,在QuartusⅡ上进行编译、综合、适配,硬件下载测试。

4)计数显示实验a)创建“1~9”的lpm_rom,mif文件已给出。

b)加入计数器。

c)完成顶层文件,在QuartusⅡ上进行编译、综合、适配,硬件下载测试。

5)数字钟实验在4)基础上加入位置控制,完成顶层文件,在QuartusⅡ上进行编译、综合、适配,硬件下载测试。

6)显示理工校徽实验(2)moduleVGA_Pattern(//HostSideoRed,oGreen,oBlue,iCurrent_X,iCurrent_Y,iVGA_CLK,iRST_N); // Host Sideoutput reg oRed;output reg oGreen;output reg oBlue;input [9:0] i Current_X;input [9:0] i Current_Y;// Control Signalinput iVGA_CLK;input iRST_N;always@(posedge iVGA_CLK or negedge iRST_N)beginif(!iRST_N)beginoRed <= 0;oGreen <= 0;oBlue <= 0;endelsebeginif((( iCurrent_Y>60)&& (iCurrent_Y <80))&&((iCurrent_X>200)&&(iCurrent_X <400)))beginoRed <= 1;oGreen <= 0;oBlue <= 0;endelse if((( iCurrent_Y>80)&& (iCurrent_Y <240))&&((iCurrent_X>200)&&(iCurrent_X <240)))beginoRed <= 1;oGreen <= 0;oBlue <= 0;end/*else if((( iCurrent_Y>150)&& (iCurrent_Y <170))&&((iCurrent_X>260)&&(iCurrent_X <340)))/*else if((150 < iCurrent_Y < 170)&&(260<iCurrent_X < 340))beginoRed <= 1;oGreen <= 0;oBlue <= 0;endelse if((( iCurrent_Y>170)&& (iCurrent_Y <240))&&((iCurrent_X>290)&&(iCurrent_X <310)))/*else if((170 < iCurrent_Y < 240)&&(290 < iCurrent_X < 310))beginoRed <= 1;oGreen <= 0;oBlue <= 0;end*/else if((( iCurrent_Y>240)&& (iCurrent_Y <260))&&((iCurrent_X>200)&&(iCurrent_X <400)))/*else if((240 < iCurrent_Y < 260)&&(150 < iCurrent_X < 450))*/beginoRed <= 1;oGreen <= 0;oBlue <= 0;endelsebeginoRed <= 0;oGreen <= 0;oBlue <= 0;endendendendmodule(3)(4)module numTop1(CLK,RST,R,G,B,HS,VS); input CLK,RST;output R,G,B,HS,VS;wire clk25Mhz,vga_clk;wire [9:0]ram_data;wire [9:0] X,Y;wire [6:0] ram_addr;wire [3:0]COUNT;wire carry1;wire CLK1HZ;reg vga_data;assign ram_addr = {Y[5:2],X[4:2]};altPLL0 u1(CLK,clk25Mhz);VGA_Ctrl u2(.iRed(vga_data),.iGreen(vga_data),.iBlue(vga_data),.oCurrent_X(X),.oCurrent_Y(Y),// VGA Side.oVGA_R(R),.oVGA_G(G),.oVGA_B(B),.oVGA_HS(HS),.oVGA_VS(VS),.oVGA_CLK(vga_clk),// Control Signal.iCLK(clk25Mhz),.iRST_N(RST) ); demo_shuzi u17(ram_addr,vga_clk,ram_data[0]); ROM1 u21(ram_addr,vga_clk,ram_data[1]);ROM2 u14(ram_addr,vga_clk,ram_data[2]);ROM3 u15(ram_addr,vga_clk,ram_data[3]);ROM4 u6(ram_addr,vga_clk,ram_data[4]);ROM5 u7(ram_addr,vga_clk,ram_data[5]);ROM6 u8(ram_addr,vga_clk,ram_data[6]);ROM7 u9(ram_addr,vga_clk,ram_data[7]);ROM8 u10(ram_addr,vga_clk,ram_data[8]);ROM9 u11(ram_addr,vga_clk,ram_data[9]);/*demo_shuzi u3(ram_addr,vga_clk,ram_data);*/ GeneralCnt #(4,9) u4(CLK1HZ,RST,1,COUNT,carry1); ClkDiv #(26,50000000) u5(CLK,RST,CLK1HZ);always@(X,Y)if(X<32 && Y<64)vga_data=ram_data[COUNT];else if(X<64 && Y<64)vga_data=ram_data[COUNT];elsevga_data=0;endmodule//任意倍整数分频器module ClkDiv(clk_in,rst_n,clk_out);parameter MSB = 4, DIV_TIMES = 10;input clk_in,rst_n;output clk_out;reg clk_out;reg [MSB-1:0] count;always @(negedge rst_n or posedge clk_in)beginif(rst_n==0)begincount<=0;endelsebeginif(count < (DIV_TIMES-1))count<=count+1'b1;elsecount<=0;endendalways @(negedge rst_n or posedge clk_in) beginif(rst_n==0)beginclk_out<=1'b0;endelsebeginif(count<(DIV_TIMES>>1))clk_out<=1'b0;elseclk_out<=1'b1;endendendmodule//通用计数器module GeneralCnt(clk,reset_n,ena,cnt,carry_out);parameter MSB = 4, CNT_END = 9; input clk;input reset_n;input ena;output [MSB-1:0]cnt;output carry_out;reg [MSB-1:0]cnt;reg carry_out;//计数always@(posedge clk or negedge reset_n) beginif(!reset_n)cnt <= 0;else if(ena && cnt==CNT_END)cnt <= 0;else if (ena && cnt < CNT_END)cnt <= cnt + 1'b1;end//产生进位输出always@(posedge clk or negedge reset_n) begin if(!reset_n)carry_out <= 1'b0;else if(ena && cnt==CNT_END)carry_out <= 1'b1;elsecarry_out <= 1'b0;endendmodule。

VGA显示控制

VGA显示控制

基于FPGA 的VGA显示控制摘要VGA(Video Graphics Array)即视频图形阵列,是IBM公司1987年推出的一种传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛应用。

本次课程设计是基于FPGA和主芯片为 EP4CE30F23C8N的ALTER公司的开发板Cyclone IV来实现的。

数字图像信息在VGA接口显示器正确、完整地显示,涉及到时序的构建和数字图像信息的模拟化两方面,提出一种能够广泛应用的VGA显示接口方案,详细阐述了数字图像数据DA转化并输出到VGA接口显示器显示的方法,其中包括接口的硬件设计、视频DA转换器的使用方法、通过FPGA构造VGA时序信号的方法等等。

方案可以应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。

课设主要用到的芯片是ADV7123,它是一款高速、高精度数模转换芯片。

拥有三路十位D/A转换器,能够将代表颜色的数据锁存到数据寄存器中,然后通过D/A 转换器转换成模拟信号输出,得到我们要的色彩。

VGA显示的硬件设计和原理1.1 FPGA主芯片课程设计所用开发板的主芯片是EP4CE30F23C8N——Cyclone IV,其由Altera公司开发,值得注意的是该开发板所支持的QUARTUS II的版本较高,并且11.0的版本较12.0的版本编译好的程序更好下载。

图-11.2 ADV7123实现VGA的控制显示主要用到的芯片就是ADV7123,ADV7123由完全独立的三个I0位高速D/A转换器组成,RGB(红绿蓝)视频数据分别从R9~R0、G9~G0、B9~B0输入,在时钟CLOCK的上升沿锁存到数据寄存器中,然后经告诉D/A转换器转换成模拟信号。

三个独立的视频D/A转换器都是电流型输出,可以接成差分输出,也可以接成单端输出。

DE2-115上按单端输出,在模拟输出端用75欧姆电阻接地,以满足工业标准。

VGA显示的控制器

VGA显示的控制器

VGA显示的控制器1 VGA显示接口原理计算机显示器的显示有许多接口标准,常见的有 VGA、SVGA等。

VGA接口,也叫D-Sub接口,是15针的梯形插头,分成 3排,每排 5个,传输模拟信号。

VGA接口采用非对称分布的 15针连接方式,其工作原理是:将显存内以数字格式存储的图像(帧)信号在RAMDAC 里经过模拟调制成模拟高频信号,然后再输出到显示设备成像。

VGA 支持在640×480的较高分辨率下同时显示16种色彩或256种灰度,同时在 320 × 240 分辨率下可以同时显示 256种颜色。

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

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

2 VGA显示控制器的设计实现系统硬件框图如图所示通常VGA显示器显示的图像数据量较大,而 FPGA 内置 ROM 很难满足这么大的存储量,FPGA需要外接SDRAM来存储这些数据。

VGA显示器的输入的是模拟信号,所以由 VGA显示控制器产生的 RGB信号在进入VGA 接口之前要经过一个 D/A 转换器。

2.VGA时序控制信号VGA显示器的时序控制要严格遵循“VGA工业标准”,即640×480×60Hz模式,否则会导致VGA显示器无法正常工作。

图2-1所示为行扫描时序,图2-2所示为场扫描时序。

(1)行扫描信号时序:图2-1给出了行视频时序示意图。

在行扫描时序中,包括以下几个时序参数:HSYNC Signal是用来控制“列填充”,而一个HSYNC Signal可以分为4个段,也就是a(同步段),b(后沿段),c(激活段),d(前沿段)。

HSYNC Signal的a是拉低的128个列像素,b是拉高的61个列像素,c是拉高的806个列像素,最后的d是拉高的53个列像素。

10-实验报告

10-实验报告

计算机组成原理实验报告实验10:VGA显示控制器的设计实验十VGA显示控制器的设计一、实验目的1、理解VGA显示器的工作原理。

2、理解分辨率的含义以及分辨率的表示方法。

3、理解VGA相关的概念:像素、行同步和场同步、消隐。

4、掌握VGA控制器的设计方法和设计要点。

5、通过修改代码改变行同步、场同步时序参数,了解VGA能正确显示的参数范围。

二、实验内容1、阅读“VGA显示控制器设计”PPT;2、完成VGA控制器的设计,在屏幕上显示出八行八列的黑白相间的图案。

3、掌握PLL的定制方法。

4、在2的基础上,调整屏幕分辨率,将原来640*480的分辨率,通过修改代码改变行同步、场同步时序参数,变成1280*1024的分辨率,帧频不变,均为60HZ。

为了满足显示的需要,需要用PLL将50MHz的频率倍频到108MHz。

5、利用VGA+ROM的结构显示给定图片。

6、利用VGA+ROM的结构显示字符,要求通过修改代码可以实现各种显示效果:改变字符颜色和大小;改变字符位置;其它显示效果。

7、在屏幕上显示一个4*4的红色小球,控制小球从左上至右下移动小球,也可以选择其它的运动轨迹。

三、实验仪器及设备:一、PC机二、 QuartusⅡ 9.0 三、 DE2-70 四、显示器四、实验步骤1、阅读“VGA显示控制器设计”PPT,理解VGA显示器的工作原理、分辨率的含义以及分辨率的表示方法和VGA相关的概念:像素、行同步和场同步、消隐。

2、认真阅读显示出八行八列的黑白相间的图案的verilog代码(640*480的分辨率),掌握编写类似代码的思路。

3、修改给定的分辨率为1280*1024的代码,显示出实验要求的黑白格团。

主要修改三点:a、x和y的位数,由于分辨率要达到1280,所以x和y的位数至少要有 11位。

b、修改输入频率,把25MHZ改为108MHZ(通过宏模块)。

c、always显示输出模块内有一些问题,需要作相应修改。

VGA图像显示控制器设计报告

VGA图像显示控制器设计报告

摘要本实验报告为VGA显示控制器设计报告。

实验设计了基于VHDL描述的VGA显示控制器,通过FPGA控制CRT显示器显示色彩和图形。

完成的功能包括64种纯色的显示、横向和纵向彩色条幅的显示以及正方形色块的运动与控制。

实验的重心放在了显示控制器的系统层面的设计,采用了自顶向下的思路进行设计,系统的核心为有限状态机。

报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了VHDL语言描述。

完成了状态机和核心模块以及系统整体的仿真验证。

最终下载到实验板上测试通过。

关键词:FPGA;VHDL;VGA显示控制;状态机第一部分任务要求 (1)1.1课题要求 (1)1.2设计目标 (1)第二部分系统设计 (2)2.1设计思路 (2)2.2系统结构设计 (4)2.2.1系统结构框图 (4)2.2.2系统逻辑功能划分 (4)2.2.3层次模块划分 (5)2.2.4模块设计图 (8)2.2.5控制器设计 (8)2.2.6状态机设计 (10)2.2.7基本模式设计 (10)2.2.8用户模式设计 (11)2.3系统硬件语言描述 (14)2.3.1VHDL描述思路 (14)2.3.2总体电路的描述 (14)2.3.3分块电路的描述 (18)2.4系统仿真验证 (31)第三部分结果与分析 (35)3.1实现功能说明 (35)3.2器件资源分析 (36)3.3VHDL设计优化 (38)3.4故障和问题分析 (40)第四部分总结与结论 (41)4.1实验结论 (41)4.2总结体会 (41)第五部分附录部分 (43)5.1元器件和仪表清单 (43)5.2VHDL源代码 (43)5.3电路图 (59)5.4参考文献 (67)第一部分任务要求1.1课题要求设计一个 VGA 图像显示控制器。

1.显示模式为 640×480×60Hz 模式;2.用拨码开关控制 R、G、B(每个2 位),使显示器可以显示64 种纯色;3.在显示器上显示横向彩条信号(至少 6 种颜色);4.在显示器上显示纵向彩条信号(至少 8 种颜色);5.在显示器上显示自行设定的图形、图像等。

VGA接口和显示技术总结1

VGA接口和显示技术总结1

VGA接口和显示技术总结1 引脚功能和布线标准1.1 VGA接口15针定义标准标准15针VGA接口定义如下表:HDSUB5脚 信号 功能/描述 注释1 VGA_RED VGA红色分量,输出端下拉电阻75欧姆 模拟信号 0.7 P-P2 VGA_GRN VGA绿色分量,输出端下拉电阻75欧姆 模拟信号 0.7 P-P3 VGA_BLU VGA兰色分量,输出端下拉电阻75欧姆 模拟信号 0.7 P-P4 N.C 不连接5 GND 地线6 RGND 红色地7 GGND 绿色地8 BLUE 蓝色地9 DDC_POWER DDC电源,用于监视器的EEPROM供电 电源 3.3V10 SGND 同步数字地11 N.C 不连接12 VGA_I2C_DAT DDC I2C数据 输出端电压 3.3V13 VGA_HSYNC VGA水平同步信号 输出端电压 3.3V - 5.0V14 VGA_VSYNC VGA垂直同步信号 输出端电压 3.3V - 5.0V15 VGA_I2C_CK DDC I2C时钟 输出端电压 3.3V备注:1.I2C总线用于DDC获得监视器的性能参数(生产商、型号、频率、分辨率等)。

2.在某些设备中引脚4、11用于I2C总线连接传输设备参数。

2.2. HSYNC和VSYNC信号在设计VGA的输出设备时输出的同步信号是3.3V的,因为VGA监视器可能驱动同步信号是5V,所以有必要使用高阻非双向的缓冲器。

见参考设计图。

为了优化ESD保护,添加低容性钳位二极管到监视器的同步信号上,这些钳位二极管应该放在5V电源平面和地平面之间,并尽可能距离VGA插座近。

2.3. DDC接口大多显示设备都提供了一个专用I2C总线用于VGA接口,从而实现DDC接口,用来读取CRT监视器的特定扩展显示表示数据(EDID)。

I2C总线也是3.3V的,而大部分DDC是5V的,所以放置100K欧姆的上来电阻在5V电源和每个DDC线之间。

VGA 图像显示控制器设计报告

VGA 图像显示控制器设计报告
D~E:行消隐前肩完成扫描,相当于准备同步
O~P:场消隐期即同步,相当于还原扫描坐标吧
P~Q:场消隐后肩相当于准备开始扫描吧
Q~R:场显示期扫描中,数据有效区域
R~S:场消隐前肩完成扫描,相当于准备同步
以下是行扫描,场扫描HS,VS时序图:
图6
如上图所示:VGA一直在扫描,每一场的扫描包括了若干行扫描,反复循环。且在640*480@60Hz的标准下,每秒需要输出25.175M像素,即每秒输出31469行,也即每秒输出60张图。其工业标准如下图所示:
图7
此部分代码见附录。原理图如下:
图8
3、
数据存储模块调用LPM_ROM模块。具体设置如下:
图9
该模块用于存储图像数据。数据位宽为3,地址线为32768.
原理图如下:
图10
存储与该ROM的图像数据原为BMP格式,为使其可以存储于ROM内部,需要使用软件将信息转换。本实验使用3位数据存储颜色信息,因此仅能显示8中颜色,具体对应关系如下表所示:
显示带宽:带宽指的显示器可以处理的频率范围。如果是60Hz刷新频率的VGA,其带宽达640x480x60=18.4MHz,70Hz的刷新频率1024x768分辨率的SVGA,其带宽达1024x768x70=55.1MHz。
时钟频率:以640x480@59.94Hz(60Hz)为例,每场对应525个行周期(525=10+2+480+33),其中480为显示行。每场有场同步信号,该脉冲宽度为2个行周期的负脉冲,每显示行包括800点时钟,其中640点为有效显示区,每一行有一个行同步信号,该脉冲宽度为96个点时钟。由此可知:行频为525*59.94=31469Hz,需要点时钟频率:525*800*59.94约25MHz

VGA简单图像显示控制模块设计

VGA简单图像显示控制模块设计

VGA简单图像显示控制模块设计一、实验目的随着数字图像处理的应用领域的不断扩大,其实时处理技术成为研究的热点。

EDA (电子设计自动化)技术的迅猛发展为数字图像实时处理技术提供了硬件基础。

其中FPGA 的特点适用于进行一些基于像素级的图像处理。

LCD 和CRT 显示器作为一种通用型显示设备,如今已经广泛应用于工作和生活中。

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

为此,尝试将VGA 显示的控制转化到FPGA 来完成实现。

利用可编程器件CPLD/FPGA实现VGA彩色显示控制器在工业现场中有许多实际应用。

以硬件描述语言VHDL对可编程器件进行功能模块设计、仿真综合,可实现VGA显示控制器显示各种图形、图像、文字,并实现了动画效果。

二、实验概要1、VGA输出利用FPGA 设计一个类似点阵LCD 显示的VGA 显示控制器,可实现文字及简单的图表显示。

工作时只需将要显示内容转换成对应字模送入FPGA,即可实现相应内容的显示。

2、LCD1602显示显示VGA图像输出信息。

3、按键控制选择要显示的图片或内容等等。

4、声光提示LED与蜂鸣器,用于警告提示或其他功能标识。

5、 VGA 接口及设计参数VGA接口是与显示器进行通信的唯一接口。

通过CPLD/FPGA器件对RGB信号、行同步信号、场同步信号等信号的控制,并参照有关标准,可以实现对VGA显示器的控制。

由此可见,了解接口标准,控制时序和设定恰当的参数是系统设计的关键。

参照VGA主要参数的工业标准,像素输出频率为25.175MHz;行频(线频率)为31.469KHz;场频(刷新率)为59.94Hz。

参数设计原理以及行同步信号(Ts)与显示信号(Tdis)的关系如图1所示。

6、 VGA 图像控制器的设计方案VGA图像控制器是一个较大的数字系统。

采用模块化设计原则,借鉴自顶而下的程序设计思想,进行功能分离并按层次设计。

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

基于FPGA 的VGA显示控制摘要VGA(Video Graphics Array)即视频图形阵列,是IBM公司1987年推出的一种传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛应用。

本次课程设计是基于FPGA和主芯片为 EP4CE30F23C8N的ALTER公司的开发板Cyclone IV来实现的。

数字图像信息在VGA接口显示器正确、完整地显示,涉及到时序的构建和数字图像信息的模拟化两方面,提出一种能够广泛应用的VGA显示接口方案,详细阐述了数字图像数据DA转化并输出到VGA接口显示器显示的方法,其中包括接口的硬件设计、视频DA转换器的使用方法、通过FPGA构造VGA时序信号的方法等等。

方案可以应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。

课设主要用到的芯片是ADV7123,它是一款高速、高精度数模转换芯片。

拥有三路十位D/A转换器,能够将代表颜色的数据锁存到数据寄存器中,然后通过D/A 转换器转换成模拟信号输出,得到我们要的色彩。

VGA显示的硬件设计和原理1.1 FPGA主芯片课程设计所用开发板的主芯片是EP4CE30F23C8N——Cyclone IV,其由Altera公司开发,值得注意的是该开发板所支持的QUARTUS II的版本较高,并且11.0的版本较12.0的版本编译好的程序更好下载。

图-11.2 ADV7123实现VGA的控制显示主要用到的芯片就是ADV7123,ADV7123由完全独立的三个I0位高速D/A转换器组成,RGB(红绿蓝)视频数据分别从R9~R0、G9~G0、B9~B0输入,在时钟CLOCK的上升沿锁存到数据寄存器中,然后经告诉D/A转换器转换成模拟信号。

三个独立的视频D/A转换器都是电流型输出,可以接成差分输出,也可以接成单端输出。

DE2-115上按单端输出,在模拟输出端用75欧姆电阻接地,以满足工业标准。

低电平有效的BLANK信号为复合消隐信号,当BLANK为低电平时,模拟视频输出消隐电平,此时从R9~R0,G9~G0,B9~B0输入的所有数据被忽略。

BLANK和SYNC都是在CLOCK 的上升沿被锁存的。

图-2是ADV7123的功能原理图:图-2图-3是它的引脚图:图-3引脚功能描述:G0-G9,B0-B9,R0-R9:像素数据输入端口,上升沿来临锁存数据;BLANK:复合空白信号控制输入;CLOCK:65MHz时钟输入端口;IOB,IOG,IOR:像素实时输出端口;SYNC:复合同步控制输入。

图-4是ADV7123 的时序图:图-4开发板与显示器的端口连接:连接头如图-5所示,15个管脚里面5个是最重要的,他们包括三个基本红、绿、蓝三条基本色彩线和水平与垂直两条控制线,有这5条控制线,我们可以在屏幕上显示多种颜色,在开发板上,红、绿、蓝三条基本色彩每条都由10条输入线控制,课设中用到其中8条,可以实现显示真彩色BMP图像图-5图-6是原理图:图-62.同步时序的实现2.1 VGA时序原理我们常把要显示的数据如图像处理结果存放到存储器里,如果要把显示存储器里的图像在VGA接口显示器显示,大多情况下,扫描时序是需要我们构造的。

以1024@768,59.94 Hz(60 Hz)为例。

VGA工业标准规定,如图2,每场信号对应806个行周期,其中768行为图像显示行,每场有场同步信号,该脉冲宽度为6个行周期的负脉冲;每显示行包括1344点时钟,其中1024点为有效显示区,每行有一个行同步信号负脉冲,该脉冲宽度为136个点时钟。

这样我们可以知道,行频为1344@59.94 Hz即80559 Hz,需要的点时钟频率为:806@1344@59.94 Hz约65 MHz。

图7 、8行场同步信号时序图图-7图-8同步信号,如场同步、行同步、符合同步信号可以在FPGA里构建。

选取65 MHz 的晶振作为点时钟CLOCK输入,将CLOCK输入到模等于1344的像素脉冲计数器中,当像素脉冲计数在0到136脉冲间输出低电平,其它输出高电平,以此作为行同步信号Hsys;然后以vga_hs行节拍为单位进行计数,当计到0到6时输出低电平,其它输出高电平,当计了806个行同步信号时,计数器清0,以此作为场同步信号vga_vs。

根据图-9,可以控制在屏幕上显示不同的图形,要注意行消隐和场消隐时间。

图-9其中行时序和场时序都要产生同步脉冲(sync a)、显示后沿(back porch b)、显示时序段(displayinterval c)和显示前沿4个部分,各部分所占的时间如上图所示。

2.2软件实现(1)产生hs行同步脉冲,宽度136pix;if(hcnt[10:8]==3'd0&&(hcnt[7]==1'b0||hcnt[7:4]==4'd0)) //-- 0~135beginvga_hs <= 1'b0;endelsebeginvga_hs <= 1'b1;end(2)产生vs场同步脉冲, 宽度 6个vgahs宽度;if(vcnt[9:3]==7'd0&&vcnt[2:1]!=2'b11) //-- 0~5beginvga_vs <= 1'b0;endelsebeginvga_vs <= 1'b1;end3.总体设计总体设计一共包含4个模块,包含2个分频模块,1个计数模块,1个控制显示模块,具体设计如下:(1)由于系统时钟为50MHz,但是要65MHz的输入时钟,可以通过锁相环,比例为13/10,具体方法:Tools->MagaWizard Plug-In Manager->Create a new custom megafuctionvariation->ALTPLL->Verilog HDL另外还要设计一个50M分频来控制每幅画面显示的时间,代码如下:module div50M(clkin,clkout);input clkin;output clkout;reg clkout;reg [25:0]cnttemp;always @(posedge clkin )beginif(cnttemp==49999999)begincnttemp <= 1'b0;endelsebeginif(cnttemp==25000000)beginclkout <= 1'b1;endelsebeginclkout <= 1'b0;endcnttemp <= cnttemp+1'b1;endend(2)计数模块长度为3位,从000到111一共8种情况。

连接50M分频,计数器左边接50M分频,每当上升沿来临时,计数器加1,通过输出值得不同展现不同画面。

(3)控制模块包括时序的控制以及同步、显示的时间的设计,同时为了得到不同的颜色,根据不同颜色相加可以配成第三种颜色,下图为配色方案,具体可以通过程序来实现,因为分别采用的是8位来表示三基色,每一种三基色都有1到255种情况,因此可以配出多种颜色,图-10为配色方案:图-10设计好这四个模块,画出原理图-11:图-114.程序调试将画好的原理图分配好引脚,进行编译,以下是我在调试中遇到的问题,以及解决方法。

(1)刚开始会出现很多语法错误的问题,这需要认真检查源程序,比如有些地方一句话结束,没有加分号,还有的符号用的中文符号,也会出编译错误;有的地方如一个if必须对应一个else,一个begin对应一个end,这些基本的错误要认真检查。

(2)行同步与场同步的时间要严格控制,如果控制不当有可能会损坏显示器,这个要根据图-9,找到1024*768@60的相应时序设计。

(3)关于计数参数vga_en的case语句,一个要注意语法问题,另外就是通过case语句控制显示不同画面,如显示横条或是竖条怎么设计,要明白这个语句的作用是控制显示的位置。

这里要注意的是通过hcnt和vcnt控制显示那些行和哪些列,只要该行不显示,则不管它对应的列是显示还是不显示,该行都不显示。

(4)关于行像素点计数参数hpixcnt的case语句,hpixcnt是一个位宽为10位的矢量,当取最高位为0时在行像素点0到512显示一种颜色,取1时在行像素点513到1024可以显示另一种颜色,当取高两位时有四种选择,高三位则有8中颜色选择。

显示的部分图像如下:5.课设总结经过两周的课设,使我对FPGA有了更深刻的理解,从选择课题,到着手设计以及出现效果,这过程中需要不断改进,不断获取信息,深刻理解其工作原理,才能找到实现的方法。

刚开始,对视频显示没有多少了解,通过看芯片资料,网上查阅论文资料,才慢慢对其有一定了解,然后是研究其显示原理,以及时序的相关问题。

由于对verilog语言不是很了解,还需要了解其基本语法,掌握基本的分频、计数模块的设计方法。

但是这些还不够,最最重要的的是控制模块,这个过程我借鉴了一些其它资源,研究它的原理、作用。

然后通过不断地调试得到自己想要的效果。

在调试的过程中,首先就是要小心,避免一些基本语法的错误,然后就是要根据时序的关系,控制显示输出,不仅要考虑到显示的的位置,显示的色彩,还要控制显示的时间等问题。

在今后的学习中,要谨慎治学,多思考,多翻阅书籍。

遇到不懂的问题应该多渠道查找信息,平时多练习,培养研究能力,只有这样才能在今后的学习中不断进步。

这次课程设计也是汲取经验的过程,通过不断积累经验,才能更好地解决问题。

6.主要程序清单`timescale 1ns / 1psmodule vga_top(clk65M,//输入时钟rstn, //复位vga_en, //0到7计数,显示8帧不同画面vga_hs, //行同步信号vga_vs, //场同步信号vga_r,vga_g,vga_b,vga_blk, //复合空白信号vga_syn, //复合同步信号控制输出vga_clk //输出时钟);input c lk65M;input r stn;input [2:0]vga_en;output vga_hs;output vga_vs;output [7:0]vga_r; //要显示真彩色BMP图像,r,g,b三个分量各需要8位 output [7:0]vga_g;output [7:0]vga_b;output vga_blk;output vga_syn;output vga_clk;reg vga_vs;reg[7:0] vga_r; //声明一个8位的矢量寄存器变量reg[7:0] vga_g;reg[7:0] vga_b;wire vga_blk;wire vga_syn;wire vga_clk;reg [10:0]hcnt; //声明一个11位的矢量寄存器变量,行的像素点计数reg [9:0]vcnt; //行计数reg vgahs1;reg hdisply; //控制行各点的显示reg vdisply; //控制行的显示reg frminit;assign vga_clk = clk65M;assign vga_syn = 1'b0;//--assign vga_blk = vga_vs&vga_hs;assign vga_blk = vdisply&hdisply; //将vdisplay和hdisplay相与赋给vga_blk always @(posedge clk65M or negedge rstn)beginif(!rstn)//rstn低电平复位,重新扫描beginhcnt <= 11'd0;vcnt <= 10'd0;vga_hs <= 1'b1;vga_vs <= 1'b1;vgahs1 <= 1'b0;hdisply <= 1'b0;vdisply <= 1'b0;frminit <= 1'b0;elsebeginif(hcnt==11'd1343) // 1344pix;有效显示宽度为1024pix beginhcnt <= 11'd0;endelsebeginhcnt <= hcnt + 1'b1;endif(hcnt[10:8]==3'd0&&(hcnt[7]==1'b0||hcnt[7:4]==4'd0)) //-- 0~135beginvga_hs <= 1'b0; //-- 产生hs行同步脉冲,宽度136pix;endelsebeginvga_hs <= 1'b1;endcase(vga_en)3'b000:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320))beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;if((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b001:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<413))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b010:if((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b011:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<797))beginvdisply <= 1'b1;elsebeginvdisply <= 1'b0;endend3'b100:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b101:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endbeginhdisply <= 1'b0;endif((vcnt[9:0]>220)&&(vcnt<420))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b110:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<551)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>419)&&(vcnt<611))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;end3'b111:beginif((hcnt[10:0]>807)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>35)&&(vcnt<797))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endendendcasevgahs1 <= vga_hs;if(vga_hs==1'b0&&vgahs1==1'b1)beginif(vcnt==10'd805)beginvcnt <= 10'd0;frminit <= 1'b1;endelsevcnt <= vcnt + 1'b1;endendelsebeginfrminit <= 1'b0;endif(vcnt[9:3]==7'd0&&vcnt[2:1]!=2'b11)beginvga_vs <= 1'b0;endelsebeginvga_vs <= 1'b1;end endendreg [9:0]hpixcnt;reg [7:0]frmdtmp;always @(posedge clk65M or negedge rstn)beginif(!rstn)beginvga_r <= 8'd0;vga_g <= 8'd0;vga_b <= 8'd0;hpixcnt <= 10'd0;frmdtmp <= 8'd100;endbeginif(hdisply==1'b1)beginhpixcnt <= hpixcnt + 1'b1; endelsebeginhpixcnt <= 10'd0;end if(frminit==1'b1)beginfrmdtmp <= frmdtmp + 1'b1;endcase(vga_en)3'b000:beginvga_r <= 8'd250;vga_g <= 8'd100;vga_b <= 8'd50;end3'b001:begincase(hpixcnt[9])1'd1:beginvga_r <= 8'd100;vga_g <= 8'd250;vga_b <= 8'd0;end1'd0:vga_r <= 8'd100;vga_g <= 8'd250;vga_b <= 8'd200;endendcaseend3'b010:beginvga_r <= 8'd250;vga_g <= 8'd0;vga_b <= 8'd250;end3'b011:begincase(hpixcnt[9:8])2'd0:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end2'd1:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end2'd2:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end2'd3:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250; endendcaseend3'b100:begincase(hpixcnt[9:7])3'b000:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end3'b001:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end3'b010:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end3'b011:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250; end3'b100:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end3'b101:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end3'b110:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end3'b111:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250;endendcaseend3'b101:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd0;end3'b110:beginvga_r <= 8'd250;vga_g <= 8'd0;vga_b <= 8'd0;end3'b111:beginvga_r <= 8'd250;vga_g <= 8'd100;vga_b <= 8'd50;endendcase endendendmodule26。

相关文档
最新文档