为什么在HDMI视频项目中经常使用FPGA?


24

如果您在hackaday之类的网站上浏览hdmi项目,您会发现几乎每个项目都涉及一个FPGA。我认为我没有见过任何没有使用FPGA的带有HDMI输出的DIY项目。

但为什么?据我所知,FPGA很昂贵,大约在70美元至100美元之间。相比之下,Raspberry Pi售价35美元,可以完成更复杂的事情,并输出HDMI。为什么不使用ARM?还是更便宜的微控制器?

在旧游戏系统上升级视频的情况下,逻辑应该不便宜的微控制器可以处理的那么复杂,但是我一直认为HDMI是仅由FPGA解决的不可能的障碍。


您也可以找到便宜的G PUS(例如RPi上的)。问题在于,他们不会做违反HDMI许可或在某些(DMCA)国家完全是非法的事情。这是您链接的大多数项目要做的。您可以购买IP核 GPU并对其进行修改以执行此类操作……但是谁来为您制造呢?FPGA是穷人(或海盗)工厂。
Fizz

Answers:


66

基本上,没有微控制器,甚至是树莓派,都不够快。树莓派具有板载GPU,可生成HDMI输出。除此之外,Raspberry Pi的I / O功能受到了不可思议的限制-除了HDMI之外,最高带宽的接口是USB。许多HDMI转换项目都涉及采用另一种奇怪格式的视频流,并将其重新加工成可以通过HDMI发送到标准HDTV的内容。这需要一些自定义的接口逻辑来读入视频信号,信号处理逻辑将其重新格式化,HDMI TMDS编码逻辑,然后是高速串行器才能实际驱动HDMI端口。

使用流式,未压缩的高清视频需要处理大量数据,这在通用CPU上是不可行的。每秒30帧的1080p视频信号每秒约有6200万像素。树莓派的运行频率为700 MHz,因此,每个像素有11条指令。这是11条指令,可实时读取奇数视频格式,对其进行重新缩放等,等等。这是不可能的。期。

在FPGA上,可以生成一个较长的处理流水线,该流水线可以在每个时钟周期处理一个或多个像素,并以高度确定性的方式进行处理(无中断或任务切换!),以便可以通过HDMI传输像素数据。在正确的时间。如果您已经与运行任何种类操作系统的通用CPU进行了广泛的合作,那么您将知道在毫秒级上获得准确的计时或多或少是可行的,但在微秒级上获得精确计时几乎是不可能的。对于HDMI,您需要纳秒级的精度。在通用CPU上不可用。另外,请查看neo geo的HDMI音频/视频项目。这不仅需要重新缩放视频,还必须重新采样音频并将其插入HDMI视频流。

而且,这仍然没有考虑以任何输入数据格式读取所需的自定义逻辑。您将需要定制硬件来解释这一点。软件速度不够快或确定性不够。您也许可以将其重新格式化为某种基于USB的流,但这仍然需要自定义数字逻辑,因此您也可以直接输出HDMI。

要实现所有这些,数字逻辑实际上是唯一可行的解​​决方案。而且,如果您要进行数字逻辑处理,则FPGA是唯一可行的解​​决方案,因为它对于离散7400逻辑而言太快且太复杂,而ASIC的价格要贵几个数量级。

另一个必需的组件是实际的高速串行器和差分驱动器,用于生成并行串行数据流,这些数据流通过电缆发送。不可能从通用CPU每秒以千兆位的顺序对串行数据进行位冲击,这需要专用的硬件。树莓派有一个内置的GPU可以执行此操作,但是在GPU的功能方面有所限制,更不用说记录了什么。大多数FPGA至少包含足以支持低分辨率视频的必要差分驱动器和DDR触发器,并且有许多FPGA还包含必要的串行器(即Xilinx OSERDES块)以生成全高清流。不要忘记串行流不是“基带” 就像普通的串行端口一样,实际数据是逐帧发送的,带有一些成帧信息,但实际上是通过TMDS(最小化转换差分信号)对数据进行编码的,从而使信号具有一定的电气特性。除了实际的高速串行器以外,还需要一点逻辑来实现。所有这些都是在ASIC或FPGA上的纯数字逻辑中完成的(相对而言,编码-串行器可以说是模拟信号,或者至少是混合信号),相对简单。

实际上,这是整个数字/嵌入式系统设计过程中非常重要的一部分,它可以确定系统的哪些部分可以用软件实现,哪些部分需要硬件,可以采用现成的专用芯片,FPGA,定制等形式。 ASIC,硬或软IP(HDL,网表,GDSII)等。在这种情况下,很明显:视频信号生成需要专用硬件,例如GPU与通用CPU配对,集成硬核或FPGA的FPGA。软CPU内核,或与外部CPU配对,或更专业的东西。

编辑:我刚刚意识到fpga4fun网站和neo geo video项目都以640x480而不是全高清运行。但是,这并没有使操作简单得多。最小像素时钟为25 MHz,位时钟为250 MHz。这意味着FPGA实际上不需要串行器来传输HDMI,仅需要DDR触发器即可。但是,这仍然不能缓解读取视频数据的问题。如果要在没有硬件帮助的情况下在树莓派上执行此操作,则必须以25 MHz的频率连续读取GPIO。每175条指令读取一次。进入可能性领域,但您要做的唯一方法是在带有手工编码汇编的裸机(没有Linux)上。


2
现在,我提到了7400逻辑...我想知道是否可以生成具有离散逻辑的HDMI信号。fpga4fun网站有一个640x480视频的示例,该视频具有25 MHz的HDMI时钟,比特率为250 Mbit / sec或125 MHz DDR。这并不是很高,以至于它可以用分立逻辑芯片来实现。对某人来说可能是一个有趣的项目。
alex.forencich 2015年

每个像素11条指令-您如何计算该数字?您是否假设每个时钟周期只有一条指令?
gronostaj 2015年

700 MHz / 62 Mpps = 11.3。Ballpark假设单个核心CPU每个时钟周期有1个CPU。
alex.forencich 2015年

另外,我想我没有提到的另一个假设是,在没有硬件帮助的情况下,输入视频信号将按位敲入GPIO引脚,因此,必须以正确的时序以某种方式插入该指令。
alex.forencich 2015年

15
TL; DR:必须在硬件中完成。软件太慢。
JS。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.