Send video/audio over HDMI on an FPGA
English | Français | Help translate
SystemVerilog code for HDMI 1.4b video/audio output on an FPGA.
Most free and open source HDMI source (computer/gaming console) implementations actually output a DVI signal, which HDMI sinks (TVs/monitors) are backwards compatible with. To support audio and other HDMI-only functionality, a true HDMI signal must be sent. The code in this repository lets you do that without having to license an HDMI IP block from anyone.
This project is dual-licensed under MIT and Apache 2.0.
SPDX-License-Identifier: MIT OR Apache-2.0
src/
and add them to your own project. If you use hdlmake, you can add this repository itself as a remote module.top/top.sv
.hdmi.sv
and tailor any instantiations to your situation.You'll need to set up a PLL for producing the two HDMI clocks. The pixel clock for each supported format is shown below:
Video Resolution | Video ID Code(s) | Refresh Rate | Pixel Clock Frequency | Progressive/Interlaced |
---|---|---|---|---|
640x480 | 1 | 60Hz | 25.2MHz | P |
640x480 | 1 | 59.94Hz | 25.175MHz | P |
720x480 | 2, 3 | 60Hz | 27.027MHz | P |
720x480 | 2, 3 | 59.94Hz | 27MHz | P |
720x576 | 17, 18 | 50Hz | 27MHz | P |
1280x720 | 4 | 60Hz | 74.25MHz | P |
1280x720 | 4 | 59.94Hz | 74.176MHz | P |
1280x720 | 19 | 50Hz | 74.25MHz | P |
1920x1080 | 16 | 60Hz | 148.5MHz | P |
1920x1080 | 16 | 59.94Hz | 148.352MHz | P |
1920x1080 | 34 | 30Hz | 74.25MHz | P |
1920x1080 | 34 | 29.97Hz | 74.176MHz | P |
3840x2160 (not ready) | 97, 107 | 60Hz | 594MHz | P |
3840x2160 | 95, 105 | 30Hz | 297MHz | P |
The second clock is a clock 5 times as fast as the pixel clock. Even if your FPGA only has a single PLL, the Altera MegaWizard (or the Xilinx equivalent) should still be able to produce both. See hdl-util/hdmi-demo for example PLLs.
Both audio bitrate and frequency are specified as parameters of the HDMI module. Bitrate can be any value from 16 through 24. Below is a simple mapping of sample frequency to the appropriate parameter
WARNING: the audio can be REALLY LOUD if you use the full dynamic range with hand-generated waveforms! Using less dynamic range means you won't be deafened! (i.e. audio_sample >> 8 )
Sampling Frequency | AUDIO_RATE value |
---|---|
32 kHz | 32000 |
44.1 kHz | 44100 |
88.2 kHz | 88200 |
176.4 kHz | 176400 |
48 kHz | 48000 |
96 kHz | 96000 |
192 kHz | 192000 |
This code is sent in the Source Product Description InfoFrame via SOURCE_DEVICE_INFORMATION
to give HDMI sinks an idea of what capabilities an HDMI source might have. It may be used for displaying a relevant icon in an input list (i.e. DVD logo for a DVD player).
Code | Source Device Information |
---|---|
0x00 | Unknown |
0x01 | Digital Set-top Box |
0x02 | DVD Player |
0x03 | Digital VHS |
0x04 | HDD Videorecorder |
0x05 | Digital Video Camera |
0x06 | Digital Still Camera |
0x07 | Video CD |
0x08 | Game |
0x09 | PC General |
0x0a | Blu-Ray Disc |
0x0b | Super Audio CD |
0x0c | HD DVD |
0x0d | Portable Media Player |
J13
, on the Arduino MKR Vivado 4000 schematic, where LVDS IO Standard pins on a Cyclone 10 FPGA have 100nF series capacitorshdmi.tmds_channel[2:0].acc
J13
on the Arduino MKR Vivado 4000 schematic)Dual-licensed under Apache License 2.0 and MIT License.
I am NOT a lawyer, the below advice is given based on discussion from a Hacker News post and my research.
HDMI itself is not a royalty free technology, unfortunately. You are free to use it for testing, development, etc. but to receive the HDMI LA's (licensing administration) blessing to create and sell end-user products:
The manufacturer of the finished end-user product MUST be a licensed HDMI Adopter, and The finished end-user product MUST satisfy all requirements as defined in the Adopter Agreement including but not limited to passing compliance testing either at an HDMI ATC or through self-testing.
Becoming an adopter means you have to pay a flat annual fee (~ $1k-$2k) and a per device royalty (~ $0.05). If you are selling an end-user device and DO NOT want to become an adopter, you can turn on the DVI_OUTPUT
parameter, which will disable any HDMI-only logic, like audio.
Please consult your lawyer if you have any concerns. Here are a few noteworthy cases that may help you make a decision:
If you know of another good alternative, open an issue and it will be added.
These documents are not hosted here! They are available on Library Genesis and at other locations.