Hierarchical or not - bringing multiple PCBs into a single project

Up till now, for each PCB, I’ve had an entirely different project. However, it seems impractical so I’ve looked at using the hierarchical feature where there is just one level and a “master” sheet which groups all the different schematics / PCBs under a single project.

I have one PCB per schematic so that’s quite simple.

However, I’ve realised that the component reference’s scope is project-wide and not just schematic. When I try to run a netlist now, it complains as I have multiple components with the same descriptor, like R1, R2, etc.

I thought this wouldn’t be a problem as the delimiter as far as I’m concerned is a PCB.

So the question is: can I keep my existing annotation (I spent time creating a logical pattern to it), or do I have to blank EVERYTHING and effectively start all over again with the numbering, doing one sheet at a time?

2 Likes

Just to add a few pictures as an example:

My “Master” sheet:

Each of those rectangles is a schematic which has a single associated PCB with it.

I can go into each sheet without any problem:

But as soon as I try to annotate, I get this error:

Hi @xavierw
someone @eevblog suggested to use this approach as in Altium

Thanks @maui, I think that’s what I have effectively tried.

The XavPreAmp.sch is the master schematic (with no PCB). The others are child schematics each with their corresponding PCBs.

But I have that conflict.

Although there may be a very valid use case which I just can’t see, I think that KiCad just is not set up to handle multiple projects within a single “workspace”. Trying to bend it to do so just leads to problems.

It seems a lot simpler to use your computers file-system to create a parent folder for groups of related projects.

1 Like

For a test… copy the whole folder (as backup) as we need to modify/delete some stuff to test this.

  • Is each h-sheet in the master sheet a single sheet or are there more h-sheets in there yet?
  • What happens after the warning message - does the annotation dialog come up or not?
  • Can you open the sheets in the ‘sub’-projects (FrontPanel.pro for example should be able to open and annotate without warning the FrontPanel.sch file)?
  • If that works, are those annotated already?
  • Would you be so kind and clear the annotation in each of them and save that? (might destroy links to any layout you got, unless the timestamp stuff works)
  • What happens now when you reload the master project and start annotation dialog again?

@bobc
The merit of this might be that you got a single .sch file that you can navigate easily within EEschema while you’re doing circuit design.
After that one has to stay with a single pcb anyway for layout and needs to load/reload all the sub-projects to do anything and will loose that capability.

1 Like

Thanks @Joan_Sparky, I’ll give it a go and report back. A bit busy with other stuff this morning.

I just run several copies of KiCad to look at different projects. This is easier with v4 then previous versions.

I can see that if you have multiple boards in a project that have connections, then you might want to have access to several at once. But usually, once I have defined a connector, I then design each PCB separately.

Having an easy way to copy and paste projects between projects would be the one thing I would like, but that needs a different solution.

2 Likes

Hi @Joan_Sparky,
Answering your questions:

  • There’s just one level down. No sheet is nested in another apart from the top master one which doesn’t have any components, just links to individual sub sheets.
  • After the error message, the annotation dialog does not come up. It just returns to viewing the schematic.
  • Hmm. If I open another .pro project file, for example the FrontPanel.pro, then it still lists all the other sub sheets and the master XavPreAmp files as well: it lists everything it finds in the directory.
  • Clearing the annotation and starting again makes for some interesting results! It annotates the sheet correctly, starts at 1 for each component type, all looks OK. However, when I then run CvPcb, it is very confused at it lists all the components of all the schematics in the project, not just the one I have open. Selecting a component that appears on a different schematic then brings up this other schematic and goes to it.

At this point, I realise I might have misunderstood what is meant by “schematic”. I thought it was a single sheet that might have had several pages, but essentially a single physical file. It appears this isn’t the case as the annotation annotates all the components across all the different physical files contained within the project’s directory. If I do “current page only”, then I cannot run CvPcb: it insists on setting the scope to entire schematic.

Whilst redoing everything fixes the problem, it’s what I’d like to avoid as I had created a logical numbering for each of my PCBs which effectively are now completely different.

I have a feeling that if I want multiple PCBs each with their own independent numbering, then I have to keep them in seperate KiCad projects. It’s just a pain when it would be convenient to have commun nets, labelling, etc, across multiple PCBs…

Hm, I thought CvPcb was only relying and working on the .sch file, not on something like the .net file. Interesting.
If you can, try to delete the .net file(s) in that master project folder and try that FrontPanel.pro with it’s .sch file again and see what CvPcb is telling you then.
And/or copy just the FrontPanel stuff into a separate folder to test what it does there when you open it and run CvPcb.

From my POV it should be possible to do what you want, one just needs to be very careful what to do for the master and sub-projects in regards to annotation and net-list generation.
In the end for me it wouldn’t be worth it - got enough trouble keeping track of sub-pcbs in a panel in a single project already :wink:

Nope, it gets worse :stuck_out_tongue:

I don’t have any saved netlists. I’ve just deleted all the pro files apart from the master one.

When I go to annotate within a sch sheet, it still then appears to annotate all the other sheets and CvPcb still has designators and numbers for all the other sheets in the same directory.

However, I’ve just noticed that the individual schematic files do not appear in the Project “file browser” window in KiCad:

Yet the files are of course there. When I open the XavPreAmp.sch file in Eeschema, and then click on one of the sub-sheets, it opens up so the file link is there, just not shown in the project browser window thingy.

That is normal… check the master .sch file (or any .sch file with an hierarchical sheet in it) in a text editor.
Example:

...
$Sheet
S 3200 9275 1200 1325
U 56E58D2F
F0 "ATmega328" 60
F1 "ATmega328.sch" 60
F2 "I2C_SDA" B L 3200 10300 50 
F3 "I2C_SCL" B L 3200 10450 50 
F4 "RS232_RX" B R 4400 10450 50 
F5 "RS232_TX" B R 4400 10300 50 
F6 "Vsupply" B L 3200 9350 50 
$EndSheet
...

You don’t need a project file for this to work, it’s in the .sch files.
The project file contains the settings for the symbol libraries (probably going to change sometime in the future) and some editor settings for a full session of KiCAD.

Now…

No wonder, you’re still in the master project.
To affect a sub-project you have to load only that one… for example FrontPanel.pro. If you then open EEschema (no matter what the KiCAD main window file tree shows) it should only load the FrontPanel.sch - if it doesn’t, something in your setup is very wrong. Im 99% certain of that.

But you already mentioned that you don’t want to have the annotation managed by the master project (which is the only way to get CvPcb and Netlist on board), so it doesn’t look like you can use this anyway.

1 Like

OK, so it appears that I cannot do what I hope was possible: have project-wide net labels and organising so I can archive a project and it will archive / group all the different PCBs required but still have each PCB and its associated schematic with its own unique numbering.

Looks like I’ll just have to stick to different independent projects if local designator numbering logic is more important to me than the other stuff.

2 Likes

I’m not sure if this solves the problems you are having but have you tried the append feature in PCBNew? If you open it manually, not within KiCAD’s application launcher, you have a new menu options for appending things to your PCB.

So, if you start with two separate KiCAD projects with the end product being two different PCB designs, you can then close everything, open PCBNew manually and bring both PCB designs into a third PCB design using the append menu command - its just like you’d imagine panelization working. I did this to nest two boards together with dead space in one that would have wasted money.

Here’s a link to the results of what I did. Hope I didn’t completely miss the boat here on what you were trying to do.