An HDMI breakout board for the high-speed PMOD slots on the Arty A7 35T

Similar projects worth following
This project is a high-speed PMOD to HDMI breakout board. There are no active components on this board, so the host card must have TMDS transmitters, as is the case with my Arty A7 35T dev board. Only the three color channels and the clock are hooked up directly to the PMOD connector due to the limited number of pins, with the rest of the signals hooked up to a 0.1" header on the side. This shouldn't be much of a problem, since I'll be hard-coding the resolutions and refresh rates anyways.

I have always been drawn to LEDs and visual projects. In college I made an RGB light strip controller for my apartment, and a 5x5x5 RGB LED cube that took in an audio signal and pulsed with detected bass notes. There's just something about LEDs that make a project so much more tangible without requiring 3D modeling software or shop work. I think this project is the natural progression of that.

To play around with video though requires that I have hardware that supports it. My Arty A7 35T dev board unfortunately has no video output, which means I either had to buy something off the shelf or make my own breakout board. There are plenty of expansion boards out there in the wild already, but none of them tickled my fancy. For example, there is this VGA PMOD from Digilent, or this DVI PMOD from 1BitSqured. I wanted something more modern than the VGA, and both use two PMOD connectors! Lucky for me, the Artix 7 chip on my board has TMDS and LVDS transceivers, and my board routes out a few of them as diff pairs to the PMOD connectors. As an added bonus, some smart individuals have already used these ports for exactly this purpose (see Domipheus Labs and Mike Vine). I thought about ordering Mike's PCB, but ideally I'd like to target 1080p 60 Hz and I'm not sure if the routing would hold up at that frequency. I'm not even sure if the Artix 7 chip's transceivers are even capable of switching at the rate needed for that, so this is something that I will need to do more research on.

  • PCBs Assembled

    Alexander Wranovsky01/23/2021 at 22:37 0 comments

    PCB Assembly

    The PCBs that I ordered came in this week, and they look nice! I am surprised at how tiny they feel compared to how they looked on my monitor. An assembled PCB plugged into my Arty A7 board is shown below. I didn't solder the header or resistors connected to the sideband signals, since I'm not planning on using those yet.

    Admittedly it took me two attempts to get the HDMI connector soldered down correctly. I have a Hakko FX-888D iron which works well enough, but a hot air station and some solder paste would have definitely helped with the 0.5 mm pitch pins on the HDMI connector. I tried doing it the quick and dirty way the first time around by swiping across all of the pins, and then cleaning up with some solder wick. You can see how well that turned out below.

    On my second attempt I applied some flux to each pin, and then hit each one individually with a tinned iron. This still required some cleanup with the solder wick, but the result is much prettier. Here's a closeup.

    OpenEMS Simulation Progress

    I did spend a weekend trying to import the PCB into OpenEMS, but ran into some problems with the tools I tried. I first tried pcbmodelgen, which converts Kicad PCBs into an Octave/Matlab description of the geometry the mesh needed for simulation. While the examples worked fine for me, I couldn't figure out how to make it work with four layer boards. Next I tried pcb-rnd. It has a plugin for reading Kicad PCBs, but I think the version of Kicad I am using is too new for it. Upon importing my PCB, it puked with a message about the file format being unrecognized.

    For Gentoo users, I created ebuilds for both pcbmodelgen and pcb-rnd, which you can access here and here. The pcb-rnd ebuild is pretty lazy, and could have been done better had I taken the time to learn the project's replacement for autotools.

    I still plan to do a simulation at some point, but it will require some more work. I think the route forward will require that I either make changes to pcbmodelgen or roll my own tool. Whichever way I choose will probably warrant its own post, so stay tuned here for any updates.

    Next Steps

    Testing the PCB is the next thing in the queue for me. I'm hoping I can simply load up the project from Domipheus Labs and hit go. Once that's done, I will work on writing my own module in Verilog and packaging it up with FuseSoC.

  • Layout complete

    Alexander Wranovsky12/21/2020 at 04:39 0 comments

    I started doing layout with JLCPCB's 2-layer stackup, but I quickly realized that I wasn't going to be able to hit 100 ohm differential mode characteristic impedance with such a thick dielectric. Lucky for me, JLCPCB offers 4-layer boards for just a couple more dollars. They offer two separate 4 layer stackups: JLC7628 and JLC2313. I went with JLC2313 since the thinner dielectric shrinks your trace width when controlling the impedance.

    I also made a couple changes to the schematic, including swizzling around the TMDS pairs to make routing easier, and adding in some missing pull-ups and pull-downs.

    I have also been playing around with the OpenEMS 3D field solver in my spare time, and I would really like to plug this board into it and see how well it holds up. I used JLCPCB's calculator for choosing track width and spacing, and I am curious how accurate it is. I might potentially create some S-parameters for the board as well, but we'll see.

View all 2 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates