如何使用 FPGA 上的 HDMI 端口(基本)

电器工程 FPGA 适配器 VGA hdmi
2022-01-26 02:32:07

两个问题。

我有一个只有 HDMI 输入和输出的 Xilinx Spartan 6 FPGA。是否有某种指南或预先编写的代码可用于开始将图像发送到屏幕?我不知道如何开始,也找不到资源。

其次,我这样做的原因是因为我想使用和修改 Atari 2600 代码,这是一个在 Spartan 3E 上使用 VGA 实现的人。甚至可以轻松地调整我项目的视频方面吗?

任何帮助、资源或建议将不胜感激!

4个回答

Atlys 板使用 TDMS 输入,因此您需要一个 HDMI 解码器来接收这些输入并产生 VSYNC、HSYNC、DE 和 DATA。Xilinx 在一些应用笔记中详细介绍了 DVI 编码和解码过程。这些都带有示例代码,需要 xilinx 登录:

示例代码在 verilog 中,但如果您愿意,将顶层转换为 VHDL 是一个相对简单的练习。

这是从第一个应用笔记中截取的图,显示了接收器的基本前提:

来自 Xilinx 应用笔记

由于 Spartan 6 有内置的 SERDES 硬件,这些可以用作反序列化过程的一部分。有一个同步过程可以恢复时钟并确保通道全部同步。最后,应用 8b/10b 解码来生成 RGB 通道数据。

恢复视频信号后,您可以将这些信号转发到您想要进行的任何处理,或转发到将它们再次从 HDMI 端口发送出去的编码器。

如果您有 TFTMOD 显示器,那么将数据转发到显示器就像将 DE 和 DATA 信号连接到适当的 FPGA 引脚一样简单。 TFT 板参考手册对有关显示器的时序信息很有用,尽管我发现解串器输出时序很好。

您可以使用此项目中的 UCF 文件作为 HDMI的约束,如果您使用的是该板,则 此项目适用于 MODTFT 约束。

唯一需要注意的是 Xilinx 示例不处理 EDID 信息。如果您只是使用电路板来转发数据,那么您可以直接通过 EDID 线路并收工。其他场景可能需要处理 FPGA 上的 EDID 数据。基本上它只是I2C。opencores I2C 接口非常可靠,或者您可以编写自己的代码据我所知,关于 EDID 1.3 数据格式的维基百科表格是准确的。

只是为了补充先前的答案所解释的内容:

DVI/HDMI 发射器可能是一个很好的起点,因为您可以直接获取一些视频。

TMDS 链路上的 HDMI/DVI 视频传输逻辑上分为几个阶段,如图 1 所示:在 Spartan-6 FPGA 中实现 TMDS 视频接口的TMDS 发送器设计

在此处输入图像描述

  1. TMDS 编码器:将来自视频源的像素数据、HDMI 辅助/音频数据以及 HSYNC 和 VSYNC 转换为三个 10 位符号流

  2. 串行器(10:5 Gear Box 和 OSERDES2 5:1 Convert)分两个阶段对所有三个流执行 10 位并串行转换,然后将它们发送到差分输出对(TMDS 缓冲器)的三个通道。

两个阶段都需要一个时钟电路来正确生成 (PLL) 和分配 (BUFPLL, BUFG) 时钟信号(具有像素参考时钟的频率及其倍数)。

当然,发射器的核心是编码器块。您可以从 DVI 编码器开始,因为它与 HDMI 相比更简单。HDMI 和 DVI 有很多共同点,包括物理 TMDS 链路、主动视频编码算法和控制令牌定义。

应用笔记还提供了 2 种设计。一个简单但很好的开始是“SMPTE HD Color bar Generation with Programmable Video Timing”。它可以通过滑动开关选择多种屏幕模式发送彩条生成器视频。这种设计很有用,因为我们可以用另一个视频源更改彩条生成器,并且仍然可以获得一些保留原始发射器块的视频。

我希望这有帮助!

以下是您可以从链接到的电路板页面下载的参考设计文本:

DSD-0000326 2011 年 12 月 13 日 此 zip 文件包含一个 EDK 演示项目,该项目演示了在 Genesys 板上使用 HDMI。它接受 HDMI 输入,将输入帧缓冲到内存中,然后将缓冲区输出到另一个 HDMI 端口。这是使用 PLB 总线实现的。 下载

您还可以查看 Xilinx spartan 6 工业视频处理套件随附的参考设计。 http://www.em.avnet.com/en-us/design/drc/Pages/Xilinx-Spartan-6-FPGA-Industrial-Video-Processing-Kit.aspx (点击支持文件链接,需要avnet登录)。

可能还有更多针对不同 fpgas 的参考设计。

此外,除非您正在实施音频或加密 hdmi 基本上与 dvi 相同。

以下使用 miniSpartan6 的教程非常详细,值得一看:http: //zerocharactersleft.blogspot.com/2015/04/diy-fpga-based-hdmi-ambient-lighting.html