KiCad and component (scheme + footprint as one entity) library based workflow - possible?


Second day trying out KiCad. My question is about component based based workflow (one entity that holds symbol, footprint, and optional 3d model) versus as I understand KiCads default mindset of setting symbol, assigning footprint and 3d afterwards.

Excerpt from IRC

[22:28] <kroko> mozmck1, you said "I would think you can do it the eagle way easily enough. Just make a symbol for every part you use, and tie it to a single footprint."
[22:30] <mozmck1> kroko: yes? I think there are people who use kicad this way.
[22:30] <kroko> mozmck1, is this done using equ files?
[22:31] <mozmck1> kroko: I don't think those files are even used any more. You can assign a footprint to a symbol and I believe it is stored in a field of that symbol.
[22:32] <kroko> mozmck1, ok, have to go through some updated documentation then and/or ask in forum how " people who use kicad this way" are managing it
[22:32] <mozmck1> kroko: I think you can assign multiple footprints too. I prefer the kicad way, but others like the 40 million symbols way :-)
[22:33] <mozmck1> Andy Peters on the user mailing list is a big proponent of the single symbol per footprint method...
[22:33] <kroko> yeah, my question is how to set KiCad to work in "40 million symbols way" :)
[22:33] <mozmck1> kroko: I don't think there is a setting for it, you just have to build your libraries that way.  There may be some out there made that way - I don't know.

So, if and how can KiCad work in “component based” mode? Like - never using that “assign components and footprints” button? Once a schematic is drawn, one also designs the Physical implementation (of course one can ignore footprints if project is about drawing schematic only).

As I see it now it cannot be done

  • because there is no “replace component” option for any of the components(?)
  • as per schematic, footprint, 3D each lives in its own universe and there is no “component” format, that stores all aspects about an entity in one place.

As an example - the target functionality would be:

  • In Eeschema drop in resitor 0603. It has schematic, footprint and 3d assigned. Then one opens PCB and, well, let us switch to 0402. One clicks the component and sets “replace”, library view comes up and 0402 is chosen.
  • As the library is consistent wired/tracked pins (1 & 2) do not break nor in Eeschema nor Pcbnew.
  • If component is changed to another 2 pin component (a cap), it is engineers responsibility to “know what he is doing” and rightly so.

Whenever a new component is needed and it is not in the library then yes, one has to design all aspects of the component.

  • schematic diagram (lot of copy pasting here actually, i.e., all straight resistor components have same diagram)
  • creating footprint
  • crating 3D.

This builds up consistent & correct library for schematics, footprints & 3D.

I do understand after also chating with GyrosGeier in IRC the reasoning of KiCad “way of doing things” and it’s fine. The question is - can it be set up to work as described above (like DipTrace, Altium a.o. EDAs)?

Thank you!

Not answering your question, but to help clarify, KiCad have a separate notion of the things.
A schematic is an electronic logical scheme and that is split from implementation.
The PCB is the implementation of that schematic description.

You design a dummy resistor load circuit. It have a two pin input that connects to the two pins of a resistor.
It doesn’t tell you what type of connector or what type of physical resistor will be used.

After association of the schematic elements to physical components, you can design your PCB implementation.
You can have multiple PCBs based on the same schematic… using different connector types… or SMD resistor or… big THT resistors…

Some users that come from different ECADs find it odd, but in the end they find it useful and start to makes sense.

One advantage is for example if you have an old circuit / PCB… but some of your components are in the end of life and you have to swap it for a new package. You can do this without touch the schematic. Just assign a new footprint with the new package. (provide that the package have the same number of pins and are pin compatible)

The “single component” notion works as Andy_P describes, by putting the footprint into your symbol libraries.

It only works “forwards” though. You can change the footprint in pcbnew, and propagate the change back to the schematic (using the cmp file), but you can’t change the symbol in the schematic like that.

KiCAD can be run as you prefer (one symbol per component with footprint and 3D model linked), but it can also be used in a way, that keeps symbols and footprints separate until one assigns links.
AFAIK, there will never be a unified container that contains symbol+footprint+3dmodel(s) as it’s not needed.

1 Like

Hmm. It is exactly what I need - one container that contains symbol+footprint+3d model. Like in Altium where
integrated library automatically assigns symbol with footprint during PCB design.
For example my current PCB design contain FPGA and 300+ pcs of different discrete SMD components (30+ part numbers).I don’t want to assign for example used smd resistor RC0805JR-071KL with 0402 footpint manually again and again in every of my projects. It is pain. It is meaningless grueling work. I want to assign RC0805JR-071KL with 0402 just one time while creating library component and than get footprint assignment automatically.

Did you even read the comments above?
@Andy_P explained that this work flow is possible with kicad. (Without a separate container)
We call this atomic part.

Just make your own RC0805xR-xxxxxx symbol and set its footprint field. (Isn’t RC0805 for the 0805 package?)

Or make a RC0805JR-07xxxx symbol where you add user fields for the tolerance and reel specification. (or don’t make the fields and define it as an alias for RC0805xR-xxxxxx. I would go this route and note the tolerance and reel diameter in the description field.)

You could even go one step further and have one symbol per value as well and have the symbol RC0805JR-071K00 in your library.

Here my symbol. rc0805jr-07xxxx.dcm (216 Bytes) rc0805jr-07xxxx.lib (427 Bytes)

Even in the official lib we already go this way for specialized parts. (Integrated circuits mostly)
Have a look at ADuM1200AR from the interface lib for an example. (If you have the 4.0.6 library you should have this symbol.)

  1. this kind of linking should be the domain of a content management system - a database that knows which symbols, footprints, 3d models, spice-models, datasheets, etc.pp. define a ‘part’.
    Putting all that desirable information into a single entity would slow KiCADs development even further down and not be desirable from a system design point of view.
    Creating a ‘folder’ within the project folder that would pull in all used files for that particular project for archival issues is another matter and probably more important.

  2. the current setup of keeping the files separate allows for both philosophies to flourish. And beginners usually prefer the more simple way of assigning footprints to symbols once they want to do the layout, not during drawing/designing the circuit.

KiCAD at the moment doesn’t have the over-reaching parts definition content management system implemented.
Some people are working on 3rd party gui tools for this, some people already use 3rd party scripts for this.
At some point KiCAD will bring those out of the box, but this won’t happen within the next 5 years unfortunately.