如何用FPGA逻辑来驱动VGA显示器

描述

如果能够用FPGA能够驱动显示器,就可以做不少与视频相关的实验,很多FPGA开发板使用了比较简单的VGA接口,连接非常简单,如下图:

树莓派

只需要5跟线就可以连接VGA显示器

树莓派

连接VGA的原理图

树莓派

VGA连接器

然后我们就可以用FPGA的逻辑来做各种游戏了:

树莓派

经典的Pong游戏

关于如何用FPGA逻辑来驱动VGA显示器,可以参考页面:

然而,现在的显示器基本上都使用的是HDMI连接器,VGA接口的显示器只能在古老的实验室里才有。所以我们要做视频的一些项目,就要用FPGA来输出HDMI的信号,HDMI的连接器有不同大小,常用的体积比较大,信号线的定义如下图:

树莓派

HDMI连接器

树莓派

HDMI的信号线

标准的HMDI连接器有19个管脚,只有其中的8根是以差分信号的方式来传输高速视频信息的,所以只需要8根FPGA的管脚,配制成7对差分TMDS输出即可。

树莓派

那时钟的速率需要多快呢?如果我们要生成一个640*480 RGB 24bpp的视频信号,刷新频率为60Hz,每帧有307200个像素,每一个像素为24位(R|G、B各8位),需要0.44Gbps的又用数据才能传输。再考虑一些屏外区域的信息,实际的分辨率需要大一些,比如800*525.

树莓派

树莓派

一个像素需要3 * 8位来传输,实际上HDMI还需要添加2bits以便对数据进行加扰,也就是需要3*10位来传输,每个像素需要30bits。

加扰用的额外数据用于接收端对接收到的数据进行同步,下面是TMDS差分信号的时序:

树莓派

对于640*480分辨率的显示,我们需要至少250MHz的时钟信号,如果要获得更高的分辨率则需要更高的时钟频率,小脚丫FPGA模块中使用的Lattice的XO2-4000HC系列FPGA以及Intel的MAX10器件内部的时钟通过锁相环生成,可以达到400MHz。支持640*480分辨率是没有问题的,如果要获得更高的分辨率可以采用DDR输出的方式。

树莓派

显示驱动逻辑

树莓派

屏幕的分布

通过逻辑编程,可以在显示屏上实现如下的效果:

树莓派

用HDMI显示器实现的Pong游戏,比VGA实现的要效果好很多

树莓派

PacMan游戏

具体的代码实现可以参考页面

讲完了FPGA驱动HDMI,有没有可能用单片机/微控制器也能实现同样的效果呢?一般的MCU真的够呛,但树莓派基金会推出的RP2040却是可以做到的:

虽然RP2040的标称时钟为125MHz,但可以轻松超频到250MHz,能够满足640*480分辨率的时钟要求了

RP2040的PIO可以通过编程配置称为4对差分输出的串行信号

具体如何实现,看一下技术大神Luke Wren在RP2040上用GPIO通过Bitbang的方式得到的DVI接口

下面是他的威廉希尔官方网站 原理图(用KiCad绘制的,有源文件)

树莓派

有位小哥使用他的代码,在SparkFun的RP2040板上实现的效果:

树莓派

在显示屏上显示文字:

树莓派

显示月亮:

树莓派

当然也可以播放视频

有人专门制作了一个板子,RP2040超频到252MHz

树莓派

关于用RP2040驱动HDMI的更多资源可以在Github搜索HDMI RP2040.

原文标题:用FPGA/树莓派RP2040驱动HDMI的资源

文章出处:【微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分