FreePDK45 and the Nangate Open Cell Library¶
The FreePDK45 kit is an open-source generic process design kit (PDK) (i.e., does not correspond to any real process and cannot be fabricated) that allows researchers and students to experiment with designing in a modern technology node without signing restrictive non-disclosure agreements or paying for licenses. The PDK allows you to use commercial full-custom layout tools (e.g., Cadence Virtuoso) to design both analog and digital circuits. Later in our flow, we will be leveraging the Calibre design-rule check (DRC) and layout-vs-schematic (LVS) rule decks that come with the FreePDK45 kit to verify our design. You can find more details about FreePDK45 here).
Digital synthesis tools work with libraries of pre-drawn and pre-characterized standard cells (often provided by IP vendors like ARM). The Nangate Open Cell Library is a generic open-source digital standard-cell library designed using the FreePDK45 kit. For example, here is the layout for a NAND_X3 standard cell:
You can see the VDD rail (blue strip at the top), the VSS rail (blue strip at the bottom), the poly (red vertical strips), contacts (dark blue squares), and input pins on M1 (three dark blue squares that connect to the poly gates). The physical database containing these layout shapes is known as a graphic database system (GDS) and can be found in “stdcells.gds” in the base kit here.
Each cell in the library is characterized with a large number of SPICE simulations and the timing information is captured in the “stdcells.lib” and “stdcells.db” files (the same information is captured in both, just different file formats). You can find more details about this library here. The liberty (.lib) file is human-readable and you can directly read it in the base kit here.
The Nangate library also comes with the routing technology kit (RTK) technology LEF, often called the “tech LEF”. This describes all available layers that the synthesis and place-and-route tools can use for routing. This file is also human-readable and you can read it in the base kit here. For example, the “metal1” parameters look like this:
LAYER metal1 TYPE ROUTING ; SPACING 0.065 ; WIDTH 0.07 ; PITCH 0.14 ; DIRECTION HORIZONTAL ; OFFSET 0.095 0.07 ; RESISTANCE RPERSQ 0.38 ; THICKNESS 0.13 ; HEIGHT 0.37 ; CAPACITANCE CPERSQDIST 7.7161e-05 ; EDGECAPACITANCE 2.7365e-05 ; END metal1