I recently bought a shiny new Xilinx Spartan-6 FPGA SP605 Evaluation Kit:
It’s an excellent board (aside from the ridiculous ~10W idle power consumption and the corresponding supply heating/temperature) – PCI-Express, gigabit ethernet, DVI, 1.6 GB/s 128 MB DDR3, and a large (43,661 equivalent logic cells and 2,088 Kbits of block RAM) XC6SLX45T Spartan-6 FPGA? Yes, please.
At first glance, it has one major failing: a complete lack of user-friendly I/O expansion. Xilinx has put all of their eggs in one high-density, surface-mount basket: the board has ~70 FPGA I/Os brought out to a single high-speed FMC connector.
Not the most friendly looking footprint, right? While it’s no 100-mil pin header, it’s remarkably easy to work with – even on a simple 2-layer PCB.
My FMC-LPC to SATA adapter board breaks out every single available user I/O on the FMC-LPC connector to a more accessible header. And it does this using just a single layer (seen above). The bottom layer is just a ground fill, with very short traces between the top-layer vias and the FMC-LPC connector’s SMD pads.
I’ve chosen SATA connectors for the bulk of the I/O, for a few reasons:
- SATA connectors are easy to work with in layout
- SATA cables have individual micro-coax conductors for each signal
- SATA is specced for >= 1.5 Gbps operation
- SATA cables are readily available and practically free
1.5 Gbps? Surely I can’t be running at those speeds! You might be surprised, though: The Spartan-6’s SerDes blocks are specced for 1050 Mbps operation – and, in fact, I’ve performed loop-back testing at those speeds on this very board. At those speeds, I won’t be connecting these SATA connectors to any real SATA peripherals (only the Spartan-6’s MGTs – Multi-Gigabit-Transceivers – are capable of that), but it’s still pretty damn fast.
Granted, I don’t currently have a need for running at 1 Gbps. The only thing I would realistically want to communicate with at those speeds is another FPGA – and I only have/need 1 at the moment. But I do have a need for 320 Mbps, which would easily exceed the limits of a lesser connector. You see: I’m working on a fancy FPGA-accelerated stereo vision platform (a topic of a future post), and I’ve selected Aptina’s MT9V032 image sensor for the cameras.
One major feature of the MT9V032 is that is has an optional LVDS output. Rather than routing twenty or so moderate-speed signals from each image sensor to my FPGA, I can use a single SATA cable for each camera module. Two of the SATA signals carry the 320 Mbps LVDS data stream; one signal carries the 26.67 MHz reference clock to the camera (from which the 320 Mbps LVDS is derived); And the final signal is a low-speed bidirectional serial bus for communicating with the microcontroller on the camera board. I already have the deserializer logic implemented and working flawlessly at 320 Mbps in the Spartan-6 (a topic of a different future post).
Anyway. Back to the FMC-LPC board:
There’s essentially no way to install the FMC-LPC connector with a conventional soldering iron. With some sort of reflow soldering setup, however, it’s a piece of cake. Hobbyists have several options readily available to them, including hot-air rework stations, hot-plates, and toaster ovens. Hot-plates are regarded by many as being more user-friendly, but I wanted the ability to assemble two-sided boards, so I opted for the toaster oven:
Using a Kapton solder paste stencil from OHARARP, solder paste was applied to the connector’s pads. The connector was installed, and then the board was put into the oven. A simple reflow profile was run using a thermocouple, an AVR microcontroller (implementing a PID control loop) and some solid-state relays to control the oven’s heating elements (yes.. yet another future post). And then it was done. I’ve tested every connection between the FPGA and the SATA connectors on the breakout board, and they’re all solid. 160 solid solder joints without even picking up a soldering iron? Nice.
I didn’t have a stencil made for the top layer, so assembly was a mix of hand soldering (most parts) and reflow soldering (the SATA connectors). The reflow soldering was done with the bottom-side FMC-LPC connector taped to the board (surface-tension might have been enough to hold it, but I didn’t want to take any chances).
I only loaded some of the SATA connectors – partly because I really won’t be needing that many connections in the near future, and mostly because I was concerned about being able to manually fix solder bridges resulting from reflow (which did occur – in the future, I either need to order stencils for all layers, or improve my manual solder-paste applicating method!).
For those cases where I actually do want to interface my SP605 to lower-speed peripherals, I’ve also designed some simple breakout/level-shifting boards:
Each board has a TXS0104EPWR 4-bit bidirectional level translator on it, allowing the 2.5V I/O on the SATA connector to safely interface with 3.3V and 5V logic. The boards also have individual indicator LEDs for each bit – the support logic for which accounts for over half the parts on the board! It’ll be worth it though, I’m sure.
Speaking of MGTs (several paragraphs ago..) – the FMC-LPC board has one additional opportunistic feature on it:
That’s a footprint for a mini-HDMI connector. Like the not-really-SATA SATA connectors, this HDMI connector has nothing to do with HDMI. Instead, it’s designed to connect to some cheap PCIe cable adapter boards, which rely on a HDMI cables rather than the much more costly (and bulky!) official PCIe cables. The FMC-LPC connector on the SP605 has one of the Spartan-6’s MGTs pinned out, which is connected (as directly as possible) to the HDMI connector on my adapter board. In theory, this will let me eliminate a superfluous PCIe adapter board in my final application. I haven’t tested this aspect of the board at all yet, so it remains to be seen whether a cheap not-even-remotely-impedance-controlled 2-layer PCB will be up to the task of 2.5 Gbps PCIe signaling.
Final application? Oh, yes: Ultimately, I plan on using the SP605 in a mobile robot, connected to a mini-ITX mainboard over PCIe. The mainboard has a mini-PCIe slot, but not a typical PCIe slot, so I have to use a mini-PCIe-to-cable adapter. Allowing the cable to plug directly into this FMC-LPC adapter board would allow me to forgo the additional cable-to-PCIe adapter board.
As for what the SP605 will be doing in my robot, that’s already been hinted at: stereo vision.
For those without EAGLE, a PDF of the schematic can be downloaded below: