Hi everybody. I’m part of an academic team that is exploring what it will take to add support for advanced constraints to KiCad. The KiCad roadmap for Version 6 (https://docs.kicad.org/doxygen/v6_road_map.html#v6_pcb_constraint) indicates future support for advanced constraints, and we would like to contribute if we can. We are working on a specification for KiCad (s-expression) compatible constraints and topology for high-speed designs. We would appreciate your feedback!
Our project is called OpenROAD and it mostly focuses on IC design, but I’m working on the PCB section. You can check out the OpenROAD project here (https://theopenroadproject.org/). The overall goal is to have a “no-human-in-the-loop” placer and router for PCB. The project is DARPA sponsored and a requirement is that the whole thing be totally open-source. Since KiCad is the best (only?) fully open-source PCB design tool in general use we are basing everything on KiCad and making our tools KiCad compatible.
We are working on a (for now) standalone placer, router, DRC checker (for advanced constraints), and a decompactor. The idea is to be able to autoplace and autoroute a BeagleBone Black type design within six months. This means 6+ layers, BGA microprocessor, DDR3L memory, USB, HDMI, eMMC, and so on.
The tool is written in C++ with a Python API and is available to play with here (https://github.com/The-OpenROAD-Project/PCB-PR-App). Don’t expect perfect results. Maybe don’t even expect so-so results yet We are still adding features and tuning the layout algorithms, but we have a pretty good framework to build on. The placer and low-speed part of the autorouter is working for several simple test cases. The advanced features are in-progress and will be in some form of beta by July 2020.
To get the advanced features working we need to supplement the KiCad format with some constraints like length matching and microstrip routing. An evolving specification for advanced constraints is here (https://docs.google.com/document/d/e/2PACX-1vTkRAP8958dubgnsq6Rndtgp_iXvjcJoBpWdVlxYD18WWxCoFPRtS3IKPc7mBKmphw63JZtnGQHzuKf/pub). We are looking for feedback on the feature list and syntax. We expect significant changes will be needed before we have a “working” version that we can start using for layout.
If you are interested in the project you can help us by reviewing the feature list and syntax (the constraints document); trying the tool out and submitting issues; and by contributing test cases.
We could also use pointers to any similar efforts towards advanced constraints in KiCad. We haven’t found them, but I’m guessing that is because we aren’t good at searching this forum, not because they don’t exist.
Thanks everyone! We wouldn’t have been able to make such quick progress without KiCad!