Components, Schematic Symbols and PCB footprints

I am new to KiCAD, because I like to have a Linux open-source design environment. My current tool is Pulsonix and it only works under MSWindows.
KiCAD is great, but as far as I can see now there is an issue with the hierarchical structure of components, There is no distinction between a schematic symbol and a component (like in Pulsonix). This has lots of disadvantages. Important consequences are:

  1. Pin numbers of schematic symbols are identical to those of the PCB footprint
  2. You need another schematic symbol if the pin layout of the PCB footprint is different
  3. Pin swapping and gate swapping becomes more complicated.
    I think it would be better to create a component by assigning schematic symbols (similar or different gates) to a PCB footprint and mapping schematic symbol pins onto the pins of the PCB footprint.
    Is the KiCAD team open to a discussion about this?

Hello and welcome @Anton_Montagne

I had difficulty understanding your post until I watched a couple of Pulsonix “how to” videos.

Pulsonix selection starts with the component (data sheet) followed by the footprint and lastly the symbol.
Kicad selection starts with the symbol and is followed by the footprint and data sheet.

The end result seems to be the same for both products: you have a component with a matching symbol and footprint.

This has been discussed before and I think they’re open to this idea, but it would probably require huge changes both in the code and also in the default KiCad library, so I don’t see this change soon.

So essentially, just saying “I wish KiCad was more like …” won’t really be helpful. Ideally you create a proposal how exactly KiCad would be changed and how compatibility would be handled and how the user interface would look and so on, and then discuss that with the lead developers and then ideally you’d help with the implementation.

Or you could switch to how KiCad currently does it, which is probably more sensible for now. Essentially a symbol is already a component and defines the pin assignment and so on. So you don’t need things as pin/gate swapping, you simply replace the symbol.

1 Like

Dear JMK,

Thank you for your answer. I will rephrase this in a better way, considering the remark from Jonathan below.

Dear Jonathan,
Thank you for your answer, I will try to rephrase and present a solution at a later stage. For now, I will of course accept the way things work in KiCAD.

Well, after using Altium Designer, Mentor Graphics DxDesigner/Expedition, Cadence Concept/Allegro/OrCAD, Zuken CADSTAR, WestDev Pulsonix, CadSoft EAGLE and KiCad I can attest that Pulsonix has the best library methodology among them.

The advantages you’ve described come from the fact that Pulsonix has a notion of “part” whilst most of the other ECAD tools either don’t have it or have a limited implementation of it.

My ideal library system is described here: https://docs.google.com/document/d/1XeZhEkoAvaRxvdhkERgBn7fWumktTpZoiKBsEUGfBH4/edit#heading=h.f6gniupf4hei

Personally, I prefer the Kicad approach, however I realize I’m in the minority as I design in the schematic module. So, for me any resistor is the symbol for a resistor.

Would be nice if gate swapping were easier in the PCB module.

Just an observation:
When we were having our PCB’s designed outside, the designer we worked with used Mentor graphics. They would create a library for every job making the footprint from our supplied datasheets. I don’t know if this is a normal procedure however it was done to eliminate footprint issues.

Dear JonhnRob,

Maybe a resistor is not the best example. Consider a NAND gate or OpAmp symbol, you can have devices with multiple opamps in one package combined with another function like a power supply. The symbol can also be used for many components and instead of linking components to a symbol definition, it makes more sense to me to link symbols and footprints to components.

The downside of the one component -symbol -footprint -3Dmodel approach is library file size
The KiCad approach is almost the most effficient (footprints one file vs a directory of them would be smaller and faster) and still is almost 1 GB compressed

I don’t understand what you mean with: “One component -symbol -footprint -3Dmodel approach”.
It is definitely not so that each component has its own symbol file and footprint file.
Consider a minimum collection of symbol files, footprint files, and 3D model files. A component has only component-specific data, such as its name and reference ID that can be linked to distributer data. The rest contains links to the symbol library, the footprint library, the 3D model library, and a mapping between pins of gates (symbols) and pins of the package. I can’t imagine it can be much smaller!

For me this still is not efficient but I see it depends on where you are starting from.
When I’m designing I have yet to choose a most components. Yes if my design uses a special device. In the op-amp example, I would find any op-amp in the library and drop it on the schematic. Then further into the design I might pick a single, dual or quad op-amp. I might know it needs to have a low input offset … etc.

When we were having our designs outsourced, I would use a schematic only program “TinyCad”. It would allow me to do anything I wanted. At the end of course I would have to reconcile parts to the schematic.

Before Kicad I tried Eagle. I couldn’t get by the need to specify a component when placing it in the schematic.

So, what makes sense depends on where you are approaching the project from.

I understand your point however, I don’t see library size as a consideration. I value anything that helps me not make a mistake and makes my life easier. Harddrive or SSD space is easy to come by. Even USB drives are 8GB and up if you want to purchase a brand name device.

For me the days of worrying about overfilling my mass storage long gone.

This is a very interesting discussion. The KiCAD symbol library is very problematic.
It tries to be everything to all users (including datasheet link, footprint, package etc.), but in doing that ends up as 50% useless.
I mulled this and decided that the symbol library is just that: symbols.

I’ve created my own libraries to reflect this, containing just the symbol information (I attach a couple of examples).

My workflow is:
1: functional design (mostly paper sketching)
2: schematic layout (using bare symbols)
3: selecting appropriate devices and replacing bare symbols accordingly (eg, transistor pinout)
4: simulating after adding spice models
5: repeat 2/3/4 if needed

For the PCB design, select footprints for each symbol in the schematic.

Now, this approach is “symbol-centric” and works for discretes, standard logic, standard analog etc. It doesn’t work for specialized ICs and other such stuff, but it fixes 80% of the issues.

As an example: my 74xx library only contains 74HCxx parts that are available. All others have been pruned.
Why? because 74HCxx is the basic logic family. Almost all other parts (74AHCxx etc.) can be derived by renaming a 74HCxx part. No one would use 74LSxx parts today.

Just my way of doing things. Hope it’s not TL&DR.
0_74xxx1Gyy.kicad_sym (91.6 KB)
0_Transistor_BJT.kicad_sym (61.0 KB)

It tries to be everything to all users

Is this terribly bad? Until the result becomes detrimental to most users, trying to accommodate different workflows would seem to be a good idea.

I don’t think what seems to be a very rigid approach would work for me.

I have symbols that are absolutely tied to a specific device. For instance, a Max31856. And although I could use a more generic footprint I prefer to create / copy one for this device. So, this device is linked to the footprint and package. It can (should) never change.

I never include the datasheet link unless it is in my personal library. Internet links are useless to me.
But I have added other fields that are useful for a specific part.

You missed this part. Apparently the post was too long.

I think that you are describing a variation of what some call database driven design. Each component (with a house number) then has a symbol, footprint and 3D model assigned, along with data and purchasing information.
This keeps the file sizes sane, but does mean a custom database to be maintained. It is the way that I have worked in the past.

I brought this down from the OP.
About 1… True with Kicad, true with Pulsonics.
About 2… Only if you have selected the wrong symbol in the first place.
Eg an AA51880 component is available as AA51880F (SSOP 16L package) or AA51880L (DIP 14L package). When designing, after selecting a part to do a job (ref.books, internet, whatever), consideration as to whether TH or SM must be decided. This means selecting the right component with the right symbol with the right footprint. There is no other way. This is all determined by initial research into data sheets. You won’t find the right product (to do the job) in either the Kicad symbols OR the Pulsonics components. Next, you’re ready to marry the three items together and start drawing.
Does it really matter in which order the three are married? This seems to be the topic in question.
About 3… Pin and gate swapping can only be finalized when routing the PCB. Then it is a matter of shuffling back and forth between the Schema. and the PCB to get it “right”. Kicad updates both ways, I don’t know about Pulsonics, but at best it would work in a similar fashion.

Those Nand, OpAmp and power supply symbols are all parts of the one package. Any part package also has to include the rest of the package on the PCB, so all parts are also needed for the Schematic. Those parts, for convenience and clarity, may be drawn separately in the schematic.

No, it’s not true for Pulsonix as it has a notion of “part” where generic symbol pin numbers are mapped to generic footprint pad numbers and become actual pin/pad numbers. If interested please see my notes here for details: https://docs.google.com/document/d/1XeZhEkoAvaRxvdhkERgBn7fWumktTpZoiKBsEUGfBH4/edit#heading=h.9lt9wsjsrgjj

@cioma
Thank you for the clarification.
So a gate has pins without numbers, consequently a gate has no assigned footprint until such time as it is given. I’ll assume multiple Opamps or multi darlington drivers in the same package are treated the same way?

So, in PCB, this leads to connecting tracks to gates in packages in the most economical/efficient way and later assigning the gate number either automatically or manually (from the PCB back to the Schema).

To me this Pulsonix way is a little more efficient than the Kicad way. There is still a lot of toggling between Schema and PCB. Are there ratlines as aids or some sort of autorouter involved? Does this mean gates could be shuffled and flipped on the footprint, to sort out ratlines, then updated to the Schema?

Apart from packages containing multiple identical units, what other benefits would that system have?

When I work for a client I send them the symbol, footprint and 3D model libraries which contains only the symbols, footprints and 3D models used in the project. No extra items.

For in house projects I use generic libraries: a symbol has no footprint pre-assigned. But a footprint does have its 3D model assigned.

We are thinking of a less flexible way with a database for our own projects: each part (symbol) fully specified with inhouse part number, footprint and 3d model,

KiCad is quite powerful and accepts many library arrangements.