KiCad PCB design software

The PCB design software is the heart of the engineering process. All the PCBs will be designed with this software. The ease of use will determine how fast you can design a PCB. In this topic we will have a look at KiCad. This PCB design software stands out above all others, because it is free and open source. Note that this evaluation is done using version 5.1.8 (stable release, Nov 5, 2020).

In order to test KiCad we designed a Xilinx Spartan 6 development board. This board is a 6 layer board with a BGA. This gives us the possibility to test various features of KiCad. The KiCad design files are available for download at the bottom of this article.

Drawing the schematics

For this showcase, we only used components from the KiCad libraries. KiCad comes with an extensive library. This makes it easy to get started. Drawing a schematic is very straight forward. Once you get the hang of it, adding and moving symbols, adding and moving wires, moving blocks is all very easy to do. Adding a bus is also pretty straight forward. But when connecting signals to the bus, it is not always very clear what the orientation of the bus entry is. We solved this by first placing the bus entry next to the bus, then make sure the orientation is correct and move the entry on the bus.

The design can be split up into multiple sheets. You can create a true hierarchical design. On your first sheet you can draw blocks and connect the blocks to other sheets. Every sheet is a new file. You can connect multiple blocks to the same sheet and make multiple instances of a circuit. You can connect signals between blocks very easy. Passing a bus from one sheet to another, is not always working as expected. It only works if you apply a specific naming convention for the signals and the bus name. If you deviate from that, and it is likely you will, it will not work. The only thing you can do then is using global labels.

For our development board we ended up with 6 sheets: the block diagram, the power supplies, the FPGA power supplies, the FPGA IO banks, the IO connectors and the USB JTAG interface.

Schematics of the Xilinx dev board
Figure 1: an overview of the schematics of the Xilinx Spartan 6 development board.

Symbol editor (library)

We did not create our own symbols for this project, but we did try the symbol editor. It is all very straight forward. You start by creating a library. Then you can copy existing symbols into your library and modify them or create new ones from scratch. You can create multi gate symbols, like a quad NAND gate (74LS00). It is all pretty easy to do. You can add custom fields to a symbol. Those custom fields can be included in your BOM. You can assign a footprint to the symbol, a footprint filter in case more than one footprint can apply, or leave it blank and select a specific footprint later. You can add a link to a website or a datasheet, that can be opened from the schematic editor.

Drawing the PCB

After drawing the schematics, we do an annotation of the symbols and assign footprints to the symbols. This is all done in the schematic editor. When that is done, we launch the PCB editor. With one click on a button the footprints and netlist are added to the PCB. When an update of the design is needed, simply update the schematic, and use the same button to update the PCB.

The PCB editor is easy to use. The tracks are routed on grid. But it snaps to pads or other tracks, even if they are off grid. The snapping makes the routing a pleasant experience. When routing tracks, there is no room for errors, you cannot route tracks or place vias when the clearance does not allow it.

When moving footprints, it is possible to make errors. You can easily put footprints on top of tracks or other footprints. Also it does not show if there is an error when moving footprints too close or on top of other objects. This would be a point for improvement. There is an easy work around, after moving footprints, just do a design rule check to see if any footprints have errors.

When placing a via in a multi layer design, you cannot select the next layer when placing a via. For example: if you start at the top layer and want to continue on inner layer 3, you start a track on the top layer, and then place a via. After placing a via, you continue routing on a predefined layer. You cannot select the layer where you want to continue when placing the via. The layer pairs can be setup before routing the track. We think it might be more convenient to select the layer when placing the via.

The PCB editor also supports differential tracks and tuning of the length of the tracks for high speed applications. Next to that there are also microwave functions available for high frequency designs.

For BGAs (or other packages) there is no special feature to create fan-outs. We ended up in placing a fan-out on one pin and then copy and paste it to the next pin.

You can also add extra footprints like mounting holes or fiducials in the PCB editor. After adding them, you should lock them, otherwise when updating the PCB from the schematics, they may be removed because they are not in the schematics. If they are locked, they will not be removed by an update. Also the mounting holes can be easily connected to ground plane in the PCB editor. No need to put them in your schematic to create a connection to ground.

Our design ended up with 6 layers: a signal layer, a ground plane, a power plane, a signal layer, a ground plane and a signal layer. We placed most of the components on the top layer, except for the decoupling capacitors of the FPGA, we placed them at the bottom side.

PCB Xilinx dev board
Figure 2: an overview of the PCB design. The ground layers are not included.

Footprint editor (library)

We did not create our own footprints for this project, but we did try the footprint editor. It is all very straight forward. Same as in the symbol library editor you start by creating a library. Then you can copy existing footprints to your library and modify them or create new ones from scratch. Pad definitions are stored in the footprint and cannot be reused between footprints. We don’t see that as a big issue. It is possible to have multiple pads with the same number in one footprint. This is convenient for components that have multiple ground pins. Then all those pins can have the same number and will automatically be connected to each other. The schematic symbol then only has one pin for all those pads.

The main difference between the symbol library and the footprint library is that the symbol library is one single file, containing all the symbols and the footprint library is a folder where each each footprint is stored in its own file. The latter is convenient if you want to make footprints available for other people. You simply send them the footprint files. This can not be done for symbols. Then you need to copy the symbol to a new library and send the library file.

3D viewer

KiCad comes with a 3D viewer. When setup correctly, you can see the PCB with the components in 3D. This requires that every footprint is linked to a 3D model. A lot of models are already available and linked to the footprints. If a model is not available you can add your own 3D model. Many manufacturers provide 3D models of components these days. They can also be used.

The PCB including the components can be exported as a 3D model from the PCB editor (not from the 3D viewer). This model can be read by many mechanical design tools. This makes it possible to evaluate the PCB including the components with the mechanics, for example an enclosure.

Another application of the 3D output is to use it in KiCad. Let’s say you have two PCBs that are stacked on each other, you can export the first PCB including the components to a 3D model and then create a footprint for the PCB. Then link the 3D model to that footprint. Then you can place the footprint of the PCB into the design of the second PCB and then you have a 3D model with two PCBs. This can be a very powerful feature for designing complex projects with multiple PCBs linked together.

Figure 3: 3D view of the PCB with the components.

Manufacturing output

For manufacturing the PCB all necessary outputs can be generated from KiCad. Most files are generated from the PCB editor (gerber files, drill files, placement file). For all outputs, many options are available (file formats, number representation, layer selection, etc).

Another type of manufacturing output is ODB. This is a database file that contains all specifications of the PCB and the components. It is all put in one file. More and more manufacturers are working with this file. Unfortunately ODB is not supported by KiCad.

The bill of materials (BOM) is generated from the schematics. Generating a BOM is done by running a Python script. Python is a programming language for creating scripts (and more). You can use the provided scripts or you can use one of your own scripts to generate the BOM. There is no dialog for setting up and creating a BOM (there was a dialog in the past). This is a bit of a downside, because you will always depend on Python scripts. And not everybody knows how to program in Python. For us it was no problem to create a script and make it work. We have a lot of experience with Python.


KiCad is supported by a large community and if you run into an issue, there is always someone on a forum who can provide a solution. Since the community is bases on volunteers, there is no real support help desk or big development team, that is rapidly implementing new features. Nevertheless at this moment a group of developers are making regular updates on version 5 and they are working to KiCad version 6 with a lot of new features.


A quick overview of all the pros and cons we found so far.


  • Free and open source
  • No limits (except only 32 copper layers)
  • Electrical rule check in the schematics editor
  • True hierarchical schematics editor
  • Generate BOM using a script
  • Extensive libraries of symbols, footprints and 3D models out of the box
  • Error free routing and placing vias
  • Support for differential pairs and tune track length
  • Complete manufacturing output
  • Large community


  • When adding a bus entry, the orientation is not clear
  • Bus in hierarchy not always works as expected
  • Creating a script for generating a BOM, requires learning a programming language (Python)
  • Moving components in PCB editor has no error checking
  • When placing a via, we cannot select the layer on which we want to continue
  • No ODB manufacturing output

KiCad has grown into professional PCB design software. KiCad performs very well and we did not stumble upon any serious bugs.

For us KiCad is good enough to use it in our daily PCB designs and with the bonus that we don’t need to pay any license fees.


KiCad design files of the Xilinx Spartan 6 development board (92 downloads)

Disclaimer: these downloads are provided as is and we cannot guarantee that it is free of bugs. We can not be held liable for any damage caused by using these files.

Leave a Comment

Your email address will not be published.