OpenROAD is run using Tcl scripts. The following commands are used to read and write design data.
read_lef [-tech] [-library] filename
read_def filename
write_def [-version 5.8|5.7|5.6|5.5|5.4|5.3] filename
read_verilog filename
write_verilog filename
read_db filename
write_db filename
write_abstract_lef filename
Use the Tcl source
command to read commands from a file.
source [-echo] file
If an error is encountered in a command while reading the command file,
then the error is printed and no more commands are read from the file. If
file_continue_on_error
is 1
then OpenROAD will continue reading commands
after the error.
If exit_on_error
is 1
then OpenROAD will exit when it encounters an error.
OpenROAD can be used to make a OpenDB database from LEF/DEF, or Verilog
(flat or hierarchical). Once the database is made it can be saved as a file
with the write_db
command. OpenROAD can then read the database with the
read_db
command without reading LEF/DEF or Verilog.
The read_lef
and read_def
commands can be used to build an OpenDB database
as shown below. The read_lef -tech
flag reads the technology portion of a
LEF file. The read_lef -library
flag reads the MACROs in the LEF file.
If neither of the -tech
and -library
flags are specified they default
to -tech -library
if no technology has been read and -library
if a
technology exists in the database.
read_lef liberty1.lef
read_def reg1.def
# Write the db for future runs.
write_db reg1.db
The read_verilog
command is used to build an OpenDB database as shown
below. Multiple Verilog files for a hierarchical design can be read.
The link_design
command is used to flatten the design and make a database.
read_lef liberty1.lef
read_verilog reg1.v
link_design top
# Write the db for future runs.
write_db reg1.db
Example scripts demonstrating how to run OpenROAD on sample designs can be found in /test. Flow tests taking sample designs from synthesizable RTL Verilog to detail-routed final layout in the open-source technologies Nangate45 and Sky130HD are shown below.
gcd_nangate45.tcl
aes_nangate45.tcl
tinyRocket_nangate45.tcl
gcd_sky130hd.tcl
aes_sky130hd.tcl
ibex_sky130hd.tcl
Each of these designs use the common script flow.tcl
.
OpenROAD contains an abstract LEF writer that can take your current design and emit an abstract LEF representing the external pins of your design and metal obstructions.
write_abstract_lef (-bloat_factor bloat_factor|-bloat_occupied_layers) \
filename
Switch Name | Description |
---|---|
-bloat_factor |
Specifies the bloat factor used when bloating then merging shapes into LEF obstructions. The factor is measured in # of default metal pitches for the respective layer. A factor of 0 will result in detailed LEF obstructions |
-bloat_occupied_layers |
Generates cover obstructions (obstructions over the entire layer) for each layer where shapes are present |
read reg1.db
# Bloat metal shapes by 3 pitches (respectively for every layer) and then merge
write_abstract_lef -bloat_factor 3 reg1_abstract.lef
# Produce cover obstructions for each layer with shapes present
write_abstract_lef -bloat_occupied_layers reg1_abstract.lef
The add_global_connection
command is used to specify how to connect power and ground pins on design instances to the appropriate supplies.
add_global_connection -net net_name \
[-inst_pattern inst_regular_expression] \
-pin_pattern pin_regular_expression \
(-power|-ground) \
[-reigon region_name]
Switch Name | Description |
---|---|
-net |
Specifies the name of the net in the design to which connections are to be added |
-inst_pattern |
Optional specifies a regular expression to select a set of instances from the design. (Default: .*) |
-pin_pattern |
Species a regular expression to select pins on the selected instances to connect to the specified net |
-power |
Specifies that the net it a power net |
-ground |
Specifies that the net is a ground net |
-region |
Specifies the name of the region for this rule |
# Stdcell power/ground pins
add_global_connection -net VDD -pin_pattern {^VDD$} -power
add_global_connection -net VSS -pin_pattern {^VSS$} -ground
# SRAM power ground pins
add_global_connection -net VDD -pin_pattern {^VDDPE$}
add_global_connection -net VDD -pin_pattern {^VDDCE$}
add_global_connection -net VSS -pin_pattern {^VSSE$}
The global_connect
command is used to connect power and ground pins on design instances to the appropriate supplies.
global_connect
The clear_global_connect
command is used remove all defined global connection rules.
clear_global_connect
The report_global_connect
command is used print out the currently defined global connection rules.
report_global_connect
Currently the writer will place an obstruction over the entire block area on any metal layer if there is any object on that metal layer.
Get the die and core areas as a list in microns: llx lly urx ury
ord::get_die_area
ord::get_core_area
Check out GitHub discussion about this tool.
BSD 3-Clause License.