Does KiCAD have the features I use in Altium?

Hi All,

I’m a long time Altium user. I would like to switch to KiCAD, because KiCAD runs on Linux, and Altium does not.

I would like to use this forum tread to document my current Altium workflow, and see if KiCAD has equivalent commands for that workflow. If it does not, I intend to find or create bug reports that discuss those missing features.

I’m quite new at KiCAD, so I will post a lot of RTFM questions, followed by me replying to my self with a link to the documentation where I found the answer.

Is this section of the forum the best place for this discussion?

Kind regards,
Cedric

4 Likes

Why not, as long as you understand that KiCad will never repclicate all workflows of some other EDA package. Some things will necessarily be more difficult, some may be impossible at the moment, some are just different, some things may be easier.

The best approach is to make clear what you need to get, what you want to achieve, based on your experience with Altium, and then discuss about possible ways to achieve the same with KiCad. Sometimes even a simple non-intrusive enhancement may be enough to get KiCad on par. Sometimes it may be better already. Some things are in the development roadmap already, or are at least reported and have been discussed. Some things may have been refused long time ago.

5 Likes

I’d be curious to ready your questions and experience, @cedric. I think that many large companies would consider a similar move if there was a benchmark or comparison. I don’t think KiCad will go toe-to-toe, but like @eelik says, there are many ways to get things done in KiCad.

4 Likes

This is my typical workflow:

  1. Draw the schematic (partly)
  2. Define new parts in the schematic library, and link them 1-to-1 to their footprints.
  3. Define the needed footprints, including extra layers for milling and engraving of the front panel.
  4. Use Freecad to draw more-than-trivial 3d models, and export them to step.
  5. Import the step file into the footprint, so collisions are detected in 3d.
  6. Finish drawing the schematic.
  7. Create a new PCB from template, and import the schematic into it.
  8. Copy-and-paste fragments of other PCB’s into the board and the schematic.
  9. Arrange the components, so the air wires are not crossing each other too much. Select groups of components in the schematic, and grab that group of components in the PCB (cross probing)
  10. Change my mind about some components, and change the schematic.
  11. Import the changes made in the schematic into the PCB.
  12. Draw the copper traces
  13. Pour the ground plane, stitch it with via’s in a random pattern
  14. Move traces around, so the ground planes are more “solid”, less loop area.
  15. Re-annotate the PCB board, so all the designators change.
  16. Move the designators around on the silkscreen, so they are all visible.
  17. Update the schematic, so all the designators are in sync again.
  18. Add extra layers to the PCB, so the front panel can be made by the CNC mill or the laser engraving machine.
  19. Add texts to the silkscreen (like part number, hints what signals have to be connected where and so on)
  20. Run a design rule check.
  21. Use a output job file to generate the following documents in one go:
    Gerber files
    Drill file
    DXF file with all layers
    Pick and place file (excel file with one line per part with x,y,rotation, designator, and so on)
    BOM file (excell file with one line per unique part, with ordernumbers, quantity, and so on)
    PDF with only the layers so I can etch a PCB myself (it is seldom used, but I like to have it generated just in case)
  22. Put the Gerber and drill files into a zip file, and send it to a PCB manufacturer (if I want to assemble myself)
  23. Put the Gerber, drill file, pick and place file and bom file into a zip file, and send it to a manufacturer (so I don’t have to do anything anymore, just pay and wait for assembled boards to arrive)
  24. Change the font size in the .dxf file (I’ve written a small program that does this), so it matches the font used in Autocad, and use the laser engraving machine to generate a front panel.
  25. Use the .dxf file to drive the CNC machine to mill holes in the case.
2 Likes

this will probably be your biggest pain point from that list. it’s possible to import a schematic into another, but a quick copy/paste is not.

… at the moment. copy/paste between schematic files works already in 5.99. Switching from one program to another is also an investement in future and you have to decide if you need something right now. You have to wait for a while to have the stable 6.0 version - maybe about a year or more - but copy/paste will be better then. Copy/paste works for layout already in 5.1.

There are also plans for more generic modular design blocks.

2 Likes
  1. Draw the schematic (partly)

I think any EDA allows drawing the schematic partly. :slight_smile:

  1. Define new parts in the schematic library, and link them 1-to-1 to their footprints.

Can do. In KiCad symbols and footprints are separate. You attach a footprint to the symbol. You can have generic symbols withouth footprints so that you attach the footprint after you have placed the symbol to the schematic, or you can have fully defined symbols with pre-attached footprints. You can change the attached footprint at any time.

  1. Define the needed footprints, including extra layers for milling and engraving of the front panel.

Here are layers in the footprint editor:
image

  1. Use Freecad to draw more-than-trivial 3d models, and export them to step.

Even better, you can add the kicadStepUp workbench and collaborate between FreeCAD and KiCad.

  1. Import the step file into the footprint, so collisions are detected in 3d.

There’s no collision detection in KiCad’s 3D viewer except your eyes. Otherwise, yes.

  1. Finish drawing the schematic.

Schematics are never finished. :slight_smile:

  1. Create a new PCB from template, and import the schematic into it.

Describe “template”. KiCad has template projects, but I suspect you mean something different.

  1. Copy-and-paste fragments of other PCB’s into the board and the schematic.

That was discussed already a bit. You can have hierarchical schematic sheets and copy them to your project. Full copypaste isn’t implemented between schematics in the stable v5.1. So, basically yes, although not identically to Altium I presume.

  1. Arrange the components, so the air wires are not crossing each other too much. Select groups of components in the schematic, and grab that group of components in the PCB (cross probing)

At the moment cross-probing works for one component at a time, or you can selects footprints which belong to the same hierarchical sheet. Cross probing a selection from schematic has been promised for v6.

  1. Change my mind about some components, and change the schematic.

I do (or actually my boss does) that all the time. Changing one’s mind is easy. Changing the schematic, too.

  1. Import the changes made in the schematic into the PCB.

Of course.

  1. Draw the copper traces

Yes, with the help of Push’n’Shove router.

  1. Pour the ground plane, stitch it with via’s in a random pattern

KiCad uses zones (fills) for planes. There’s no automated via stitching, you just add vias manually. I’m not sure if there exists any python script for that.

  1. Move traces around, so the ground planes are more “solid”, less loop area.

Bread and butter.

  1. Re-annotate the PCB board, so all the designators change.

As easy as any other change if done from schematic. Automatic annotation from PCB (geographical reannotation) is under work for v6.

  1. Move the designators around on the silkscreen, so they are all visible.

Before this you want to learn to use the Layer Manager Layers and Items to help you see only what you need. Standard work for every board.

  1. Update the schematic, so all the designators are in sync again.

See 15 above.

  1. Add extra layers to the PCB, so the front panel can be made by the CNC mill or the laser engraving machine.

There are free layers and more are coming in v6.

  1. Add texts to the silkscreen (like part number, hints what signals have to be connected where and so on)

You can add text items to any layer.

  1. Run a design rule check.

Yes, one of the most important parts of an EDA.

  1. Use a output job file to generate the following documents in one go:
    Gerber files
    Drill file
    DXF file with all layers
    Pick and place file (excel file with one line per part with x,y,rotation, designator, and so on)
    BOM file (excell file with one line per unique part, with ordernumbers, quantity, and so on)
    PDF with only the layers so I can etch a PCB myself (it is seldom used, but I like to have it generated just in case)

Unfortunately not in one go. These can be done one by one. There has been preliminary developer talk about something like better management of output tasks.

  1. Put the Gerber and drill files into a zip file, and send it to a PCB manufacturer (if I want to assemble myself)

Must be done manually.

  1. Put the Gerber, drill file, pick and place file and bom file into a zip file, and send it to a manufacturer (so I don’t have to do anything anymore, just pay and wait for assembled boards to arrive)

Likewise.

  1. Change the font size in the .dxf file (I’ve written a small program that does this), so it matches the font used in Autocad, and use the laser engraving machine to generate a front panel.
  2. Use the .dxf file to drive the CNC machine to mill holes in the case.

Out of scope for KiCad, but you knew that already.

3 Likes

I have some notes to add to @eelik’s excellent post.

Here is a good description of what all the layers are for:

Expanding on this, templates are at the project level in KiCad, and are usually for providing common board shapes with common connectors. Because of this you would want to start your project from a template and then start on the schematic. Not so easy to start with a schematic and apply a template later. Though, I suppose if the pcb template was board outline (and mfg standards) only one could copy your “template” pcbnew file into the project, and then rename the copy to fit the project, any time before doing any layout. But this is a filesystem level task, not a KiCad task.

I think there may be some python scripts for via stitching, but I haven’t used them so I don’t remember what they are called nor where to download them. Stitching is easy to do manually in 5.1.5. Just select the via tool and drop them where you want on the board. The vias will automatically be assigned to the net where you drop it. This includes stitching fills as well as stitching traces. If you find tutorials about drawing traces inside a fill of the same net to get vias you have found an old and now obsolete tutorial.

1 Like

It is really grad that you’ve detailed your workflow. It will make the discussion easier and I also appreciate your general tone as it avoid flaming which comes up now and then when users from other EDA programs come on this forum gathering information.

As for KiCad, you have to be aware that it is an open source solution. Thus it is much easier to write programs that extend its functionality. So if you find KiCad lacking a feature, it does not mean that something can’t be done. Most likely you are not the first one with this problem and there might be an external tool available. Here is a good list of external tools available.

Note that when I say external tools this means externally developed (not by KiCad developers). KiCad has a plugin interface, so some of these solutions integrate with KiCad.

And as already mentioned, the biggest tool is the @maui’s stepup plugin for FreeCad.

Here is my stab at specifics

you might miss wire rubberbanding, pin snapping, wire coloring

Can be done with stepup plugin for FreeCad

The word template is open for interpretation. Is use templates so that I have predefined board stackups and clearances (homemade, 2layer, 4layer, different manufacturers, …) So you always start with empty PCB. If you mean templates as in “I’ve already layoud out this power supply swithces in previous project, so I’ll reuse the layout” this is not supported out of the box. You might want to try out the Save/Restore action plugin

As others have already mentioned copy/paste between two open instances of schematics editor is currently not supported. But if you make your design hierarchically you can copy paste selected hierarchical sheet in the file system. This also makes it possible to copy/paste the layout of this sheet using the Save/Restore action plugin

You can currently select only one component within the schematics and cross probe it in PCB. Group cross probing is currently not supported. Though with fresh PCB the components are laid out by default by the specific hierarchical sheet, so it is easy to grab components from one sheet only.

While KiCad has pretty decent P/S router, you can route only one track at a time. Bus routing is not supported. And there is no rerouting when you move footprints.

For via stitching you’ll need external plugin. Can’t find the link to it though.

currently not implemented. There is an external tool for this

see #15

Not supported out of the box, though you have external solutions.

Some manufactures accept KiCad project files, so you don’t have to generate manufacturing files by yourself.

2 Likes

Thank you. The answers I received so far make me feel quite welcome in this community, that’s a big motivator for me to put more effort in this.

My first goal is to point out what I would like to see changed in KiCAD so I can use it for my workflow.

My second goal is to enable other people to migrate from Altium to KiCAD. I hope this forum tread will grow into a migration guide for Altium users.

3 Likes

And some final thoughts:
KiCad is really great if you are not afraid to write a line or two of python code. You can automate a lot of things. Furthermore I’d encourage you to learn the use of source control tool called git. Libraries and project management is much easier with it. If you are already familiar with python and git so much better.

One thing I forgot, KiCad is lacking database integration for part management (inventory, part ordering). There are couple of solutions (KiCost, KiCad-Db-Lib, KiCAD Part Manager) for this but they are not up to the par with what altum offers (by my opinion).


https://github.com/jsreynaud/kicad-action-scripts#viastitching

3 Likes

Highly interesting post.
Thanks to the OP for the clear description, thanks as well to the contributors who were exhaustive in their replies.

However, I’m still puzzled by one question related to bullet 16: I’d like to globally {move in eeschema and pcbnew (*1)} hide in eeschema and move in pcbnew a selection of component texts to another layer. For the moment I’m doing this one by one and it’s exhausting and prone to errors. Does it exist a procedure, a plugin or a workaround to automate the process for a selection ?
(*1) edited following @eelik’s reply below:
"There’s no concept of layers in eeshcema, so I don’t quite understand what you mean by that"

Second, concerning bullet 18: @eelik, please, may you elaborate ? I’m mainly using a CNC for my prototypes, PCBs, enclosures and label-engraved front plates. For the moment, I’m using eco1.user for custom filling areas and eco2.user for the milling the isolation slots between hi-voltage areas. I already posted a question:


I didn’t get the replies I was expecting and I’d like to do more in a close future but ideas are lacking for now !

Should I open a new topic for these questions and move this one to the new one ?
TIA

There’s no concept of layers in eeshcema, so I don’t quite understand what you mean by that.

In the layout you can use Edit -> Edit Text & Graphic Properties dialog. However, it doesn’t work on selection. It should be possible with the new object inspector / property editor system upcoming for v6.

1 Like

Yes, do that. I’m not familiar with making a board with CNC, so I didn’t understand all details when I now read you post. Screenshots and pictures would probably help.

I don’t know current capabilities of Altium.
I don’t know what will be in KiCad V6.
Since 1997 I was using Protel 3 and I am in process of moving to KiCad.

Comparing KiCad 5.1 with this old Protel I suppose that it could be hard to enable to migrate for people who are used to intensive use of class definitions and based on it for example clearance definitions.
I was not using it intensive but defining the clearance between net-class and net or between net-class to any other or between two net-classes I was using from time to time. I didn’t found in KiCad (5.1) any substitute for it.
In KiCad 5.1 you can define net class and clearance for it - but that sets the clearance for each track in that class but not the clearance between any track of that class and others allowing to have small clearance between tracks of the isolated part of PCB and big to the rest (other than controlling it manually).
I am not experienced KiCad user - If I am missing something here I hope someone will correct me.
I was also using element classes to control thermal connections to zones (wider for bigger pads). In KiCad I solved it by adding the right definitions directly to footprints. It is even better as having it in footprints I need not to think of it during PCB design. But that solutions seems to be valid only if you consequently use only your footprints.

@eelik
this exactly what I’m looking for !

Cedric: 16) Move the designators around on the silkscreen, so they are all visible.

Petra: “However, I’m still puzzled by one question related to bullet 16: I’d like to globally move in eeschema and in pcbnew a selection of component texts to another layer. For the moment I’m doing this one by one and it’s exhausting and prone to errors. Does it exist a procedure, a plugin or a workaround to automate the process for a selection ?”

When Altium places a component on the PCB, by default it’s designator is visible on the silkscreen, and it’s comment is hidden. Usually my PCB’s are crowded, so there’s another component overlapping the designator text. In order to correct that, I first select all designator texts on both the top and the bottom silkscreen, and use the PCB inspector to adjust their height from 1.5mm to 1mm. Then I select a single (partially) obscured designator text, and move it, so it will be readable on the final PCB. So basically when I have 2 resistors directly next to each other, I move (and rotate) their designators so they end up above the resistors where there’s free space on the board.

I frequently have the serie of R+R||C (divider and filter) at several adjacent microcontroller lines (to reduce 5V to 3V3 and filter glitches at inputs or to set the voltage and dU/dt at outputs). I end up with something like array of 0603 elements touching each other. I also reduce the text to 1mm high, but place them just in the elements rectangles. We have never placed designators at our PCBs (since 30 years) and (may be because of it) I don’t see the need for it. No one asked us for them so I assume no one really needs them. I think P&P is enough for our contract manufacturer.