FPGA入门系列14--VGA

news2024/9/27 7:20:37

文章简介

本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码书写以及代码的讲解,可作为读者参考。

第十五章:VGA

 VGA(Video Graphics Array)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。

    它具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LcD液晶显示设备的标准接口,具有广泛的应用范围。    

    很多人觉得只有HDMI接口才能进行高清信号的传输,但这是一个大家很容易进入的误区,因为通过VGA的连接同样可以显示1080P的图像,甚至分辨率可以达到更高,所以用它连接显示设备观看高清视频是没有问题的,而且虽然它是种模拟接口,但是由于VGA将视频信号分解为R、G、B三原色和HV行场信号进行传输,所以在传输中的损耗还是相当小的。

首先我们看一下 VGA 接口的电路原理图:

图1 VGA接口原理图

    通过图1可以看出VGA 并没有特殊的外部芯片,也就是说,唯一要关注的就是它的显示原理和时序了。那么接下来我们具体来看一下VGA 的扫描原理是什么。

    VGA扫描方式:

    显示器扫描方式分为逐行扫描和隔行扫描:①逐行扫描是扫描从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行, 电子束回到屏幕的左边下一行的起始位置,在这期间, CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。

② 隔行扫描是指电子束扫描时每隔一行扫一线,扫完一屏后再返回来扫描剩下的线。

图2 VGA图像显示扫描示意图

常见的彩色显示器一般由 CRT(阴极射线管)构成,色彩是由 R、 G、 B(红、黄、蓝)三基色组成。显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生 RGB 三基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,进行扫描, 每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这其间 CRT 对电子束进行消隐。每行结束时,用行同步信号进行同步;扫描完所有行,用场同步信号进行同步,并使扫描回到屏幕左上方,同时进行场消隐,预备下一场的扫描。

    对于普通的 VGA 显示器,共有 5 个信号:R、 G、 B 三基色;HS(行同步信号);VS(场同步信号)。对于时序驱动, VGA 显示器要严格遵循“VGA”工业标准,即 640x480@60Hz 模式,否则可能会损害 VGA 显示器。

    了解了扫描原理后,紧接着看一下 VGA 的行、列同步时序:

图3 列同步时序

图4 行同步时序

    VGA 中定义行时序和列时序都需要同步脉冲(a 段),显示后沿(b 段)、显示时序段(c 段)和显示前沿(d 段)四部分。VGA 工业标准显示模式要求:行同步、列同步都为负极性,即同步脉冲要求是负脉冲。
    由 VGA 行时序可知:每一行都有一个负极性行同步脉冲(a 段),是数据行的结束标志,同时也是下一行的开始标志。在同步脉冲之后为显示后沿(b 段),在显示时序段(c 段)显示器为亮的过程, RGB 数据驱动一行上的每一个像素点,从而显示一行。在一行的最后为显示前沿(d 段)。在显示时间段之外没有图像
投射到屏幕,而是插入消隐信号。同步脉冲、显示后沿和显示前沿都是在行消隐间隔内,当消隐有效时,RGB 信号无效,屏幕不显示数据。

    各分辨率下,VGA的显示标准参数如图5所示:

图5 VGA标准参数

    本实验以显示标准为 800*600*60Hz 为例。(800 为列数, 600 为行数,60Hz 为刷新一屏的频率)。
   行时序:屏幕对应的行数为 628(a+b+c+d=e 段),其中 600(c 段)为显示行;每行均有行同步信号(a 段),为 4 个行周期的低电平;
    列时序:每个显示行包括 1056 列(a+b+c+d=e 段),其中 800(c 段)为有效显示区,每一行有一个行同步信号(a 段),为 128 个行周期的低电平。
扫描时钟频率:40MHZ。

    原理清楚以后,接下来设计系统模块图如下:

 

图6 系统模块框图

模块说明:
    (1)时钟分频模块
    开发板上使用的晶振为 50MHZ,由于我们的显示标准为 800*600*60HZ,所以需要分频输出 40MHZ 的系统时钟。时钟分频模块,我们可以通过调用锁相环来实现。
    (2)VGA 行列同步控制模块
    VGA 显示标准需要设定行列同步信号,标定出有效显示区域, 这也是整个 VGA驱动模块的核心部分。

    (3)VGA 色彩显示控制模块    

    在图像有效显示区域内,输出控制颜色的 r、 g、 b 信号。接下来学习每个功能模块的具体代码实现,分频模块采用锁相环实现即可。
    VGA 行列同步控制模块具体代码如下:

    VGA 色彩显示控制模块具体代码如下:

 

编写完成各子模块以后,将所有模块连接起来,需要建立顶层文件如下:

    综合编译以后,我们可以查看 RTL 视图,查看电路综合结果和预想是否一致,调用 RTL 视图如下:

图7 RTL视图

通过RTL图可以看出电路模块综合结果和预先设计的系统模块框图相同。接着编写测试代码如下,用来验证我们设计的正确性:

通过Modelsim仿真,查看仿真波形:

    可以看出,当 en 有效时, vga_r 输出 3’ b111,说明设计正确。
    编写管脚约束文件,生成bit文件,将bit文件下载到开发板,实际运行效果图如下:

图8 显示结果 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06 - 3 事件驱动架构模式——EDA

何为EDA 事件驱动架构是一种异步分发事件的架构模式用于高扩展且低耦合的系统以事件为核心,一系列解耦的、单一功能的事件处理器 Notification 源系统发送消息通知其他系统状态改变接收方响应非必须发送 Event 逻辑与处理 Event 逻辑无依赖,独立变化解…

华为路由WS5200 四核版使用体验

文章目录 前言一、主界面和上网设置二、网络WIFI设置三、安全和系统总结 前言 其实我是看不上这种除了能上网,没任何用的东东的。除了上古时代用过类似的简单设备,已经十数年没再看一眼这种东西了,当然更不会去买这种东西,别误会…

vscode配置latex

reference:https://zhuanlan.zhihu.com/p/166523064 1 texlive卸载 找到texlive\2019\tlpkg\installer下的uninst.bat文件并点击运行。 删除环境变量 2 texlive安装 打开https://tug.org/texlive/acquire-iso.html点击下载iso文件 3 vscode 安装 4 latex插件…

Linux系统编程 多线程基础

文章目录 前言一、线程概念二、线程的创建三、线程的退出四、pthread_join函数总结 前言 本篇文章作为多线程的入门讲解将带大家先创建几个线程来感受一下什么是多线程,了解一下多线程到底有什么作用。 一、线程概念 线程(Thread)是程序执…

C++类与对象(二)——构造函数与析构函数

文章目录 一.类的默认6个成员函数二.构造函数1.引例2.构造函数的概念及特性 三.析构函数😋析构函数的特性 前言: 上篇文章初步认识了类以及类的相关知识,本篇将继续深入学习类与对象——类的默认6个成员函数: 一.类的默认6个成员函…

制造企业如何跨越大规模定制鸿沟?中国最大减速机企业的答案来了

导读:传统制造企业如何深度用云? 在中国制造向中国智造的转型中,长三角地区一直扮演着急先锋的角色。总部位于常州的江苏国茂减速机股份有限公司(简称国茂股份),就是中国制造上云转型的典型代表。 国茂股份成立于1993年&#xff0…

Microelectronic学习章节总结(2)-- data path和control unit设计

文章目录 part1. Data path设计1.1 logic unit1.2 shifter1.3 adder1.4 comparator1.5 multiplier1.6 divider1.7 register file part2. Control unit设计part3. CPU SoC上的其它部件 (TODO:理解总结)3.1 总线AMBA(parallel) 3.2 Memorymemor…

[C++基础]-类和对象(下)

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、深入学…

推荐算法实战项目:AFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由浙江大学联合新加坡国立大学提出的AFM模型。通过名字也可以看出,此模型又是基于FM模型的改进,其中A代表”Attention“,即AFM模型实际上是在FM模型中引入了注意力机制改进得来的。 之所以要在FM模型中引入注意力机制&#xf…

PC3-管理员操作

token无效可能,就是token过期了需要配置::: history 安装可以跳路由在ts文件中:因为在ts文件中还需要store,清空token // 安装可以跳路由在ts文件中npm i history 防止接口出现 token 无效,登…

【C++】AVL平衡二叉树源码剖析

目录 概述 算法 左单旋 右单旋 左右双旋 右左双旋 源码 AVLTree.h test.cpp 概述 AVL树也叫平衡二叉搜索树,是二叉搜索树的进化版,设计是原理是弥补二叉搜索树的缺陷:当插入的数据接近于有序数列时,二叉搜索树的性能严重…

20天能拿下PMP吗?

新版大纲,专注于人员、过程、业务环境三个领域,内容贯穿价值交付范围(包括预测、敏捷和混合的方法)。除了考试时间由240分钟变更为230分钟、200道单选题变为180道(包含单选和多选)之外,新考纲还…

【Ubuntu18配置Anaconda深度学习环境】

参考:Ubuntu18配置与ROS 兼容的深度学习环境(Anaconda3PyTorch1.10python3.8cuda10.2) 1. 前言 之前在Window下安装了Anaconda,熟悉了一下安装过程,Ubuntu18.04下最难的应该就是和ROS Melodic的兼容问题。ROS1是基于P…

Linux常用命令——inotifywait命令

在线Linux命令查询工具 inotifywait 异步文件系统监控机制 补充说明 Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可…

数据结构之第十一章、排序算法

一、排序的概念及引用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 1.1.1排序的稳定性 稳定性:假定在待排序的记录序列中,存在多个具…

数据结构之第九章、优先级队列(堆)

目录 一、优先级队列 1.1概念 二、优先级队列的模拟实现 2.1堆的概念 2.2堆的存储方式 2.3堆的创建 2.3.1堆向下调整 2.3.2堆的创建 2.3.3建堆的时间复杂度 2.4堆的插入与删除 2.4.1堆的插入 2.4.2堆的删除 2.5用堆模拟实现优先级队列 三、常用接口介绍 3.1Priori…

计算机组成原理与体系结构

目录 第一章、计算机组成原理与体系结构1、数据的表示1.1.进制转换1.2.原码、反码、补码、移码1.3.数据的表述 2、计算机结构3、Flynn分类法4、CISC与RISC5、流水线技术5.1、流水线的基本概念5.2、流水线的计算5.3、流水线吞吐率计算5.4、流水线加速比计算5.5、流水线的效率 6、…

Python小姿势 - Python的多线程编程

Python的多线程编程 Python的多线程编程提供了一个非常简单的方法来让一个Python程序同时运行多个任务。这个方法通过创建新的线程来实现,线程可以被视为一个单独的执行流程。 为了创建一个新线程,我们需要使用Python的_thread模块中的start_new_thread(…

【IDEA】简单入门:请求数据库表数据

目录 修改编辑与控制台字体大小 二、sprintboot项目入门 【1】直接开始配置Controller 【2】直接请求数据库中的数据,返回json格式 (0)整合PostgreSQL框架 (2)实体entity类 (3)控制类Mai…

快速了解车联网V2X通信

自动驾驶拥有极其巨大的潜力,有可能改变我们的出行方式。它不仅有望永远改变车辆的设计和制造,还会永远改变汽车的所有权乃至整个交通运输业务。要实现全自动驾驶的目标,开发人员需要开发极为复杂的软件,软件中融入的人工智能(AI)…