KiCad - More complex boards, our experiment with Spartan6 CSG225

Printer-friendly versionSend to friendPDF version

Note: For those who likes to get a free PCB please place the order at for free. Sorry guys, we ran out of free boards.


Spartan6 PIC32 FPGA Module

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!!



We are still playing with the board trying to configure the FPGA and bring up SDRAM interface. We are only partially successful so far so don't know if and when we will start selling this. If anyone wants to get their hands on a bare board, please contact our sales team . They will be more than happy to send you one for free (only limited number of boards available though).

Here are some pictures of the board.








May i inquiry about the max

May i inquiry about the max freq you used to read / write sdram data in this project? I mean fpga config only, not fpga - pic throughput.

Very nice stuff! Can give us

Very nice stuff!

Can give us some clues with the length matching... I have tried the Freerouter and have been playing with the Net Classes / min. length & max. length. This seems to be the key to do length matching. I also found that this works only in interactive manual routing mode. Nevertheless I was not able to do length matching - is there any other magic?
Thank you

Re:Very nice stuff! Can give us

As you mentioned, you need to create net classes with min and max length and assign those classes to nets. Then start routing manually. As you route, a green circle will appear and it will keep shrinking as the length of the trace gets closer and closer to the target length. We will make a video on this topic very soon. Please stay in touch with our YouTube channel.

Nice work there!

I'm working on laying out a Spartan 6 in a TQG144 right now, its 0.5mm pitch. So tiny! Your vias look great, and I noticed you broke out the second rows on the top layer also. Can you tell me what drill / PTH layer stack you used? What are those trace widths under the package?

0201 caps under the part? Nice, don't tell me you did those by hand too?!

It's amazing looking at these parts up close in layout, then see them on the boards.

Does Kicad have any plug-in or support for IBIS driven signal integrity?

Re:Nice work there!

We used 5mil/4mil trace width/clearance and 8mil/16mil drill/via dia. We had to break out two rows on the top and one of the inner layers as well just so we can avoid blind/buried vias.

Yes, those 0201 caps are hand soldered, with the help of a magnifier and microscope.

TO my knowledge, KiCad supports no mechanism to do signal integrity. In my opinion, that is where any serious EDA user will hit the brick wall with KiCad.


Is there going to be documentation for those of us that received a board and would like to get parts to assemble it?


Yes. We are planning to share the designs and BOMs as well in next few days.


Nice stuff!

I would like to note that "Spartan6 LX9 which is available only in BGA packages" is not quite correct though. Looking on Digikey, it does existing in TQFP 144 package. See part number XC6SLX9-3TQG144C


If I remember right those ones doesn't have hardware memory controllers. Hardware memory controller was a requirement for this project.