For PCB design I use the open-source schematic and PCB design software KiCad. Its a great program and has gotten a lot better recently. It is unlimited in size, components and number of layers and has lots of the features of very expensive professional PCB layout software.

There are times when having just one schematic sheet is not enough space. Also it is useful to break apart the schematic to keep a nice structure and order to the design. This is a post on having multiple sheets within the schematic using KiCad, which is called “hierarchical sheets”. These are my notes on doing this and any problems encountered.

Please note: This page was originally written in 2014. There have been large changes to KiCad in that time. I have updated Jan 2024 using KiCad 6.0.

Originally (2014): I found this tutorial: http://uhaweb.hartford.edu/kmhill/suppnotes/KiCadDia/KiCadHierarchy01/KiCadHierarchy01.pdf  which was exactly what I needed and guides you through the process of creating a multiple page schematic with hierarchy. There is also some information (but not a whole tutorial) here: http://en.wikibooks.org/wiki/Kicad/eeschema/Hierarchical_Sheets

Updated (2024): For KiCad 6 you can find information in the documentation here: https://docs.kicad.org/6.0/en/eeschema/eeschema.html 

Here are some screen shots and notes for a simple project with hierarchical sheets. Firstly, in your KiCad project, click on place and then “Add Sheet”:

Left-click to set the top left hand corner of the sheet box. Move the cursor and a box will appear – this is your new sheet. Left-click to set the lower right corner of the box. You can easily re-size the box if you need to in the future.

When you right click to define the size of your sheet box, then a pop-up will appear. This is where you might want to name your sheet. I try to use descriptive titles. So the the sheet name I chose “test_sheet”, good, eh?

Now we have the sheet set up on our top-level page we can “Enter Sheet” to view the schematic within. Right-click on the sheet block and then left-click “Enter Sheet”.

You are now within your lower-level sheet. You can draw your schematic here, exactly as you would for any schematic. I am showing a simple resistor/LED network.

We now want to add our Hierarchical Labels – these allow us to connect from the high level sheet to the lower level sheet. We go to the “Place” menu and choose “Add Hierarchical Label”.

This will bring up a pop-up box where we can define the label. Give it a name (I try not to use spaces, but not sure it matters). You can also define its ‘Shape’ which is the shape of the arrow on the higher level sheet (either an arrow in or out). This is only for the shape – it will just make a wire connection, so does not matter if you don’t get input/output correct (although try and get it right, as it will be confusing later). Here I name one pin “LED_GND” and it is an Input.

Click OK and it will then appear linked to your cursor. Move it to the correct place (or place it on your sheet and wire it up later)

Do this for all your input and outputs to higher level sheets. I added another called “LED_PWR”:

So now we have our sub sheet as a drawn schematic with pins for the input and outputs.

At the moment the Sheet name is “test_sheet” but this links to the schematic file “untitled”, which is not so useful. I use descriptive names for the lower level sheets. Click on “File” -> “Save Current Sheet Copy As”

Then save your sheet as any name you would like. I chose “LED_subsheet” as its an LED. You also need to link the higher level box to this sheet. So leave the sheet and go to the higher level. Do this by left-click on the sheet to get the options and then right-click on “Leave Sheet”

This will take us to the higher level sheet. With the cursor, right-click on the sheet block. It will turn blue. If you press “e” on your keyboard you will enter edit mode (I cant find how to do this any other way). The pop-up box below will appear. You can then click the small ‘folder’ icon next to the “Sheet File”. This will bring up a navigation box which you can then navigate to the subsheet name we saved it as previously. In this case it is “LED_subsheet”. Then click open.

Now our sheet is linked with the schematic we have drawn. But how do we wire to the schematic in the sheet? We need to ‘import’ the hierarchical pins from the lower level schematic into our sheet box. We can then wire to them as if the whole lower level schematic was a component.

Make sure you are in the higher level schematic. Right click on the sheet block to bring up the menu and then click on “Import Sheet Pin”.

This will bring in the first of your labels your defined on the lower level sheet. So “LED_GND” first.

You will have the name linked to your cursor, but also hugging the side of the box. You can move it around the edge of the box and place it where you would like. Do this for ALL the pins you have defined. Keep going until a pop-up says “No New Hierarchical Labels Found” (or something like that).

In our case it’s just two pins. You can then wire up components and wires to the schematic, just like you would to another component.

If you want to go back into the lower-level schematic then right click on the box and then click “Enter Sheet”. If you want to re-size the sheet box then right click on the box so it is highlighted blue. You can then move the black box points to wherever you would like.

You can also move the pins around on the box. Right click on the sheet pin and then left click on “Move”. You can then move the pin label around the box. This will break the wire connection if you have made one, so just double check that.

You can also re-name the pins in the lower-level sheet. Enter the sheet and right click on the Hierarchical Label. If you then press “e” on the keyboard then you can edit the parameters. You can change input/output and the name.

If you do change the name then you MUST import the pin back onto the higher level sheet. Go to the higher level sheet and right click on the block. Choose “Clean Up Sheet Pins” and then OK. This will remove any pins that are not associated with the lower level sheet. You can then import the new pins until there are no more to import.

Using Hierarchical Sheets is a great way to organise my larger schematics and works very well. Please follow the tutorial linked at the beginning of this post, as that was most helpful to me. You do have to be careful with names of labels, but as long as you are logical then this is not so difficult. When you create the Netlist and the board, then double check that everything you think is connected IS actually connected.

This just makes me like KiCAD even more…

8 responses to “Multiple Sheet Schematics in KiCAD

  1. Hi!..
    I created multiple schematic sheets and in the end I tried to annotate all the components but the numbers are overlapping i.e., I am getting multiple reference after annotating!..
    Can I know the solution please?

    1. Try selecting “Reset Existing Annotation” on the “Annotate Schematic” dialog.

      Also do the annotation from the root schematic.

  2. Hi.

    Thanks for the tutorial.
    Now that I have created the schematics, is there any way to generate the netlist in this organized way?

    I mean, any manner of avoiding the huge amount of components overlapped in the PCB new and doing a modular routing.

    Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *