一、 项目分析

用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(一)满屏红色相关推荐

  1. 400+的考研复试线怎么玩???满屏都是400+?今年国家线会涨吗?

    关注.星标公众号,直达精彩内容 有不少同学在微博晒出分数,不少同学分数400+,今天大部分地区出分了,惊现477分的大神:政治91分,英语二95分,数学三150分,专业课141分.如果分数是真实的,这 ...

  2. 【FPGA实验】VGA显示

    [FPGA实验]VGA显示 一. VGA介绍 ​ VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传 输的标准.早期的CRT显示器由于设计制造上的原因 ...

  3. 雷军:年轻人入职半年内不要提意见,不靠谱;微信表情新彩蛋遭疯狂吐槽:满屏“炸屎”;谷歌正式推出 Fuchsia OS|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  4. HTML5七夕情人节表白网页(爱心雨-满屏爱心飘落)HTML+CSS+JavaScript

    HTML5七夕情人节表白网页❤(爱心雨-满屏爱心飘落)❤ HTML+CSS+JavaScript 这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此 ...

  5. elment中走马灯与满屏图片实现

    elment中走马灯与满屏图片实现 1.原基础操作 1.原基础操作 限制:被走马灯和外部宽度限制,导致图片无法被放大,被限制在走马灯所在的宽度内 思路: 1.监听图片的点击和关闭事件 2.图片放大时, ...

  6. 微信首页制作代码Android,微信满屏代码

    微信满屏代码软件可以在微信或者qq的聊天栏中产生各种代码乱飞或者流行坠落的图案,小西整理了各种好玩又好看的微信满屏代码,用起来也会非常的有意思的,另外还有独特的技巧提供给大家. 微信满屏代码说明 主要 ...

  7. 七夕情人节~html+css+javascript实现满屏爱心特效(程序员表白)

    ❉ 七夕情人节 ❤html+css+j❤实现满屏爱心特效(程序员表白) ❤程序员表白, 很多人和小编一样受到暴击,需要告白的同学加紧了,不要错过这个好时机. ❤许多程序员小伙伴总是苦于找不到合适的告白 ...

  8. FPGA基础测试题 verilog

    设计4位全加器. 能实现四位二进制数全加的数字电路模块,称之为四位全加器. 所谓全加器就是就是带进位(低位向上进位 和 向高位进位)的加法器.其一位全加器的真值表如下表所示: 对于多位的全加器可以使用 ...

  9. 怎么把横版视频剪成竖版?两种方法快速搞定!画面满屏,没有黑边

    现在很多手机社交媒体上,都比较流行竖版视频.那么横版视频如何变成竖版?今天教大家两种方法快速搞定!横版改成竖屏,并且做到画面满屏,无黑边.顺便还会分享现在抖音.朋友圈.影视圈最流行的竖版视频排版方式的 ...

最新文章

  1. 谷歌AI专家爆料:90%的人都不知道,写不出好代码,是输在了这点上!
  2. 申请重新邮寄CCNA证书成功!!!!!(转)
  3. 八月十二日,周二总结
  4. [NOIP1999] 普及组
  5. shell 编程(难题分析)
  6. 12亿行代码,阿里巴巴这一年的技术报告和梦想报告
  7. Eclipse关闭XML文件验证的方法
  8. python使用-python 类如何使用
  9. so文件(1)简单的导出使用
  10. Win 7 各版本的含义
  11. ae去闪插件deflicker使用_Ae/Pr视频去闪烁插件REVisionFX DEFlicker v1.7.1 Win大众脸已注册...
  12. 一款网站炫酷底部美化源码
  13. mysql的数据库实例名是啥_数据库名、数据库实例名与数据库域名
  14. 告别枯燥,ppt背景音乐怎么设置?
  15. ps不更改原图比例,调整图片至任意尺寸
  16. QT(5.12)+Qgis(3.10) 距离、面积测量
  17. Python+Eclipse配置`PyDev`完整教程
  18. mes系统故障_MES系统上线后可能会遇到的问题
  19. 2020年汽车芯片行业深度报告-1
  20. 【Swing入门教程】一步一步做Netbeans(1):类Netbeans的主界面

热门文章

  1. Vue相关配置版本的查看
  2. 知识蒸馏论文翻译(7)—— Knowledge Distillation from Internal Representations(内部表征)
  3. textView 文字居上
  4. 零基础CSS入门教程(19)–盒子模型简述
  5. 基于物理的渲染—迪士尼的渲染模型
  6. TypeScript中的范型
  7. 小白知识:什么是云计算?
  8. ADSP21489之CCES开发笔记(二)
  9. 二十四桥仍在,波心荡,冷月无声
  10. 【Ei检索】2022年计算语言学和自然语言处理国际会议(CLNLP 2022)