名称:VGA测试试验设计Verilog代码VIVADO ARTIX-7开发板
软件:VIVADO
语言:Verilog
代码功能:
VGA测试试验
VGA使屏幕产生彩色条纹
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:
设计文档:
1 简介
本试验用来试验开发板VGA显示功能,开发板通过VGA数据线使屏幕产生彩色条纹。
2 实验原理
VGA(Video Graphics Array)即视频图形阵列,是IBM在1987年推出的使用模拟信号的一种视频传输标准,在当时具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。VGA接口实物图如下图所示:
左边带针的叫VGA公头,右边带槽的叫VGA母头。
VGA接口是一种D型接口,上面共有15针孔,分成三排,每排五个。 其中比较重要的是3根RGB彩色分量信号和2根扫描同步信号HSYNC和VSYNC针。其引脚编号图如下图所示:
VGA 显示器扫描方式从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频率,即屏幕的刷新频率,常见的有 60Hz,75Hz 等等,但标准的 VGA 显示的场频 60Hz。其扫描示意图如下图所示
在对VGA扫描方式有一个直观的感受以后接下来在看一看VGA接口的详细时序与各个参数的定义。VGA的详细时序如下图所示:
总的来说,VGA的时序主要包括行时序与场时序两个部分。
其中行时序主要包括:行同步(Hor Sync) 、行消隐(Hor Back Porch) 、行视频有效(Hor Active Video)和行前肩(Hor Front Porch)这四个参数,行时序的时序图如下图所示
而场时序主要包括:场同步(Ver Sync) 、场消隐(Ver Back Porch) 、场视频有效(Ver Active Video)和场前肩(Ver Front Porch)这四个参数,场时序的时序图如下图所示
3 程序设计
VGA显示的程序代码注释十分详细,主要是根据VGA时序图通过行场信号的控制,进
而产生相应的RGB数据。
4 实验现象
将VGA数据线分别连接开发板VGA接口和显示屏的VGA接口,将目录“... at7_prj_16at7_prjat7_prj.runsimpl_1”文件夹下的 at7_prj.bit 文件下载到开发板上,观察到现象如下图,开发板成功驱动显示屏显示彩色条纹。
部分代码展示:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/04/13 17:54:08 // Design Name: // Module Name: at7_prj // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module at7_prj( input clk , // 系统100MHz时钟 input rst_n , // 系统复位 output reg [4:0] red_out , // VGA红色分量 output reg [5:0] green_out , // VGA绿色分量 output reg [4:0] blue_out , // VGA蓝色分量 output hs_out , // VGA行同步信号 output vs_out // VGA场同步信号 ); // 分辨率为640*480时行时序各个参数定义 parameter C_H_SYNC_PULSE = 96 , C_H_BACK_PORCH = 48 , C_H_ACTIVE_TIME = 640 , C_H_FRONT_PORCH = 16 , C_H_LINE_PERIOD = 800 ; // 分辨率为640*480时场时序各个参数定义 parameter C_V_SYNC_PULSE = 2 , C_V_BACK_PORCH = 33 , C_V_ACTIVE_TIME = 480 , C_V_FRONT_PORCH = 10 , C_V_FRAME_PERIOD = 525 ; parameter C_COLOR_BAR_WIDTH = C_H_ACTIVE_TIME / 8 ; reg [11:0] R_h_cnt ; // 行时序计数器 reg [11:0] R_v_cnt ; // 列时序计数器 wire clk_25M ; wire W_active_flag ; // 激活标志,当这个信号为1时RGB的数据可以显示在屏幕上
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1341
666