I’m designing an HDMI transmitter. I often refer to XIlinx’s designs of the HDMI for demonstration on Spartan3 and Spartan6. The application notes for these two designs are very helpful especially the Spartan3 design. Moreover the coding itself is easy to understand.
Here is the two application notes : for spartan 3 XAPP460 and for Spartan6 XAPP495 and here is the design files XAPP460 and XAPP495. You need to register with Xilinx’s website to be able to download the design files.
I started with building the TMDS encoder. The TMDS encodes 8 bits into a 10 bit code. The algorithm has two goals:
- Minimize the number of transitions to be 5 or less. Transitions are changes in the bit stream from 1 to 0 or vice verse.
- Achieve DC balancing which is to make sure that through the whole stream of bits the number of ones is equal to the number of zeros and prevent a long stream of ones or zeros.
TMDS can transfer data up to 10.2 GBit/s according to the latest HDMI specs. Transmitting data at this very fast rate makes the data so vulnerable to noise. TMDS manages to deliver the data at this fast rate thanks to three important features of it’s design; its algorithm (as explained above), the HDMI cable itself and last but not least transferring the data via a differential pair.
That’s all for this week. Hopefully by next week you can my HDMI device up and running.