Many PCB designs are implicit puzzles with many vague requirements. Solving this puzzle interactively (i.e. placing and routing) with tools like Altium, Eagle or KiCAD works well in industrial practice.
For research purposes and for specific industrial design problems, it would be nice to have a more deterministic way of designing PCBs. This is where PyPCB (should) kick in. The dream is that PyPCB provides a simple way of expressing what we want, and let it generate a manufacturable layout automatically.
Currently, PyPCB can generate multi-layer Gerber/Excellon output from the description of coplanar traces, for example. There are only few ways to specify objects and geometry coordinates are evaluated almost instantaneously. Consequently, PCB designs in PyPCB still contain a lot of manual tweaking. Output has to be visualised with an external Gerber viewer.
Below assignment should be feasible in a 6-months, full-time internship. If you have more or less time, the assignment can be adapted accordingly.
- Split the current PyPCB library into an intelligent routing part and a Gerber backend, which should be API compatible with GDSPy/dxfwrite/sdxf. That way, it should become possible to generate layout both in Gerber and GDSII format.
- Add an on-screen bitmap backend, that shares the GDSPy API. This way, the user can preview (parts of) the layout, before exporting to Gerber/GDSII format.
- Invent a way to flexibly propagate design constraints. For example, one should be able to specify a trace connecting to connectors together, without having defined the positions of the connectors. The design can then be defined either by defining the position of one connector and the length of the trace, or by the position of both connectors. This could be implemented by lazy evaluation and Python callables.
- To teach others to use PyPCB, some nice case studies have to be thought up, as well as a 2-day hands on training. This training should allow participants with basic programming knowledge (C or MATLAB, for example) to understand and autonomously reproduce the case studies. A Sierpinski fractal antenna is a possible case study.
- Working tests and self-explanatory code committed to the PyPCB GitHub repository
- Wiki documentation of object model and design decisions
- 2-day PyPCB introductory courseware (slides and participant’s tutorial)
- Short report on what you did and what you learned (4 pages maximum)
- Object-oriented, rigorous programmer.
- Upper intermediate level of English (TOEIC >= 400).
- Eager to try and learn new programming skills.
Optional (not required, but helpful):
- Python experience
- Test-driven development experience
- Linear algebra knowledge
- PCB design experience
- Git repository experience
Send a letter of motivation to Mohamed Ramdani plus a short computer programme that you are proud of. We will contact you to meet or Skype. A short assessment is part of the application procedure; we will give you a simple programming assignment to test your abstraction and communication skills.