During my second year of EE&IT studies in Germany some time ago, I got hooked on digital systems development using CPLDs. Since then, I have been tinkering with different types of kits, ranging from Digilent's high-end Zybo and Nexys academic development boards, to discrete Lattice Semiconductor GAL chips. Most of these kits, however, came at a significant cost, either in the kit itself, or required accessories, such as programmers. The best "bang-for-buck" options I encountered along the way were "minimum" development boards for Xilinx and Altera parts, albeit only featuring (relatively) large Spartan-6 or Cyclone series chips, respectively. I am yet to find a "proper" low-cost minimum development board for small PLDs.
The "XCtiny" development board is my take on creating a small, low-cost board featuring a Xilinx XC2C32A CoolRunner-II series CPLD, for quick and easy prototyping on a breadboard.
The "XCtiny" board is mainly aimed towards hobbyists and makers with "a bit" of experience with PLDs, as it only provides a "minimum" set of peripherals to get the device going. Programming is done via a JTAG header, so an external Programming Cable is required.
My first take on the design outline for this board was:
- low per-unit cost
- small PCB size
- breakout of available I/O pins
- breadboard-compatible pin header spacing
- on-board clock source
- on-board 1.8V and 3.3V supply
- power supply via Micro-B socket or breadboard pin
- JTAG header for programming
Programmable Logic Device
The board features an XC2C32A CPLD from Xilinx. This part is available in a 5mm x 5mm QFN package, which sits nicely between the pin header rows on either side of the PCB. While the device may not fit a full softcore MCU, the amount of logic resources should be plenty for small projects.
On-Board I/O Peripherals
As the number of available I/O pins on the selected package is limited to only 21, the amount of fixed, on-board peripherals is limited to a reset button connected to the global reset input of the CPLD, an 8MHz clock source connected to the "global clock" (GCK) input 0, and a slower ~8kHz clock at GCK1.
The CPLD requires a core voltage of 1.8V and both I/O banks support a range of supply voltages up to 3.3V. Power supply sequencing is recommended, but can be omitted to reduce the assembly cost. Due to the supply requirements of the oscillators, I/O bank 1 will be connected to 3.3V permanently, while the I/O bank 2 supply can be configured via a jumper link. Power to the board can be supplied via either a Micro-B socket, or an external supply of up to 6V via a breadboard pin.
The board comes with an 8MHz oscillator attached to global clock input 0 (GCK0). To reduce the number of clock dividers taking up PLD resources, an external 10-stage clock divider IC provides a ~8kHz clock signal to GCK1.
The board provides a JTAG header for programming the CPLD. An external programming cable will be required for download, options being:
- Xilinx "DLC10" Platform Cable USB II
- Digilent XUP USB-JTAG Programming Cable
- Digilent JTAG-HS3 Programming Cable
- Low-Cost Platform Cable USB compatible programmers (DLC9G, DLC9LP, ...)
- Low-Cost USB to JTAG cables based on FTDI ICs (untested, may not work with Xilinx iMPACT)
- Home-brew, Arduino-based JTAG programmer
In addition, this board provides a 2mm pin header to connect both USB data lines to a future daughterboard (work in progress).
The XCtiny can be placed on a breadboard to connect peripherals for prototyping. The remaining GPIOs on both I/O banks are fanned out to .100" pin-pitch headers at either side of the PCB, with additional pins for powering the board with up to 6V via an external power supply. The CPLD I/Os are not 5V tolerant - see the CPLD I/O User Guide (Xilinx UG445).
To optimise the BOM cost, I looked up compatible, lower-cost alternatives distributed by LCSC. For the prototype shown in the picture gallery, I opted to use the more expensive primary parts from DigiKey. The PCBs were manufactured using JLCPCB's prototyping service.
|CPLD||Xilinx XC2C32A-6QFG32C (32QFN)||—|
|Micrel MIC5504-3.3YM5 (SOT-23)||NATLINEAR LN1134A332MR (SOT-23)|
|Micrel MIC5504-1.8YM5 (SOT-23)||NATLINEAR LN1134A182MR (SOT-23)|
|Micrel MIC5365-1.8YC5 (SOT-23)|
|SMC Diode Solutions DSS12U (SOD-123F)||SK B5817WL (SOD-123F)|
|ON Semiconductor BAT54HT1G (SOD-323)||Leshan Radio LBAT54HT1G (SOD-323)|
|Oscillator||Microchip DSC6001CI1A-008.0000 (3.2mm x 2.5mm DFN, [1a])||Seiko Epson Q33310F70055100 (3.2mm x 2.5mm DFN, [1b])|
|Clock Divider||Nexperia 74AHC1G4210GW (5-TSSOP, )||—|
|TVS||ON Semiconductor SD05T1G (single, SOD-323)||Leshan Radio LESD3Z5.0CMT1G (dual, SOD-323)|
|Ferrite||Samsung CIM21J202NE (0805)||TDK MPZ2012S102AT000 (0805)|
|USB Micro-B Conn.||Amphenol FCI 10118194-0001LF (Micro B, )||—|
|Push Button||C&K PTS645SL50SMTR92 LFS (SMT, SPST-NO, 6mm)||HYP 1TS005F-2500-5001 (SMD, SPST-NO, 6mm)|
|LED||Würth Elektronik 150080RS75000 (0502/2x1.25mm, Red)||Foshan NationStar Optoelectronics FC-2012HRK-620D (0805/2x1.25mm, Red)|
All Resources needed to get set up and running with the XCtiny board, as well as further design resources, will be available from our open GitHub repository:
Low-Cost Development Setup
For a low-cost setup for designing and programming logic circuits on the XCtiny, consider using:
- Xilinx ISE Design Suite 14.7 with a WebPack license (free, with certain limitations)
- XCtiny board with an XC2C32A CPLD (assembled price tbd)
- Platform Cable USB compatible programmer "DLC9LP" (~$25)
- Make sure it comes with a USB lead, and an adapter to connect dupont/jump wires.
- USB A to USB Micro-B cable for 5V power (~$5 ?)