1基础理论部分

VGA(video graphics array)即视频图形阵列,是IBM在1987年随PS/2一起推出的使用模拟信号的一种视频传输标准。VGA相比与现在的视频传输接口来说已经过时,不过作为最低标准,基本上制造商都会接入此接口,图11.1是常见的VGA接口。

图11.1 VGA接口

对于VGA15个引脚的相关说明,如下图所示。

图11.2 VGA引脚说明

大家做实验的时候,可能会有一个误区,那就是做实验时直接把实验板的VGA接口接到笔记本电脑上,还兴高采烈的等待着显示图像,殊不知笔记本电脑是不能作为普通显示器显示的。

现在的显示器接口已经经过VGA,DVI(数字信号的传输),到现在的HDMI接口标准,实现数字高清影音传输的技术,因此最新的显示器基本上都会支持这几种接口。

更多的时序标准,请参考http://tinyvga.com/vga-timing

由三原色RGB所组成的颜色种类,由RGB888(24位真彩色),RGB565,RGB444;(本实验所采用的是RGB565),对于带宽有限,图像要求不是特别高,这个RGB565已经可以满足要求了。对于RGB565模型,位的分配,由高到低,分别为R 15..11,G 10..5, B 4..0;

对于VGA的接口模拟电压,为0~0.714V,0代表无色,0.714代表满色,FPGA输出3.3V,所以还必须要经过DAC的转换。这些部分在做板子的时候,会继续补充、基本上现在成熟的方案,采用R-2R或者ADV7123。当然专用芯片成像质量很好。

对于显示器而言,VGA的分辨率越高,意味着显示的图像越清晰,包含信息也越多,画质更加好,图像更加保真。由于人眼的视觉暂留,要想实现显示器的不闪烁,至少需要实现每秒25帧画面的更新。通常显示器的扫描频率都在60帧及以上。

对于显示器而言,有的可以兼容多个分辨率模式,为了实现这种方式,许多显示器具有scaler功能,能够实现不同分辨率的兼容。

图11.2 场同步信号

图11.3 行和场信号工作方式

图11.4 常见的刷新时序表

1.2 VGA驱动电路部分

现在主要的用于VGA驱动电路的方案,一个是采用电阻R-2R的形式,一个是采用专用芯片,这两者各有优势。

对于VGA来说,有几路信号比较重要,RED,GREEN, BLUE信号,以及hsync 和vsync信号,其中hsync 和vsync信号可以直接和FPGA的IO口相连,但是rgb信号却不能,它需要0~0.714V模拟信号。

1.2.1 R-2R结构

图11.5 拓扑结构

上图是视频DAC拓扑结构模式,根据上述模式计算Rx的值。

那么大概得到Rx = 271.6387Ω;

解出,所以我们采用Ra = 500Ω,可以选中1K和2K的电阻去串并联实现R-2R模型。这里是采用2K和1K串并联的方式实现5—6—5 ,即16位格式。

图11.7 VGA接口部分电路

图11.8 R-2R电路

1.2.2 专用芯片结构

对于专用芯片去用于视频操作的,我们常用ADV7123。此款芯片最大采样率为330MHz,低功耗,3路10位DAC视频转换器。图11.9是原理图部分,图11.10是实物图。

图11.9  ADV7123原理图

图11.10 VGA实物图

2 Verilog代码实现部分

本次实验实现彩条测试功能,板卡载有一颗ADV7123芯片,FPGA驱动该芯片并产生VGA所需要的行和场信号,图11.11是RTL视图。

图11.11 RTL视图

在lcd_para.v文件中定义了彩条各参数和VGA所需要的行和场信号所需要的像素数,这里利用了define和 ifdef指令,注意其用法。

在lcd_display.v中,将lcd_para.v文件进行调用,且在23行到26行有几种测试实验,一种是水平彩条,一种是竖直彩条,灰度图以及纹理图。

上述就是具体每一种测试实验所对应的生成程序。

在lcd_driver.v中,生成驱动ADV7123的信号和产生VGA所需要的16位数据,以及在lcd_display.v中所需要的x和y坐标值。

行信号的生成部分。

场信号生成部分,75行到77行是AD7123所需要的信号,可以看到驱动是非常简单的。这里75行ADV7123的驱动时钟和主时钟相反,以此来达到在主时钟的上升沿对数据进行采样。

上述是对总的模块进行例化部分,注意25行到27行,由于ADV7123芯片需要RGB的格式为565,所以定义lcd_red,lcd_green,以及lcd_blue。

注意62行是对刚才定义的RGB信号的分配,由于lcd_rgb是16位数据,分别将高5位送给lcd_red,将中6位送给lcd_green,将低五位送给lcd_blue。

3 Modelsim仿真部分

上述是testbench中的时钟模拟信号和复位模拟信号的产生,其中11行是模拟25MHz时钟。

注意上述仿真时调用的模块名,因为我们想观察到各个信号的输出情况,所以只调用重要的两个模块lcd_driver和lcd_display即可,32行到43行是对调用模块的各个输出信号的声明,这里也可以看到,需要观察输出什么样的信号,只需定义为wire类型即可,前提是调用各个模块时,wire定义的变量必须是相对于输出的信号。

69行到78行是对lcd_display模块进行的例化。82行到85行是对输入信号的初始化,外部输入信号暂时没有,所有没有初始化任何信号。

另外为了节省仿真时间在lcd_driver中将各参数适当缩小,以达到缩减仿真时间的目的,如下面所述。

3.1 仿真波形

图11.11是时钟的仿真波形,时钟信号周期40ns,满足25MHz。图11.12是行和场信号的仿真,可以看到6个行信号,1个场信号。这和之前的VGA时序分析是一致的。图11.13是lcd_en信号和lcd_blank信号,这两个信号都和行和场信号有关。图11.14是RGB数据仿真出的波形

图11.11 时钟信号仿真

图11.12 行和场仿真信号

图11.13 使能和空白信号

图11.14 RGB输出的波形

转载于:https://www.cnblogs.com/raymon-tec/p/5129583.html

《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷相关推荐

  1. 《FPGA全程进阶---实战演练》第一章之如何学习FPGA

    对于很多初学者,大部分都是急于求成,熟不知越是急于求成,最终越是学无所成,到头来两手空空,要学好FPGA,必须弄懂FPGA本质的一些内容. 1.FPGA内部结构及基本原理 FPGA是可以编程的,必须通 ...

  2. 《FPGA全程进阶---实战演练》第一章之FPGA介绍

    1 什么是FPGA FPGA也即是Field Programmable Gate Array的缩写,翻译成中文就是现场可编程门阵列.FPGA是在PAL.GAL.CPLD等可编程器件的基础上发展起来的新 ...

  3. 《FPGA全程进阶---实战演练》第二十一章 电源常用类型:LDO和 DCDC

    高速电路中的电源设计 高速电路中的电源设计大概分为两种,一种是集总式架构,一种是分布式架构.集总式架构就是由一个电源输入,然后生成多种所需要的电压.如图1所示.这种架构会增加多个DC/DC模块,这样成 ...

  4. 《FPGA全程进阶---实战演练》第二十一章之 几种常用电平分析及特性

    TTL,CMOS以及LVTTL,LVCMOS TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本.TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大, ...

  5. 频谱仪的更改ip_【正点原子FPGA连载】第五十一章 基于FFT IP核的音频频谱仪-摘自【正点原子】开拓者 FPGA 开发指南 (amobbs.com 阿莫电子论坛)...

    本帖最后由 正点原子 于 2020-10-24 15:19 编辑 203429z6c3os33t8albi33.png (66.36 KB) 2019-7-28 15:14 上传 第五十一章 基于FF ...

  6. 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  7. 【正点原子FPGA连载】第三十一章基于lwip的echo server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    第三十一章基于lwip的echo server实验 随着物联网的兴起,万物互联需要一个强大而又灵活的协议体系,TCP/IP协议得天独厚,而在嵌入式网络设备中,由于硬件资源的限制,需要特殊的实现方式.L ...

  8. 【紫光同创国产FPGA教程】【第十一章】录音与播放例程

    原创声明: 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com). 适用于板卡型号: PGL22G/PG ...

  9. 网络安全进阶篇(十一章-7)APP渗透测试篇(下)

    每日一句:重启可以解决很多问题,如虚拟机问题,模拟器问题等等,本文章的一些操作不成功的话,重启试试 一.快速自建一个App 1.App难写吗?(1) ~问:我不懂Java我能写App吗? 答:我觉得大 ...

最新文章

  1. async spring 默认线程池_Spring boot注解@Async线程池实例详解
  2. 单片机数码管从00到99C语言_MSP430单片机轻松入门与实践 — 畅学单片机
  3. java linkedhashmap_java学习-hashMap和linkedHashMap
  4. pytorch实现文本分类_使用变形金刚进行文本分类(Pytorch实现)
  5. apmserv 5.2.6 升级php,APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4
  6. 10年 | 写了10年的代码,我最怕写Mybatis这些配置,现在有详解了
  7. 蚊子喜欢咬什么人,蚊子喜欢什么血型,蚊子喜欢叮咬什么血型的人
  8. pycharm pip安装_Python从入门到大师教程 | 一、搭建Python环境和安装Pycharm
  9. 2048小游戏(变态版哦)
  10. 正则新能源车牌和汽车牌混合验证
  11. tableview设置footer会悬停在屏幕下方
  12. java毕业设计青岛滨海药店管理系统的设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
  13. 计算机自主招生证书,高校自主招生必备常识:五大学科竞赛证书含金量
  14. 高品质摄影作图台式计算机推荐,能拍出高品质作品的强大系统 摄影师段岳衡专访...
  15. Hwclock用法介绍
  16. 如何选择适合你的兴趣爱好(五十九),芭蕾舞
  17. 蜗牛爬墙墙高10米C语言,蜗牛爬墙——打破小朋友的数学思维模式
  18. 分布式事务的BASE理论
  19. 学生用计算机的按键名称,电脑的各键名称及用途
  20. Google Hack语法的探索与应用

热门文章

  1. $.ajax 简单记录
  2. 马哥linux视频的学习笔记
  3. 给页面加上Loading效果最简单实用的办法
  4. 遍历Page的Controls集合
  5. C语言实现简单学籍管理系统
  6. ubuntu java环境变量_hadoop:伪分布模式环境变量的配置
  7. 安卓* 系统级 Java*/C++ 代码调试
  8. JavaScript 进阶问题列表
  9. python day11
  10. python高阶函数——sorted排序算法