Digital IC Design

Digital IC Design

As you read on our main page, digital design starts with a high-level textual description and ends with a layout representation in GDS format. The main steps along this route are detailed in the following chapters.

Simulation

Hand-in-hand with creating the Verilog behavioral description is the simulation (for writing Verilog code, you just need a text editor).

The following Verilog simulators are available:

We recommend Icarus Verilog (iverilog) for most simulation tasks, as it is easier to handle than verilator. However, if you want to simulate large designs, verilator is the way to go as it is much faster.

Both digital circuit simulators produce output results that can be viewed with GTKWave, which is a waveform plot tool for digital simulation.

If you prefer to write VHDL, there is also a simulator for that.

Writing Verilog code

Writing good Verilog code is an art by itself and requires practice. There are a few online courses available. One possibility to get you started is this tutorial, but there are many more—Google it!

You definitely should use linting, which means using static code analysis to spot typical errors. Both iverilog and verilator support code linting, so use both.

For advanced digital designers using code coverage analysis might be an option.

Synthesis

Once you have written behavioral code in Verilog, it needs to be translated to register-transfer level (RTL), which is essentially a gate netlist. This step is called synthesis, and the go-to tool for this step is Yosys.

The synthesis step is non-trivial, as there is a difference between the behavioral code that you can write in Verilog and a synthesizable code. We propose to run test syntheses in yosys and carefully watch the warnings and errors.

RTL2GDS

Synthesis is also the first step in the OpenLane RTL2GDS flow. This flow consists of a sequence of steps:

OpenLane flow

The multitude of tools is controlled by settings which are described here.

If everything goes well, then the flow runs without errors, especially when it comes to timing. Occasionally, your design might have setup- or hold-time violations that the tools can not fix automatically. In this case, you have to intervene manually, and this document can be a starting point where to look for a solution.

Installation of Tools and PDK

The installation of OpenLane and the SKY130 PDK can be tricky but is described here (see “Setting Up OpenLane”). The proposed installation uses Docker, which is available for the major computing platforms.

Alternatively, several other solutions are available; you can check the Slack channel for options. For a curated, pre-installed Docker image containing PDK and a large number of tools, you can check here or here (the later Docker image runs on x86_64 and aarch64).

Caravel SoC

Once your digital IP block is ready, you might want to create an entire IC and send it for fabrication. Getting from an IP block to a complete IC (including pads, ESD protection, power supply network, reset, and clocking circuitry) can be cumbersome.

Luckily, a framework exists, an “empty shell,” so to speak, from efabless.com, called Caravel. On the efabless.com homepage, you can find various examples of earlier chip designs. We propose to take one of these designs as a starting base, e.g., this one.