Daily Archive for January 7th, 2011

Soldering things you can’t really see: building an AC’97 Pmod for Nexys2

Many boards manufactured by Digilent have a uniform type of plugin interface they call “Pmods.” They provide a bunch of IO pins as well as VCC and ground. Pmods can do pretty much everything as long as they can fit into 8 signal lines.

I’ve been looking for a good way to get audio signals into the FPGA. One way would be to use an ADC. Generally, this isn’t too hard to do, but you need to scale and bias the audio line correctly so that it takes the full width of the ADC and is located in the center part.

Another option is to use an audio codec chip. The UCB1400, for example, is an AC’97 chip; it provides a simple serial interface for both inputting and outputting audio streams. I was originally hoping that I could just buy a Pmod containing an AC’97 chip and connectors, but I wasn’t able to find anything online.

So, I then decided to try to include an AC’97 interface in the auxiliary board that I am designing for ACRIS (the board has to do many things, including routing the data from the FPGA out to the LED controllers). But fortunately, I found out that Chris Terman, a Course 6 professor here at MIT, already designed a Pmod for the Nexys2. After contacting him, he gave me the parts to build a bunch of boards and debug his design.

The fun part: the board uses surface mount components, including 0402 resistors and caps. How small are 0402s? This small:

The trickiest part is installing the UCB1400. It’s in a 48-LQFP package, so the pins are very close to one another. I found that the best way to solder the package was to tack down a corner or two, then go to an opposite side and apply a tiny bit of solder at one end. I then raked the iron back and forth across the pins (in the method known as drag soldering), but due to the nature of the pins, I had to use a good amount of solder, which meant that when I was done, all the pins were bridged together. Finally, I used a solder wick to unbridge the pins. The only major problem I had was the initial alignment of all the pins. A slight rotation or shift causes them to become mismatched to the pads.

The results, though, were pretty good:

Next, I’ll be working on controlling the board with the FPGA.