So I've finally been able to build my MAX7000S 5V CPLD breakout board. In theory it should have worked but I couldn't initialize the JTAG chain so it failed.Thought I would share my observations in that it may be of benefit to beginners like me.After staring at the PCB layout I realized I made the following stupid mistakes:
- It's a 4 layer board with an internal GND and PWR (5V) plane. No need to have copper pours connected to GND on the top and bottom signal layers. In fact it complicates the return path. A 2 layer board would have been easier but space constraints made routing power traces impossible.
- A 50mhz clock made me realize how lazy I have been with regard to PCB design in a <10mhz domain. At 50mhz effects of thin traces, length and how they are placed start to become an issue. I didn't take into account parasitic inductance, capacitance etc. Datasheets for some of the specialized components I used (like an ideal diode) have recommended layouts for traces. It's best to follow this.
- The bypass capacitors for the CPLD are on the opposite side of the board and do not directly connect to the VCC and GND pins on the CPLD. Instead there is a VCC via between the cap and the pin that creates a path through layer 3 which is connected to the VCC net. The result is significant switching noise being injected onto the power net in the form of ground bounce and voltage droop. I'll send an image later from my scope but it shows a significant ringing oscillation which is clearly ground bounce. Also, it was also stupid of me to route signal traces directly underneath the oscillator can.
- Not carefully checking the footprints for components. The KiCad library symbol I used for the voltage regulator had the pins assigned incorrectly. End result was that VCC and GND were swapped. Hence the blue smoke.
- On one side of the CPLD, the VCC and GND pins are adjacent. I should have routed the power traces in opposite directions. Instead the were routed in such a way that there was a major solder bridge that took a dental pick to remove
- For the copper pours I didn't use thermal reliefs for the TH parts. Soldering the pins connected to GND became a nightmare since the whole board acted a heatsink. Removing solder was not easy.
- The board is 900 mils wide so it will fit on a standard breadboard with 1 column on either side to spare. Not ideal but best I could do. However I had too much margin between the edge cuts and pins. I ended up having to sand the sides down so I could have room to fit the dupont wires.
- Turns out that using half-pitch 50mils (1.27mm) header pins for jumpers was a bad idea. Had to use tweezers and high magnification to place the jumpers. Also separating them from the header strip was frustrating. New design will use a 4 position DIP switch.
- This is the most important bit. I didn't prototype the schematic. If I had breadboarded the GPIO section I would have realized it had a major flaw. In the last image I intended for the LED to be controlled by 2 CPLD pins. Obviously the pins should be on the buffer input and LEDs on output. The result was that due to a soldering error I was directly pushing 150mA (the current limit set on the power supply) directly into a pin that can only sink 25mA max. So those 2 pins are toast... literally...
So I've finally been able to build my MAX7000S 5V CPLD breakout board. In theory it should have worked but I couldn't initialize the JTAG chain so it failed.Thought I would share my observations in that it may be of benefit to beginners like me.After staring at the PCB layout I realized I made the following stupid mistakes:
- It's a 4 layer board with an internal GND and PWR (5V) plane. No need to have copper pours connected to GND on the top and bottom signal layers. In fact it complicates the return path.
This is the most important bit. I didn't prototype the schematic. If I had breadboarded the GPIO section I would have realized it had a major flaw. In the last image I intended for the LED to be controlled by 2 CPLD pins. Obviously the pins should be on the buffer input and LEDs on output. The result was that due to a soldering error I was directly pushing 150mA (the current limit set on the power supply) directly into a pin that can only sink 25mA max. So those 2 pins are toast... literally...