xilinxFPGA-VGA时序+代码实现详解

  • VGA时序详解
    • VGA接口定义
    • VGA时序说明
      • 行同步信号HYSNC
      • 场同步信号VYSNC
      • VGA时序查找
        • HYSNC
        • VYSNC
      • BLANK
      • RGB
    • VGA时钟频率
  • VGA代码详解
  • 小结

VGA时序详解

VGA接口定义



可以看到,从VGA的接口可以看出对于FPGAVGA之间有RGB三种连线和HSYNC、VSYNC两种连线。
右图中可以看出,我这儿的RGB三种连线练出了四个引脚,因为VGA是传输模拟信号,所以这儿可以看到RGB这三个通过连出四个不同电阻这种电路实现的四个数字信号转化成一个模拟信号,当然在自己设计时也可以使用特殊的芯片来实现,比如ADV7123来实现8位数字信号来转化成模拟信号。
还有就是HSYNCVSYNC两条信号线,这两条是行同步信号和场同步信号,具体作用我会在后面说明。

VGA时序说明

VGA信号的显示屏幕中,VGA所显示的方式是通过逐行扫描的方法。

如图是一个显示屏,可以看到,VGA的显示是从第一行最左边开始扫描,当第一行扫描完了之后,又回到第二行的最左边继续扫描,知道扫描完整个屏幕,又回到最开始的第一行最左边。
在这个过程中有两个信号来控制,分别是行同步信号和场同步信号。

行同步信号HYSNC


首先是行同步信号的时序,由图中可以看到,在数据准备好之前,行同步信号HSYNC会处于低电平阶段,持续Sync Pulse的时间后拉高,此时开始准备数据发送,当经过Back PorchLeft Border的时间间隔后数据准备好,然后开始数据发送,随着数据发送完后,再进行一段时间后,行信号结束,下一行信号开始。
此处讲解一下为什么会有前面数据准备的时间和后面数据结束的多余时间,因为在VGA中,并不是整块VGA显示屏都会显示,在显示屏周围有一圈黑边,此时的黑边就是数据还未准备好或者数据已经发送结束但是行同步信号还未结束的时候。下面的场同步信号也是相同的,行同步信号是左右的黑边,场同步信号是上下的黑边。

场同步信号VYSNC


这个就是场同步信号的时序,可以看出,和行同步信号的信号变化是一样的,只是中间的间隔时间是不一样的,所以这儿就不做过多的讲述了。

VGA时序查找

我们怎么去找这些的时序间隔呢?我们可以通过百度的方法,来找到这样的图片。

从图中可以看到,一个1440x900, 60Hz分辨率的VGA显示屏的各种时序。

HYSNC

由图可以分析,当计数器从0开始计数,每一个时钟周期自增1,此时HYSNC信号为低电平,表示数据开始信号,经过Hor Sync Time(此处名字定义可能和上述不一样,不过性质是一样的,只是命名有点差别而已。)时间后将HYSNC拉高。
可以看到,接下来下一行数据发送之前HYSNC都是属于高电平,所以可以不用管后面的分段,直接将HYSNC信号拉高到数据发送完为止,由图可以看到总时间到Hor Total Time行信号结束。

VYSNC

HYSNC不同的是,场同步信号是由行同步信号结束后才自增1,开始也是低电平,经过Ver Sync Time时间后将HYSNC拉高,然后持续到场同步信号结束,也就是在Ver Total Time时间后场同步信号结束。

BLANK

可以看到,上述我们并没有提起这个信号,但是这儿我还是将他列了出来,这是为什么呢?
上面我们讲了,在VGA中有一圈黑边是不用来显示的,但是光靠上述两个信号我们能分辨什么时候可以显示吗?显然不能!
所以,我们需要一个信号来低电平代表不在显示区域,高电平代表在显示区域,这个信号就是BLANK。
什么时候将BLANK拉高呢?因为黑边是左右上下都有,所以要满足在行信号处于显示并且场同步信号处于显示才能拉高,所以就需要行计数器在Hor Sync Time + H Back Porch + H Left BorderHor Sync Time + H Back Porch + H Left Border + Hor Addr Time之间并且需要场计数器在Ver Sync Time + V Back Porch + V Left BorderVer Sync Time + V Back Porch + V Left Border + Ver Addr Time之间。

RGB

这个就没有需要说明的了,因为数据是由外部传输进来,VGA本身是不需要处理数据的。

VGA时钟频率

对于不同的VGA显示器,都会有不同的时钟频率,此时我们可以通过FPGA中的锁相环(例如PLL)等来产生不同的时钟频率,怎么看VGA所需要的时钟频率呢?
很简单,**Hor Total Time * Ver Total Time * 60(Hz)此时得出来当就是所需要的时钟频率,可以得出需要106.70016(MHz)**的频率,虽然我们不一定能得到准确的时钟,但是使用相差不多的就行。

VGA代码详解

module VGA_drive(input VGA_Clk,  //  定义时钟输入频率为1904x934=106700160(Hz)=106.70016(MHz)input VGA_Reset_n,  //定义复位,低电平有效,此处有一个技巧,在使用锁相环生成时钟的,由于锁相环是反馈电路,所以最开始并不能生成稳定的时钟,在锁相环有一个时钟生成稳定的信号,我们将这个信号和复位信号共同作为VGA驱动的复位信号,可以是VGA驱动更稳定。input [11:0]VGA_Data,   //数据输入信号,12位的数据信号按照R,G,B三种信号排序。output reg VGA_HS,  //行同步信号。output reg VGA_VS,  //场同步信号。output reg [11:0]VGA_RGB,   //数据输出信号。output reg VGA_BLK //数据有效信号。
);//对于时间常数的定义,上面已经详细讲解,此处不做详解。localparam Hsync_End = 1904;localparam HS_End = 152;localparam Hdat_Begin = 152 + 232 + 0;localparam Hdat_End = 152 + 0 + 232 + 1440;localparam Vsync_End = 934;localparam VS_End = 6;localparam Vdat_Begin =  6 + 25 + 0;localparam Vdat_End = 6 + 25 + 0 + 900;reg [11:0]hcnt;  //行同步信号计数器。reg [10:0]vcnt;  //场同步信号计数器。always @(posedge VGA_Clk or negedge VGA_Reset_n)    begin   //行同步信号计数器模块。if (!VGA_Reset_n)  //复位清零。hcnt <= 12'd0;else if (Hsync_End - 1 <= hcnt)   //计满清零。hcnt <= 12'd0;else  //未计满每个时钟周期自增1。hcnt <= hcnt + 1'b1;endalways @(posedge VGA_Clk or negedge VGA_Reset_n)   begin   //行同步信号计数器模块。if (!VGA_Reset_n)  //复位清零。vcnt <= 11'd0;else if (Hsync_End - 1 <= hcnt)   begin   //行同步信号结束时可以对场同步信号发生改变。if (Vsync_End - 1 <= vcnt)   //计满清零。vcnt <= 11'd0;else  //未计满每个行同步信号结束自增1。vcnt <= vcnt + 1'b1;endelse //其余状态不变。vcnt <= vcnt;endalways @(posedge VGA_Clk) begin   //行同步信号模块。VGA_HS <= (hcnt <= HS_End - 1) ? 1'b0 : 1'b1;   //当行同步信号传输开始信号未结束时为低电平,结束后准备发送数据为高电平。endalways @(posedge VGA_Clk)   begin   //场同步信号模块。VGA_VS <= (vcnt <= VS_End - 1) ? 1'b0 : 1'b1;   //当场同步信号传输开始信号未结束时为低电平,结束后准备发送数据为高电平。endalways @(posedge VGA_Clk)   begin   //RGB数据模块。VGA_RGB <= VGA_Data;  //直接将传输进来的数据传输出去。endalways @(posedge VGA_Clk)  begin   //显示有效信号。VGA_BLK <= (hcnt >= Hdat_Begin - 1 && hcnt <= Hdat_End && vcnt >= Vdat_Begin - 1 && vcnt <= Vdat_End) ? 1'b1 : 1'b0; //当处于显示区域是将信号拉高,否则拉低。end
endmodule

小结

对于VGA的显示驱动,还是很简单的,没有太复杂的时序,如果觉得博主写的不错,点赞关注鼓励一下吧~
蟹蟹啦~

xilinxFPGA-VGA时序+代码实现详解相关推荐

  1. FPGA——用VGA时序显示图像原理详解(2)

    目录 VGA时序 VGA显示 大家结合上一篇: FPGA--用VGA时序显示图像原理详解(1)_居安士的博客-CSDN博客 VGA时序 首先我们下载数据手册,我们可以根据自己的需求,选择图像大小,以及 ...

  2. x264 代码重点详解 详细分析

    eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...

  3. Eclipse编译运行Native代码步骤详解

    Eclipse编译运行Native代码步骤详解 标签: android jni层   android jni步骤   android jni接口   转自: http://blog.csdn.net/ ...

  4. java网络编程阻塞_Java网络编程由浅入深三 一文了解非阻塞通信的图文代码示例详解...

    本文详细介绍组成非阻塞通信的几大类:Buffer.Channel.Selector.SelectionKey 非阻塞通信的流程ServerSocketChannel通过open方法获取ServerSo ...

  5. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共 ...

  6. 编程 ul 不能一行显示 跳到下行_史上最全的数控G代码编程详解

    一.G代码功能简述 G00------快速定位 G01------直线插补 G02------顺时针方向圆弧插补 G03------逆时针方向圆弧插补 G04------定时暂停 G05------通 ...

  7. (机器学习)随机森林填补缺失值的思路和代码逐行详解

    随机森林填补缺失值 1.使用0和均值来填补缺失值 2.用随机森林填补缺失值的思路 3.使用随机森林填补缺失值代码逐行详解 3.1导包,准备数据,以及创造缺失的数据集 3.2数据集中缺失值从少到多进行排 ...

  8. 强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解

    强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解 原创 lrhao 公众号:ChallengeHub 收录于话题 #强化学习教程 前言 在前面强化学习教程(三)中介绍了基于策略「PG」算 ...

  9. 如何在Python中获取图片分辨率?——Python实现获取图片分辨率的代码及详解。

    如何在Python中获取图片分辨率?--Python实现获取图片分辨率的代码及详解. 在进行图片处理或者图片分析的时候,获取图片的分辨率信息是必不可少的.Python提供了许多库可以方便地获取图片的分 ...

最新文章

  1. N-MOS的G-S电容随着DS电压的变化关系
  2. 沙发变身遥控器,涂鸦里藏PCB,MIT技术宅的智能家居竟然是这样
  3. ccombox获取选择的文本_PC端最好用的翻译软件,支持引擎切换、文本朗读
  4. 20十年后的计算机作文600字,20年后的学校作文600字
  5. hiho一下120周 后缀数组一·重复旋律
  6. k3s helm3功能介绍
  7. WeChat微信小程序image组件aspectFill:保留中部 等比例变化 Widthfix:宽度为指定的  高度依据原图的宽高比进行变化
  8. 营销 | 10个助燃商业增长的市场营销战略!
  9. MFC对话框中处理Enter或Esc按键事件方法
  10. Apache-不重启完成添加或更改域名
  11. MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
  12. 【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]
  13. win10计算机无法复制文件,Windows10系统下文件无法复制到u盘怎么解决?
  14. html怎么设置内存当缓存,前端浏览器缓存怎么使用
  15. 使用Rosetta批量生成fasta
  16. C++结构体中包含容器,push_back异常
  17. SANGFOR SCSA——linux系统基础
  18. 什么是跨职能流程图? Cross-Functional / Swimlane Flowchart
  19. 链栈的基本操作-C语言
  20. box-shadow上下左右四个边框设置阴影样式

热门文章

  1. excel 添加垂直竖向直线
  2. 华擎主板bios设置图解_【华擎Z170评测】BIOS设置及超频方法简介_华擎 Z170 超频方程式_主板评测-中关村在线...
  3. 搭建商城系统怎么选择合适的运营模式?
  4. 掌阅Android App插件补丁实践(ZeusPlugin)
  5. 一个命令行整理软著代码
  6. kafka的Broker(五)
  7. 计算机怎么搜索程序和文件格式,PDF软件如何快速搜索与查找文件?
  8. JSP设置Excel表格换行_Excel表格技巧—如何调整工作表打印页面设置
  9. 多任务学习(Multi-task Learning)方法总结
  10. 视频讲解Agora视频通话SDK| 掘金技术征文