OpenLane

DISCLAIMER: THIS PAGE IS STILL UNDER DEVELOPMENT. THE INFORMATION HERE MIGHT BE INCORRECT OR OUTDATED.

Chip Integration

Using openlane, you can produce a GDSII from a chip RTL.

The current Methodology

The current methodology views the chip using the following hierarchy:

The current methodology goes as follows:

  1. Hardening the hard macros.
  2. Hardening the core with the hard macros inside it.
  3. Hardening the padframe
  4. Hardening the full chip with the padframe.

Hardening The Macros

This is discussed in more detail here.

Hardening The Core

The chip core would usually have other macros inside it.

You need to set the following environment variables in your config.tcl file for the chip core:

Therefore, the verilog files shouldn’t have any includes in any of your verilog files. But use ::env(VERILOG_FILES) and ::env(VERILOG_FILES_BLACKBOX) for that purpose.

Add set ::env(SYNTH_READ_BLACKBOX_LIB) 1, if you have std cells hard coded in your RTL.

You can follow the same instructions provided here for the rest of the hardenning steps.

In case you want to manually place the macros in specific locations, this should provide a good example on how to do it. This is done by creating a configuration file containing an endline separated list of instance_name X_pos Y_pos Orientation and pointing to it with this configuartion: ::env(MACRO_PLACEMENT_CFG).

Here you can find a list of all the available OpenLane configuartions.

Check this section for more details on power routing setup.

Hardening The Full Chip

The full chip requires an interactive script to harden. You could take this full chip as an example.

First you need to harden the padframe as a separate macro, check this flow as an example on how to do so.

You need to set the following environment variables in your config.tcl file for the chip:

Therefore, the verilog files shouldn’t have any includes in any of your verilog files. But use ::env(VERILOG_FILES) and ::env(VERILOG_FILES_BLACKBOX) for that purpose.

Add set ::env(SYNTH_READ_BLACKBOX_LIB) 1, if you have std cells hard coded in your RTL.

Add set ::env(SYNTH_FLAT_TOP) 1 to your config.tcl. To flatten the padframe, if it’s presented in a chip_io module, otherwise you can harden it separately as indicated in this flow.

The following inputs are provided to produce the final GDSII:

  1. Padframe cfg file (provided by the user or generated by padring). Here is an example. Or a hardened chip_io.gds and chip_io.lef following this.
  2. Hardened lef & GDS-II for the core module, generated here
  3. Top level netlist instantiating pads and core module (Could be provided by the user or generated by topModuleGen)

The interactive script for the IOs does the following:

Given these inputs the following interactive script script. Mainly, it does the following steps:

Power_routing

Macros:

This is discussed in detail here.

Core:

It should have an stdcell section that includes a core_ring on met4 and met5. It should use met5 and met4 for the straps, and met1 for the rails. Thus, make sure to add these to your config file:

set ::env(DESIGN_IS_CORE) 1
set ::env(FP_PDN_CORE_RING) 1

You can automate the power routing process in the core and macro level by reading this documentation. Otherwise, refer to this for more details about the syntax. In case you needed to create your own pdn.tcl then point to it using PDN_CFG.

When you use the power_routing command in the chip interactive script, the power pads will be connected to the core ring, and thus the whole chip would be powered.

General Notes:

This includes more guidance on how to create an interactive script.

This documents all OpenLane configurations.

This has a description for all OpenLane commands.