Overview & TLDR
The current situation regarding templates is confusing.
ATM they are getting used sparsely and often a differentiation to footprints is really hard or not defined.
I want to present my idea of how I would change and extend the template system, ask for input and see how we could implement it.
References and previous discussions
KiCad Internal
- https://blueprints.launchpad.net/kicad/+spec/layouts-as-footprint
- Import schematic and board simultaneously
- Blueprints: A vision
- https://github.com/KiCad/kicad-footprints/issues/1307
- https://github.com/KiCad/kicad-footprints/issues/1064
- https://github.com/KiCad/kicad-footprints/issues/1408
Demonstration/Capablities of other EDA tools
TBD
Current Limitations
Templates are currently basically a imported KiCad project, meaning a lot of unwanted/unneeded information like configurations are saved and distributed in them.
The main usage of templates atm is to provide the basic outline for module daughterboards (e.g. a Arduino or RaspPi HAT).
If we want to design a motherboard (meaning that the module gets placed onto the PCB), the approach is to use the modules footprint.
For modules with multiple components (e.g. pinheaders), the BoM generation is not working as it only shows as one element.
Besides the current use for modules or standardized shapes where the basically the most important informtion is the edge.cuts layer and mounting holes, a logical similar use is for general and often used circuitry (e.g. buck converters, BGA fanouts, minimal uC circuitry).
It is not possible to import data in an exisiting project with templates, or save a existing project as a blueprint for future use in the main project.
The current workaround for repeated circuits is to use a schematic and import it multiple times in hierarchical sheets.
For PCB data there is no workaround, except using a action plugin like MitjaNemec’s Replicate Layout.
Proposition
Overview
My idea is to combine the current use of templates and the idea of circuit-blueprints into one concept, as they are quite similar.
I think it would be better to decouple the blueprints from a general .pro, .kicad_pcb and .sch file.
A single file, compiling only the necessary data for the schematic and the PCB would be a better.
I will call it .kicad_blueprint for this discussion.
As already said, I can think of two kind of seperate parts for a blueprint:
- Module
- Circuitry
When the blueprint gets imported into an exisiting project, the configurations (text sizes, drill sizes, dates, you name it) are unchanged and only the necessary information gets included.
It can be necessary to modify the PCB design data of the blueprint, according to the desired usage.
If the blueprint is a module, the user has to define in what configuration the module has to be used and should be asked during import.
The options are:
a) HAT: meaning the module is the motherboard and the PCB to be designed functions as the HAT. Here the outline of the board will be on the edge.cuts layer.
b) ELEMENT: meaning the module is only a element of the board, similar to a footprint.
The outline would not be interpreted as the edge.cuts layer but as e.g. a silk outline.
Some outlines/edge.cuts elements are independend of the useage and have to be included in every case (e.g. for too big components like the RJ45 connectors of the Raspi).
During import the user gets to decide how the blueprint will get used, and the data from the blueprint file will be parsed into the kicad_pcb data accordingly.
The workflow could be similar to this:
Problems
-
I am not sure ho we sould add the PCB-elements into PCBnew.
Ideally this would be similar to when footprints get added.
After the placing the symbol and the update of PCBnew all new elements are selected.
In our case all elements (footprints, vias, tracks, …) are in the saved configuration together and can be placed. -
TBD
Discussion
This post is meant to be used for a discussion to think about:
- Is the proposition sensible and the function necessary
- Additional ideas, missing features
- Feasability (idealy from the core development team)
- Better ideas?
- are some people interested to work together to implement a blueprint functionality. I am willing to put time and money into this iff we get a solid and thought out concept.