Design of a FPGA PCB including USB2.0 interface and two 80 MHz ADCs

After having build a couple of add-ons for my ALTERA DE0 board, I wanted to see if it is also possible to design my own PCB including a FPGA. In particular the three different supply voltages for the FPGA I found a bit scarey for a two layer PCB.
But after some research I decided it is worth a try.

The idea was to have a FPGA connected to a FTDI USB2.0 controller as used in other projects like FTDI FT232H USB 2.0 FPGA extension, have two fast 80 MHz ADCs in the design and some GPIO pins.

The choice fall on the EP3C5E144C8N FPGA from ALTERA. This FPGA is a Cyclone III with an EQFP-144 package. So it can be hand soldered. The FPGA provides 2 PLLs, 94 I/O pins and has a price of around 12 EURO.
As ADC I used the 80 MSPS version of the AD9057 from Analog Devices, which is a 8 bit ADC, already explained on one of my previous projects ADC readout and USB2.0 data transfer with an FPGA.

One of the main challenge of this project was the huge amount of vias needed on the PCB. Specially the vias below the FPGA to connect all the capacitors for power cleaning were challenging. The 1mm vias I used in all my previous projects where no longer small enough and I went for 0.5mm holes instead. This requires more precision on the drill in order not to break it!

The PCB was also tinned in order to protect the copper from oxidation from fat and acids on the hands during soldering.
Soldering by hand takes some time.

A detailed description of the tinning and the vias can be found on the page:
PCB tinning including VIA soldering

The schematic of the design looks the following:

FPGA_BOARD_Schematic

The board design top (left) and bottom (right):

FPGA_BOARD_BRD_TOP FPGA_BOARD_BRD_BOTTOM

The function of the ADCs was validated with the reading in the samples from the ADC and passing them via the FPGA to to USB2.0 controller. GNURadio was then used to plot the spectrum. Up to around 75 MSPS could be used with still getting nice curves, with higher sample rates the curves become distorted.

FPGA_BOARD_SampleCapture

The finished design looks the following:

FPGA_BOARD_PCB2 FPGA_BOARD_PCB1

The FPGA board provides 2xADC, 1 PushButton, 4 LED, USB2.0 controller, 18 GPIO bins, JTAG port and a configuration FLASH to hold the configuration.

Function FPGA Pin
LED1 PIN_1
LED2 PIN_2
LED3 PIN_3
LED4 PIN_4
PushButton(*) PIN_133
FPGA_CLK / 50 MHZ PIN_91
FTDI USB Controller
ACBUS9 PIN_30
ACBUS8 PIN_31
ACBUS7 PIN_32
ACBUS6 PIN_33
USB_CLK / ACBUS5 PIN_25
ACBUS4 PIN_34
ACBUS3 PIN_38
ACBUS2 PIN_43
ACBUS1 PIN_44
ACBUS0 PIN_50
ADBUS7 PIN_51
ADBUS6 PIN_52
ADBUS5 PIN_53
ADBUS4 PIN_54
ADBUS3 PIN_59
ADBUS2 PIN_60
ADBUS1 PIN_64
ADBUS0 PIN_65
GPIO
GPIO1_D0 PIN_66
GPIO1_D1 PIN_67
GPIO1_D2 PIN_68
GPIO1_D3 PIN_69
GPIO1_D4 PIN_70
GPIO1_D5 PIN_71
GPIO1_D6 PIN_72
GPIO1_D7 PIN_73
GPIO1_D8 PIN_74
GPIO1_D9 PIN_75
GPIO1_D10 PIN_76
GPIO1_D11 PIN_77
GPIO1_D12 PIN_79
GPIO1_D13 PIN_84
GPIO1_D14 PIN_86
GPIO1_CLKOUT0 PIN_85
GPIO1_CLKOUT1 PIN_87
GPIO1_CLKIN0 PIN_88
ADC2
ADC2_D0 PIN_98
ADC2_D1 PIN_99
ADC2_D2 PIN_100
ADC2_D3 PIN_101
ADC2_D4 PIN_103
ADC2_D5 PIN_104
ADC2_D6 PIN_105
ADC2_D7 PIN_106
ADC2_CLK PIN_112
ADC1
ADC1_CLK PIN_113
ADC1_D0 PIN_114
ADC1_D1 PIN_115
ADC1_D2 PIN_119
ADC1_D3 PIN_120
ADC1_D4 PIN_125
ADC1_D5 PIN_126
ADC1_D6 PIN_127
ADC1_D7 PIN_128

(*)The PushButton in this design is connected to a 74LVC1G07DBV buffer. This buffer is an open drain buffer and needs therefore an additional pullup at the output port (not in the schematic drawing). The easiest is to replace it with a normal buffer which exists in the same package.

The design files can be downloaded from GitHub

https://github.com/digibird1/FPGA_BOARD

It can be checked out with:

git clone https://github.com/digibird1/FPGA_BOARD

3 comments on “Design of a FPGA PCB including USB2.0 interface and two 80 MHz ADCs
  1. Tomas says:

    Very nice pcb, you use cordic for ddc in fpga ?

  2. Tomas says:

    Cordic is good for complex mixer, decimate with cic filter and some extra bit of resolution. I make some test with cheap lattice mach x02 and adc ads6142. I will try to use your code for use ftdi232h with gnu radio.

Leave a Reply

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

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: