Analog IC Design
Analog IC Design
As outlined on our main page, analog design is mostly a manual process. Starting with drawing a schematic by hand in a schematic editor, the resulting netlist is simulated in a SPICE-level simulator, and the resulting output is checked for performance. If the design meets specifications, the IC layout is manually drawn in a graphical layout editor and checked for correctness.
These steps are detailed in the following sections.
Schematic Entry
The recommended schematic entry tool is Xschem. It is well integrated with the SKY130 PDK, and there is excellent support from the lead developer on Slack.
xschem
comes with many tutorials and examples, which you can find here.
Simulation
Simulation of a circuit is based on a netlist generated from the graphical representation in xschem
and uses the component models part of the PDK.
There are mainly two simulators available that are historically based on SPICE:
- nspice integrates well with
xschem
andSKY130
. - Xyce is a high-speed simulator with good multithreading support, but there are some incompatibilities in the
SKY130
ecosystem.
These simulators produce either a text file as output or a binary output format that can be viewed either directly in xschem
or using Gaw.
For Python-savvy designers, spyci might be an attractive option for viewing and manipulating SPICE result files.
In order to get started quickly in ngspice
analog simulations, this online version of simulation and plotting might be a good start: EEsim.dev. The source code is available here for self-hosting.
Layout Editing
Once the circuit is working to expectation, an IC layout has to be drawn that implements the circuit in question using MOSFETs, resistors, capacitors, and (potentially) inductors. For creating a full-custom chip layout, two tools are integrated into the SKY130
environment:
- Magic VLSI is an old tool but still the best option for layout creation. The operation of
magic
is a bit special, and you must go through the tutorials to understand the usage model. As with any advanced tool, you must effectively use mouse and keyboard shortcuts. This cheat sheet can help you to get started. This step-by-step example of constructing a CMOS inverter might be a good start as well. - KLayout is a more modern tool and fast working with large GDS files. However, since it lacks parametric layout cells (p-cells) for
SKY130
at the moment, its role is mainly for GDS viewing and layer manipulation.
Custom IC layout needs to be learned, so look for guidance and tutorials, e.g., on YouTube, or find a community for support.
Once you have finished your IC layout, you must check it for correctness. The following checks are the bare minimum:
- Design Rule Check (DRC) ensures that your layout conforms to the rules set up by the wafer foundry and ensures manufacturability. DRC can be done using
magic
, but the setup can be tricky. Refer to a ready-made script like this one to get started. - Layout-Versus-Schematic (LVS) ensures that the device netlist (aka “the circuit”) that you drew in the layout tool is the same that you entered into the schematic tool (in terms of topology and component values). To check your layout, a netlist extracted from the layout (using
magic
) and a netlist extracted from the schematic (usingxschem
) are compared. This comparison tool is called netgen. Again, setting this up can be tricky, but a script is also available for that.
Finally, you have to realize that the wires connecting microelectronic components are really thin (sub-µm) and packed close together. This increases wiring resistance, as well as capacitive coupling. Both are unwanted effects and can have a catastrophic impact on your circuit performance.
It is thus good practice to extract a netlist from the layout consisting of the wanted components (your circuit) and the unwanted ones (the parasitic elements introduced by the wiring). Luckily, magic
can do this for you, and the resulting netlist (which consists of many components) is then re-simulated with the tool of your choice. Luckily, there is a script for that as well.
Installation of Tools and PDK
As you can imagine, setting up all these tools is involved, and there are various How-Tos available on the internet. The quick solution is to use a ready-made Docker container, as provided by the Institute for Integrated Circuits at Johannes Kepler University (GitHub link). An alternative for self-installation is the scripts provided by @proppy (GitHub link).
Of course, there are many more possibilities to set up your personal EDA environment.