HDMI Round 2

HDMI Round 2

by ferris


Last week I got to the point where I could read registers from the transmitter chip. This week, I spent some time getting ssh set up on my windows pc so I could work on this with only one keyboard. Then, I worked on writing registers to the transmitter. Once I got it powered up and wrote all of the setup registers correctly, then I just had to generate a video signal.

This was pretty easy actually; I basically looked up some code to see how others were doing it, because it was mostly about counters (how many scanlines is vblank active, how big is overscan, etc) and relatively straightforward. Once I did that though, I couldn't get it to work. Something else was wrong.

I spent some time writing another top-level testbench for the hardware and ran it in the simulator. After some cleanups/iterations to get useful signals to show up there, I started looking at the video data, and noticed the timing seemed a bit funny. The video signal seemed to be only half the speed it needed to be. So, I zoomed in to look at my 50mhz original clock and the 25mhz pixel clock, and found that I had written it wrong; my pixel clock was only 12.5mhz instead. This is below HDMI's minimum clock speed (25mhz), so I fixed that, and BAM! Pixelzzzz :D:D

I also spent some time learning about different ways to do state machines in Verilog. The next step for this project is to clean stuff up with that in mind, and also support hot-plugging for the monitor, as currently the transmitter shuts itself off when the monitor is disconnected (to use less power) and I'm not detecting that to be able to turn it back on. Finally, I think it should be super fun to try to make a small 8-bit CPU and build something like an Atari, and perhaps code a little demo with it... :D

Last Edited on Sat Nov 28 2015 23:14:49 GMT-0500 (EST)

Zach Harvest commented

Jesus tits this fuck. < no understanding why the SD271 web filter blocked everyweeks.com....

on Tue Dec 01 2015 17:16:20 GMT-0500 (EST)