As part of my Eclypse Z7: Zynq-7000 SoC Development Board - Review road test, I'm hoping to investigate further into the Zmod add-on board ecosystem. Whilst Digilent call their board Zmods, these are based on the open SYZYGY specification. Let's just clarify what the difference is.
What's a Zmod?
Zmod is a term created and used by Digilent. If you look at their documentation they describe Zmods as follows:
The Zmod family is Digilent's line of peripheral modules that conform to Opal Kelly's SYZYGY specification. Zmods are interface boards that offer modular high-speed I/O capabilities to compatible FPGA host boards.
They currently have 2 boards in their line up - the ADC 1410 and the DAC 1411 - both of which were included as part of the road test. These are high speed peripherals capable of 100 million samples per second. For this reason they needed a little more than the low speed Pmod connectors could handle. The documentation page mentions only 2 Digilent FPGA boards that can accept these peripherals - the Zynq based Eclypse Z7 and Eclypse ZU - although the USB104 A7: Artix-7 FPGA Development Board also has a Zmod port.
Digilent's Zmod adds some base C++ classes and some Xilinx IP on top of the SYZYGY specification. I'm unlikely to be using any of this, so my board couldn't be classed as a Zmod. Digilent seem to have gone to a fir bit of effort to support this ecosystem, so I wouldn't be surprised to see more Zmods appearing at some point.
What's SYZYGY?
So, stepping one level down from Zmod, what exactly is SYZYGY? Well, it's an open standard maintained by Opal Kelly. This standard is comprehensive and well documented but there's a fair bit to it.
Physical connection
The first part of the SYZYGY standard is the fine pitch 40 pin headers used for the physical connection. There are two types. There's the "standard" one with regularly 0.8mm spaced pins using a Samtec QTE series connector. This is the one used on the Eclypse Z7 and the two Zmod boards. It's the one I'll be sticking with. There's also a transceiver connector which uses Samtec QTH series connectors having the pins group in pairs. SYZYGY also supports using a pair of connectors for one board too. Needless to say, I'll be sticking with the simplest implementation of a single standard port.
The connector needed on the peripheral side of this is the Samtec QTE-20-01-F-D-ASamtec QTE-20-01-F-D-A which is available for a reasonable price and in a home-solderable 0.8mm pitch form factor. It was the fact that this seems a less daunting prospect than a full mezzanine connector that made me thing that creating my own SYZYGY peripheral would be possible.
The SYZYGY specification tells you everything you need to know - such as which pins should be used for various functions, the size of the board and the placement of the connector and mounting holes. Here's one of the most helpful parts of the spec. It also mentions that you need to read a bit further and implement the SYZYGY DNA...
DNA specification
So, it's not just a physical connection standard then! The SYZYGY DNA specification elaborates on the minimum your board will need to do to be recognised by the carrier board. The carrier board will interrogate your peripheral (or "pod" in the SYZYGY parlance) using I2C in order to determine what voltage levels to be used for communication, what power to supply, etc. You'll also need to measure the voltage level on one of the pins to determine what I2C address will be used to do this communication.
So - at the very least you'll need a microcontroller to handle the SYZYGY DNA configuration. The spec recommends an ATtiny44A although no full sample code is provided. As don't have any experience with Atmel devices, dev boards or programmers, I decided that this would be a good time to jump back to the microcontroller that got me started with embedded development - the MSP430F2013. There's no other reason. I suspect most microcontrollers could do the job. It just felt right.
Rather than delving deep into the communications up front, I decided that I'd wire up the MSP430 to the appropriate I2C lines with a couple of test point for debugging. At the very least my board would let me test the I2C protocol. The Digilent boards have the I2C signals available on a 0,05" pin header, but I'd rather not go poking around there unless I need to.
Creating the board
So, what to make?
I wanted to keep my peripheral board as simple as possible. I could have made it just a breakout board, but that seemed like missing an opportunity. Besides, you can buy one of those from Opal Kelly already. Whilst chatting to my fellow Eclypse Z7 road tester Bartosz, he mentioned HDMI. That seemed ideal. It's high enough speed that it deserved more than a Pmod. It was reasonably simple and mostly needed the HDMI pins connected more or less to the FPGA pins. There was Xilinx IP I could make use of for testing HDMI output. Perfect! A HDMI SYZYGY board it is.
Designing the PCB
I was still determined to keep things as simple and increase the chance that this would work. I added the MSP430 and a TagConnect debug header. I added the Samtec QTE and HDMI connectors. (I got footprints from SamacSys although it's lucky that I checked them because the Samtec one wasn't quite right. The locating pins were a bit off and this would have meant the board and mounting holes would have been misaligned.
The rest of the HDMI circuitry for CEC, hotplug detection, etc probably wouldn't be used, but I decided to add them anyway. In order to reduce the chance of error I took a lot of this from the schematic of the Pynq Z2 board where I know HDMI works and the Xilinx IP does the job. A few evenings later, version 1 of the board was ready and off to a Chines board house it went. It was about $5 for 5 board and another $7 for shipping. Crazy cheap prices! I thought about going for a stencil. This was only $10 buy would have added another $15 shipping and more importantly would have probably caused my package to attract the attention of customs, adding VAT and handling fees. As there are no really tricky footprints I decided to just go with manually applying paste.
Here's a screenshot of the finished board layout. I'll obviously publish it in full, but let me check that it works first! You may have noticed the overly brash and prominent 0xFRED logo. I thought I'd try something that's inspired by the PCB itself. This is actually made from copper traces fully underneath black soldermask, so I'm hoping this will be a lot more subtle that it might look from this image. If it works - and looks OK - then I might expand on this idea and actually incorporate these traces in future designs. For now they're just unconnected copper.
Stay tuned...
I expect to have the boards back in about 3 weeks. I'll place an order for the components in the mean time. Then it'll be time to see if I made any mistakes and if I can get the MSP430 communicating with the carrier board.
Also, it turns out that SYZYGY is not an acronym or a made up brand name. It's a real word. It refers to the alignment of three celestial bodies. Let's hope that the physical spec, the DNA, and my amateur PCB design all align. Also, if it's a real word maybe I don't need to keep typing it in capitals. Syzygy. There. That's better.