FPGA基础之VGA(一)满屏红色
一、 项目分析
用VGA显示全屏的红色,VGA(Video Graphics Array,视频图形阵列)是一种电脑显示标准。开发板采用至芯科技zx-1学习板,VGA视频显示接口是256色,颜色位深为8,RGB332的高三位是红色,中间3位是绿色,最低2位是蓝色,当vga_rgb=111_000_000时,显示全红。
1.1 原理分析
1.1.1 硬件电路原理
VGA的硬件电路原理如图1- 1所示,总共有15针接口,主要接口信号包括:颜色信号VGA_RGB[7:0],水平同步信号VGA_HS(列同步信号)和垂直同步信号VGA_VS(场同步信号,行同步信号)。
图1- 1 256色VGA接口
1.1.2 VGA扫描原理
本VGA采用逐行扫描的方式,逐行扫描是扫描从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。
完成一行扫描的时间为水平扫描时间,倒数为行频率;完成一帧的扫描时间为垂直扫描时间,倒数为场频率。基本上用场频率来表示显示屏的刷新频率。
1.1.3 显示时序和时钟频率
VGA显示时,需要考虑有效显示区域和无效显示区域,以640x480x60的显示标准为例,有效显示区域为640x480,无效显示区域包括行时序/场时序都需要同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Active Video Time c)和显示前沿(Front porch d),根据相应的显示标准,所以总的显示区域包括800x525,时钟频率的计算方法如下:VGA_CLK=800x525x60=25.175MHz。
VGA的行时序(列同步)和场时序(行同步)如图1- 2所示。不同VGA显示标准下的时钟频率和列同步等参数如图1- 3所示,列时序即为水平同步信号时序,行时序即为垂直同步(场同步)信号时序。
图1- 2 VGA列同步和场同步时序
图1- 3 VGA显示标准
1.2 顶层设计
图1- 4 顶层设计
端口说明:
clk:系统时钟50M
rst_n:复位,低电平有效
vga_rgb:颜色信号,高3位为红色,中间3位为绿色,低2位为蓝色
vga_hs:列同步信号,行同步
vga_vs:场同步信号,列同步
1.3 架构设计
图1- 5 VGA的架构
二、代码编写
1、顶层代码如下:
这个模块要注意的是根据显示标准,调用PLL生成相应的时钟频率。
module vga (input wire clk,input wire rst_n,output wire [7:0] vga_rgb,output wire vga_hs,output wire vga_vs
);wire clk_25m;wire pll_locked;pll pll_inst (.areset ( ~rst_n ),.inclk0 ( clk ),.c0 ( clk_25m ),.locked ( pll_locked));vga_ctrl vga_ctrl_inst (.clk (clk_25m ),.rst_n (pll_locked ),.vga_rgb (vga_rgb ),.vga_hs (vga_hs ),.vga_vs (vga_vs ));endmodule
2、vga_ctrl模块代码如下:
`define VGA_640x480x60 // choose different video standard,revise PLL clk ,alter cnt WIDTH
//`define VGA_680X480X75
//`define VGA_800X600X60
//`define VGA_800X600X75
//`define VGA_1024X768X60
//`define VGA_1024X768X75
//`define VGA_1280X1024X60
//`define VGA_1280X800X60
//`define VGA_1440X900X60module vga_ctrl (input wire clk,input wire rst_n,output reg [7:0] vga_rgb,output reg vga_hs,output reg vga_vs
);//================ VGA_680X480X60 =========================================================`ifdef VGA_640x480x60 // PLL clk = 25M = 640x480x60localparam HS_A = 96; // synchronous pulse, horizontallocalparam HS_B = 48; // back porch pulselocalparam HS_C = 640; // display intervallocalparam HS_D = 16; // Front porchlocalparam HS_E = 800; // horizontal cycleslocalparam VS_A = 2; // synchronous pulse, verticallocalparam VS_B = 33;localparam VS_C = 480; localparam VS_D = 10; localparam VS_E = 525; localparam HS_WIDTH = 10;localparam VS_WIDTH = 10;`endif//================ VGA_800X600X60 =========================================================
//
//`ifdef VGA_800X600X60 // PLL clk = 40.0M
//
// localparam HS_A = 128;
// localparam HS_B = 88;
// localparam HS_C = 800;
// localparam HS_D = 40;
// localparam HS_E = 1056;
//
// localparam VS_A = 4;
// localparam VS_B = 23;
// localparam VS_C = 600;
// localparam VS_D = 1;
// localparam VS_E = 628;
//
// localparam HS_WIDTH = 11; // different resolution correspond to different couter width
// localparam VS_WIDTH = 10;
//
//`endif
//=====================================================================================================reg [HS_WIDTH - 1:0] cnt_hs; // counter for horizontal synchronous signalreg [VS_WIDTH - 1:0] cnt_vs; // counter for vertical synchrous signalwire en_hs; // dsiplay horizontal enablewire en_vs; // display vertical enablewire en; // effective display zonealways @ (posedge clk, negedge rst_n)if (!rst_n)cnt_hs <= 0;elseif (cnt_hs < HS_E - 1)cnt_hs <= cnt_hs + 1'b1;elsecnt_hs <= 0;always @ (posedge clk, negedge rst_n)if (!rst_n)cnt_vs <= 0;elseif (cnt_hs == HS_E - 1)if (cnt_vs < VS_E - 1)cnt_vs <= cnt_vs + 1'b1;elsecnt_vs <= 0;elsecnt_vs <= cnt_vs;always @ (posedge clk, negedge rst_n)if (!rst_n)vga_hs <= 1'b1;elseif (cnt_hs < HS_A - 1)vga_hs <= 1'b0;elsevga_hs <= 1'b1;always @ (posedge clk, negedge rst_n)if (!rst_n)vga_vs <= 1'b1;elseif (cnt_vs < VS_A - 1)vga_vs <= 1'b0;elsevga_vs <= 1'b1;assign en_hs = (cnt_hs > HS_A + HS_B - 1) && (cnt_hs < HS_E - HS_D);assign en_vs = (cnt_vs > VS_A + VS_B - 1) && (cnt_vs < VS_E - VS_D);assign en = en_hs && en_vs;always @ (posedge clk, negedge rst_n)if (!rst_n)vga_rgb <= 8'b000_000_00;elseif (en)vga_rgb <= 8'b111_000_00; // redelsevga_rgb <= 8'b000_000_00;endmodule
3、仿真测试模块代码如下:
因为显示器的一帧完整图像扫描完成大概需要16ms,所以只仿真前几行的垂直扫描波形。
`timescale 1ns/1psmodule vga_tb;reg clk;reg rst_n;wire [7:0] vga_rgb;wire vga_hs;wire vga_vs;vga vga_inst (.clk (clk ),.rst_n (rst_n ),.vga_rgb (vga_rgb ),.vga_hs (vga_hs ),.vga_vs (vga_vs ));initial clk = 1;always #10 clk = ~ clk;initial beginrst_n = 0;# 201rst_n = 1;repeat (11)@ (posedge vga_hs);# 200$stop;endendmodule
四、个人总结
VGA学习需要弄明白的是两个同步信号:水平同步和垂直同步。网上的表达方式各不相同,需要读者自己细细品味。注意PLL时钟速率和不同显示标准之间的关系。
FPGA基础之VGA(一)满屏红色相关推荐
- 400+的考研复试线怎么玩???满屏都是400+?今年国家线会涨吗?
关注.星标公众号,直达精彩内容 有不少同学在微博晒出分数,不少同学分数400+,今天大部分地区出分了,惊现477分的大神:政治91分,英语二95分,数学三150分,专业课141分.如果分数是真实的,这 ...
- 【FPGA实验】VGA显示
[FPGA实验]VGA显示 一. VGA介绍 VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传 输的标准.早期的CRT显示器由于设计制造上的原因 ...
- 雷军:年轻人入职半年内不要提意见,不靠谱;微信表情新彩蛋遭疯狂吐槽:满屏“炸屎”;谷歌正式推出 Fuchsia OS|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- HTML5七夕情人节表白网页(爱心雨-满屏爱心飘落)HTML+CSS+JavaScript
HTML5七夕情人节表白网页❤(爱心雨-满屏爱心飘落)❤ HTML+CSS+JavaScript 这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此 ...
- elment中走马灯与满屏图片实现
elment中走马灯与满屏图片实现 1.原基础操作 1.原基础操作 限制:被走马灯和外部宽度限制,导致图片无法被放大,被限制在走马灯所在的宽度内 思路: 1.监听图片的点击和关闭事件 2.图片放大时, ...
- 微信首页制作代码Android,微信满屏代码
微信满屏代码软件可以在微信或者qq的聊天栏中产生各种代码乱飞或者流行坠落的图案,小西整理了各种好玩又好看的微信满屏代码,用起来也会非常的有意思的,另外还有独特的技巧提供给大家. 微信满屏代码说明 主要 ...
- 七夕情人节~html+css+javascript实现满屏爱心特效(程序员表白)
❉ 七夕情人节 ❤html+css+j❤实现满屏爱心特效(程序员表白) ❤程序员表白, 很多人和小编一样受到暴击,需要告白的同学加紧了,不要错过这个好时机. ❤许多程序员小伙伴总是苦于找不到合适的告白 ...
- FPGA基础测试题 verilog
设计4位全加器. 能实现四位二进制数全加的数字电路模块,称之为四位全加器. 所谓全加器就是就是带进位(低位向上进位 和 向高位进位)的加法器.其一位全加器的真值表如下表所示: 对于多位的全加器可以使用 ...
- 怎么把横版视频剪成竖版?两种方法快速搞定!画面满屏,没有黑边
现在很多手机社交媒体上,都比较流行竖版视频.那么横版视频如何变成竖版?今天教大家两种方法快速搞定!横版改成竖屏,并且做到画面满屏,无黑边.顺便还会分享现在抖音.朋友圈.影视圈最流行的竖版视频排版方式的 ...
最新文章
- 谷歌AI专家爆料:90%的人都不知道,写不出好代码,是输在了这点上!
- 申请重新邮寄CCNA证书成功!!!!!(转)
- 八月十二日,周二总结
- [NOIP1999] 普及组
- shell 编程(难题分析)
- 12亿行代码,阿里巴巴这一年的技术报告和梦想报告
- Eclipse关闭XML文件验证的方法
- python使用-python 类如何使用
- so文件(1)简单的导出使用
- Win 7 各版本的含义
- ae去闪插件deflicker使用_Ae/Pr视频去闪烁插件REVisionFX DEFlicker v1.7.1 Win大众脸已注册...
- 一款网站炫酷底部美化源码
- mysql的数据库实例名是啥_数据库名、数据库实例名与数据库域名
- 告别枯燥,ppt背景音乐怎么设置?
- ps不更改原图比例,调整图片至任意尺寸
- QT(5.12)+Qgis(3.10) 距离、面积测量
- Python+Eclipse配置`PyDev`完整教程
- mes系统故障_MES系统上线后可能会遇到的问题
- 2020年汽车芯片行业深度报告-1
- 【Swing入门教程】一步一步做Netbeans(1):类Netbeans的主界面