FMC-LPC to SATA adapter board

I recently bought a shiny new Xilinx Spartan-6 FPGA SP605 Evaluation Kit:

FMC-LPC to SATA adapter board - installed on Xilinx SP605 board

FMC-LPC to SATA adapter board - installed on Xilinx SP605 board

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.

FMC-LPC to SATA adapter board - bottom

FMC-LPC to SATA adapter board - bottom

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.

FMC-LPC to SATA adapter board - top layer

FMC-LPC to SATA adapter board - top layer

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.

MT9V032 camera to FPGA interface development

MT9V032 camera to FPGA interface development

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.

MT9V032 camera board - assembled

MT9V032 camera board - assembled

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:

FMC-LPC to SATA adapter board - assembled bottom

FMC-LPC to SATA adapter board - assembled bottom

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:

Reflow Toaster Oven

Reflow 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.

FMC-LPC to SATA adapter board - assembled top

FMC-LPC to SATA adapter board - assembled top

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:

SATA breakout/breadboard PCBs

SATA breakout/breadboard PCBs

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:

PCB macro shot

PCB macro shot

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.


The EAGLE libraries I used to make this board are available in my eagle-lbr Mercurial repository (or directly download a ZIP file). The FMC-LPC footprint is in the ‘dan-xilinx.lbr’ library.

The EAGLE schematic and PCB layout for the FMC-LPC to SATA adapter board is also available via Mercurial, in my eagle_fmc-sata repository (direct ZIP download).

For those without EAGLE, a PDF of the schematic can be downloaded below:

FMC-LPC to SATA adapter board - schematic

FMC-LPC to SATA adapter board - schematic

This entry was posted in FPGAs, PCBs, Technical and tagged , , , , , , . Bookmark the permalink.

20 Responses to FMC-LPC to SATA adapter board

  1. mahgust says:

    do you plan to make board like this one (image is attached )?
    I think it would be helpful to many people!
    Thank you!

    • Dan says:

      My adapter board meets all of my current development needs – so, no, I hadn’t really planned on designing something like that (a breakout board with an LCD, switches, buttons, low-speed I/O (Digilent Pmod style, perhaps), and a few high-speed coax connectors).

      If you wanted to try designing such a board yourself, though, the design files I’ve posted for my FMC-LPC adapter board would certainly be a good starting point!

  2. Rifat says:

    Great post and thank you for sharing valuable info with the community. By the way, I have also sent you an email. I don’t know if you are interested but it would all the same be nice to hear from you


  3. Adi Oltean says:

    Amazing post – great idea on using SATA/micro-coaxial cables … I wonder if this can be morphed into a high-speed logic analyzer.

  4. Andrei says:

    Awesome. I’m building a FMC 4-Ch Capture card for the SP601 board. Just wondering what temperature profile you used and did you have problems with melting the FMC LPC connector?

    • Dan says:

      The profile I used was built from combining a few different profiles I found on-line, and then massaging it so that my oven could actually keep up (mostly).

      I’ve just posted a plot of the achieved soldering profile. The sensed temperature was captured with a thermocouple touching the center of the PCB near the FMC-LPC connector (contact may not have been ideal, so actual temperatures could have easily been a bit higher).

      You can also find the raw CSV source for that plot, and the OpenOffice spreadsheet that I originally used to create the profile in my reflow_controller repository. The CSV has the data for a second thermcouple, as well (sense_b – positioned freely in the air near the PCB).

      I’m using Kester EP256 tin/lead solder paste. A higher-temperature profile would, of course, be required for lead-free solder.

      I didn’t have any problems with the connector melting, and there weren’t any visible signs of it even softening – even after two reflow cycles (one for each side of the board, with the FMC-LPC side being done first).

      • Andrei says:

        Thanks Dan.

        How did you calibrate your thermistor? Did you just calibrate it for room temperature?

        I actually have the same solder paste. I figured that the lead-free stuff would have a significantly higher soldering temp and at the time I didn’t think my oven could reach that.

      • Dan says:

        I’m actually using a thermocouple (a model 9251T93 type-K thermocouple from McMaster-Carr), rather than a thermistor. And I’m using it with a cold-junction-compensated thermocouple ADC (a MAX6675). It’s a lot more expensive than a simple thermistor, but it does “just work” – no calibration required.

        I don’t personally have any experience with using thermistors for high-temp applications like this, so I can’t offer a lot of advice there. I do know that folks working on DIY 3D printers (e.g. RepRap) have done a fair amount of work on calibrating/linearizing thermistors for high-temp applications – you might, for example, have a look at the RepRap Wiki entry on thermistors – or the entry on their temperature sensor board (“It is designed to be used to measure things in the range of 100C – 300C”).

  5. unlucky says:

    it’s very interesting idea to use sata cables and level-shifting boards to protect fpga pins!
    But i cant find scheme and layout of these boards in your repository(
    Do you forgot upload it?

    • Dan says:

      Yeah, I haven’t uploaded the design for the breakout boards yet. That will happen whenever I get around to doing a writeup about them.

      The design has some clearance issues between parts that has made assembly more difficult – this still needs to be resolved.

      For now, there’s an image of the schematic over on Flickr. There’s not a lot to the board (if you didn’t care about LEDs, the design would be much simpler!).

  6. DreamCat says:


    but how draw the differential signal wire pair in EAGLE,
    and how to measure these wire’s length?

    • Dan says:

      EAGLE, unfortunately, has no concept of differential pairs – so it’s up to you to constrain them.

      I made sure my differential pairs had a spacing that was consistent with the grid I was using in EAGLE, so I could rely on the grid to maintain spacing between pairs. Everything you see in this layout (including the serpentining) was done manually.

      EAGLE includes the “length” ULP for calculating trace-lengths. You can invoke it by typing “run length” into the command-line in the board editor. You can provide net names as arguments to narrow down the report. For example, when equalizing the length of traces going to connector JC3 (with net names: JC3_AP, JC3_AN, JC3_BP, JC3_BN), I used the command “run length jc3_*”, which gave me a report on the lengths of those 4 traces. I then manually inserted serpentining until the report indicated the traces were the same length.

      • DreamCat says:

        Thanks your reply.
        Hope CADSOFT can provide this function in future release.

  7. DeWayne says:

    Thanks for posting this. Where did you get the FMC connector?

    • Dan says:

      There’s a thread over on Xilinx’s forums talking about where to buy FMC-LPC connectors. I bought mine on Digi-Key (SAM8732-ND), though they’re currently out of stock.

      Here’s a table of possible part numbers (as posted by mcgett):

      Vita-57       Samtec            Molex
      MC-LPC-10    ASP-134604-01    45970-4305  (lead free)
      MC-LPC-10L   ASP-127797-01    45970-4307  (with lead)
      MC  = Mezzanine Card
      LPC = Low Pin Count
      10  = 10 mm height
      L   = With Lead
  8. Pingback: FPGA Mezzanine Card (FMC) is a game-changer

  9. Pavan says:

    This is really helpful for me as I am also trying to make FMC adapters for our application. It would be really nice if you can point me to the place where you got FMC-LPC library, I need the same for FMC-HPC connector that comes on Xilinx ML605 boards.


  10. Pavan says:

    Also, could you tell me where you got your FMC-LPC to SATA PCB fabricated?


  11. Anshu Roy says:

    Hi Dan,

    I want to be able to put the MT9V032 on a breadboard in order to evaluate some features of 10 pieces that I have bought. Do you have any ideas on how to do this?

    Many thanks,

  12. Eric says:

    Hi Dan,
    I would love to do your open source project that stereoscopic images,But I do not know where to start.Hope to get your guidance.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s