KiCad – More complex boards, our experiment with Spartan6 CSG225

Quandary Spartan Board 6 Layout

Its been almost a year since we completely switched to KiCad. It was a great experience working with KiCad. No schematic page limits, no board size limits, built in online DRC and what not. The online DRC feature itself making the switch worth because we are completely out the DRC->FIX ERROR->DRC… cycle in Eagle. Yeh, you can mitigate this with Eagle by using properly selected grid size, but still not as useful as online DRC. I must say, learning KiCad and making the switch (not just me, the whole company) was really really worth it. Now looking back, I can find no trace of regret in my mind doing this. If you are thinking about giving KiCad a try, go for it. It will be time well spent, and you’ll never regret it (provided you can get past the initial trouble of learning a completely new tool).

Ok, let’s get back to the original subject, our experiment with Spartan6 CSG225. Its been a long time since we designed Elbert, Spartan 3A based FPGA development platform . We sold many hundreds of Elbert boards and it was one of our very successful products. 50K Spartan 3A is an entry level FPGA best suited for small projects and learning purposes. The most frequently asked question by customers was when Numato is going to come up with a larger FPGA for some serious projects. Well, designing Elbert was an easy learning curve for us. But as we go to bigger FPGAs, it can get more difficult. Board design gets complex, more external interfaces, SDRAM et… So we decided to settle on the middle ground with Spartan 6 which is the next level to Spartan 3 series in terms of power and functionality but similar complexity levels.

After a few rounds of discussion, the product feature set is finalized, Spartan 6 FPGA + PIC32 Micro + SDRAM. We decided to make it in a module form factor rather than a development form factor. This way, we could still make a development board using this module or users can design their own custom boards to use the module.

We put together the schematic and design a 6 layer board using KiCad and Freerouting tool. We could get away with 4 layers if blind/buried vias used. But the PCB house we originally planned to work with didn’t support blind/buried vias. PIC32 interface with FPGA was straight forward with no necessity for length matching. At these short trace lengths, it probably wasn’t critical that the SDRAM traces are length matched. But out of our peak of paranoia, we went for length matching. As you know, KiCad doesn’t support length matching but it will let you export the board to work with Freerouting tool. Freerouting supports length matching but it wasn’t easy to figure out how to do it due to lack of documentation (may be documentation existed but we couldn’t find it). Anyway we figured out how to do it (May be worth writing a tutorial on this) and once got used to it, length matching was fairly easy.

Another biggest challenge was finding a FPGA package that we can work with. After searching for a while we came to the conclusion that we are not going to find a part that is non-BGA and fit all our requirements (Gate count, Hardware SDRAM controller etc…). Finally we ended up choosing Spartan6 LX9 which is available only in BGA packages. CSG225 was the only package available with our vendor (Digikey) at that time. So we had to choose 225 ball BGA even though our experience with working BGA was very limited.

After a couple weeks worth waiting, we received the boards and our hardware folks were able to solder the BGA chip very successfully using a toaster oven and a pair of tweezers with the help of a microscope . To tell you the truth, even I was amazed that they did do it right at the first time. Kudos to the team!!