Synthesis, Place & Route (SP&R):
The setups to run SP&R on the available testcases for the given enablements are available in ./<enablement_name>/<testcase_name>/ directories.
Inside each directory are the following sub-directories containing all the files required to run the full SP&R flow.
- The constraints directory contains the SDC constraint file for current design and enablement.
- The def directory contains the floorplan DEF file used in the SP&R flow. We provide two DEF files, one with just the core.
area and pin placements that are used for the logical synthesis flow Flow-1 and another DEF file that also includes macro placements that
is used in the physical synthesis iSpatial flow Flow-2.
- The netlist directory contains the synthesized netlist from Flow-1.
- The scripts directory contains the setup and scripts to run the full SP&R flow using both commercial and open-source tools.
- The run directory is provided to perfom the SP&R runs using the runscripts available in the scripts directory.
The runscripts for all the flows are available in the ./<enablement>/<testcase>/scripts/ directory. Inside the script directory are the following sub-directories.
- The cadence directory contains all the runscripts related to Flow-1, Flow-2 and Flow-4.
- OpenROAD directory contains the <testcase>.tar.gz file, which includes all the required files to run Flow-3 using OpenROAD-flow-scripts (ORFS).
- We provide detailed scripts to run physical synthesis using Synopsys DCTopo. All the scripts are available in the ./scripts/DCTopoFlow directory. We also add the scripts required to generate the inputs for DCTopo, along with a detailed description of each step.
All the flows use the RTL from the Testcases directory and the .lef, .lib, and qrc files from the Enablements directory. The required SRAM models for each testcase are generated and available under the Enablements directory. The detailed steps for different tools are as follows.
Using Cadence Genus and Innovus:
All the required runscripts are available in the ./<enablement>/<testcase>/scripts/cadence/ directory. The steps to modify run.sh to launch SP&R runs for Flow-1 and Flow-2 are as follows.
- To launch Flow-1, set the PHY_SYNTH environment variable to 0 in the run.sh file.
export PHY_SYNTH=0
- To launch Flow-2, set the PHY_SYNTH environment variable to 1 in the run.sh file.
export PHY_SYNTH=1
- To start the SP&R run, use the following command.
./run.sh
Synthesis: The run_genus_hybrid.tcl is used to run the logical synthesis using Genus and physical synthesis using Genus iSpatial. It utilizes the PHY_SYNTH environment variable to determine the flow. Minor details of each synthesis flow are as follows.
- Logical synthesis using Genus (Flow-1): We use the elaborate, syn_generic, syn_map and syn_opt commands to generate the synthesized netlist. This synthesized netlist is copied into the netlist directory.
- Physical synthesis using Genus iSpatial (Flow-2): We use the elaborate, syn_generic -physical, syn_map -physical and syn_opt -iSpatial commands to generate the synthesized netlist. In this step, we provide the floorplan def with placed macros and pins as an additional input compared to Flow-1. This def file is generated in Flow-1.
- Physical synthesis using Genus iSpatial for Circuit Training (Flow-4): This is the same as Flow-2 synthesis flow. The only difference is that the input def file does not include macro placement information.
The command to launch only the synthesis run is as follows.
# export PHY_SYNTH=0 #For Flow-1 uncomment this line
# export PHY_SYNTH=1 #For Flow-2 uncomment this line
genus -overwrite -log log/genus.log -no_gui -files run_genus_hybrid.tcl
P\&R: The run_invs.tcl is used to run the place and route using Cadence Innovus. The netlist and constraint generated during synthesis flow are used in this step. It also utilizes the PHY_SYNTH environment variable to choose which flow to run. Minor details of each P&R flow are as follows.
- Flow-1
- We use aspect ratio 1 and a utilization value of 40% to 60%. All the pins are placed on the left side of the floorplan and the floorplan def file <design>_fp.def is created and copied into the def directory for place and route. The following command is used to place the pins.
### pin_list contains the name of all the top level pins. Here Y1 < Y2. LAYER1 and LAYER2 are two horizontal layer above M1 or metal1 or met1 ###
editPin -pin $pin_list -edge 0 -start {0 Y1} -end {0 Y2} -fixedPin -layer {LAYER1 LAYER2} -spreadDirection clockwise -pattern fill_optimised
- We use the default HALO width based on the enablement for all the macros using the following command.
### HALO_WIDTH is 2um for ASAP7 and 5um for NanGate45 and SKY130HD FakeStack enablements ###
addHaloToBlock -allMacro $HALO_WIDTH $HALO_WIDTH $HALO_WIDTH $HALO_WIDTH
- The place_design -concurrent_macros command is used to place the macros and the def file <design>_fp_placed_macros.def is created and copied into the def directory for synthesis using Flow-2.
- It uses place_opt_design, ccopt_design and routeDesign commands for placement, CTS and routing of the design.
- Flow-2
- The run_invs.tcl script utilizes the .def file generated by the Genus iSpatial flow as a starting point.
- Similar to Flow-1, it uses place_opt_design, ccopt_design and routeDesign commands for placement, CTS and routing of the design.
The command to launch the P&R run is as follows.
### Make sure you have run the synthesis step. run_invs.tcl uses the output files generated synthesis ###
# export PHY_SYNTH=0 #For Flow-1 uncomment this line
# export PHY_SYNTH=1 #For Flow-2 uncomment this line
innovus -64 -init run_invs.tcl -log log/run.log
The screenshot of the Ariane 136 testcase using the Cadence Flow-1 on NanGate45 enablement is shown below.
This script was written and developed by ABKGroup students at UCSD; however, the underlying commands and reports are copyrighted by Cadence. We thank Cadence for granting permission to share our research to help promote and foster the next generation of innovators.
Using OpenROAD-flow-scripts:
Clone ORFS and build OpenROAD tools following the steps given here. Use the following steps to run SP&R using OpenROAD tools:
- Copy ./<enablement>/<testcase>/scripts/OpenROAD/<design>.tar.gz file to {ORFS Clone Directory}/OpenROAD-flow-scripts/flow/designs/<enablement> area.
- Use the command tar -xvf <design>.tar.gz to untar <design>.tar.gz. It will generate a <design> directory, which contains all the files required to run SP&R using ORFS.
- To launch the SP&R job, go to the flow directory and use the make command
make DESIGN_CONFIG=./designs/<enablement>/<design>/config_hier.mk
- config_hier.mk uses the RTL-MP (RTL Macro Placer) for macro placement. If you wish to run macro placement using the older Triton Macro Placer, please use the below command:
make DESIGN_CONFIG=./designs/<enablement>/<design>/config.mk
The screenshot of the Ariane 136 testcase using the ORFS (RTL-MP) on NanGate45 enablement is shown below.