Restructure#
The restructure module in OpenROAD (rmp) is based on an interface to ABC for
local resynthesis. The package allows logic restructuring that targets area or
timing. It extracts a cloud of logic to ABC using the cut
module. Multiple recipes for area or timing are run to obtain multiple
structures from ABC; the most desirable among these is used to improve the
netlist. The resynthesized logic is then read back to OpenDB. Reading back of
constants requires insertion of tie cells which should be provided by the user
as per the interface described below.
Commands#
Note
Parameters in square brackets
[-param param]are optional.Parameters without square brackets
-param2 param2are required.
Restructure#
Restructuring can be done in two modes: area or delay.
Method 1: Area Mode Example:
restructure -liberty_file ckt.lib -target area -tielo_pin ABC -tiehi_pin DEFMethod 2: Timing Mode Example:
restructure -liberty_file ckt.lib -target delay -tielo_pin ABC -tiehi_pin DEF -slack_threshold 1 -depth_threshold 2
restructure
[-slack_threshold slack_val]
[-depth_threshold depth_threshold]
[-target area|delay]
[-abc_logfile logfile]
[-liberty_file liberty_file]
[-tielo_port tielo_pin_name]
[-tiehi_port tiehi_pin_name]
[-work_dir work_dir]
Options#
Switch Name |
Description |
|---|---|
|
Liberty file with description of cells used in design. This is passed to ABC. |
|
Either |
|
Specifies a (setup) timing slack value below which timing paths need to be analyzed for restructuring. The default value is |
|
Specifies the path depth above which a timing path would be considered for restructuring. The default value is |
|
Tie cell pin that can drive constant zero. The format is |
|
Tie cell pin that can drive constant one. The format is |
|
Output file to save abc logs to. |
|
Name of the working directory for temporary files. If not provided, |
Resynth#
Resynthesize parts of the design in an attempt to fix negative slack.
resynth
[-corner corner]
Options#
Switch Name |
Description |
|---|---|
|
Process corner to use. |
Resynth with simulated annealing#
Resynthesize parts of the design with an ABC script found via simulated annealing. The script is a series of operations on ABC’s internal AIG data structure. A neighboring solution is a script with one operation added, removed, or two operations swapped. The optimization function is defined as the worst slack.
resynth_annealing
[-corner corner]
[-slack_threshold slack_threshold]
[-seed seed]
[-temp temp]
[-iters iters]
[-revert_after revert_after]
[-initial_ops initial_ops]
Options#
Switch Name |
Description |
|---|---|
|
Process corner to use. |
|
Specifies a (setup) timing slack value below which timing paths need to be analyzed for restructuring. The default value is |
|
Seed to use for randomness in simulated annealing. |
|
Initial temperature for simulated annealing. The default is the required arrival time on the worst slack endpoint. |
|
Number of iterations to run simulated annealing for. |
|
After the given number of iterations that worsen slack, revert to best found solution. |
|
Size of the initial random solution (number of commands in the script for ABC). |
Resynth with genetic slack tuning#
Resynthesize parts of the design with an ABC script found via genetic algorithm.
An individual in a population is a series of operations on ABC’s internal AIG data structure.
Each such operation is considered a gene. Genotype can be changed by a mutation with operations such
as adding, removing or swapping genes with a mutation_probability probability. Individual can also be changed
by crossing two genes together with a crossover_probability probability.
The optimization function is defined as the worst slack.
resynth_genetic
[-corner corner]
[-slack_threshold slack_threshold]
[-seed seed]
[-population_size population_size]
[-mutation_probability mutation_probability]
[-crossover_probability crossover_probability]
[-tournament_probability tournament_probability]
[-tournament_size tournament_size]
[-iters iters]
[-initial_ops initial_ops]
Options#
Switch Name |
Description |
|---|---|
|
Process corner to use. |
|
Specifies a (setup) timing slack value below which timing paths need to be analyzed for restructuring. The default value is |
|
Seed to use for randomness. |
|
Population size. |
|
Probability of applying mutation operator. |
|
Probability of applying crossover operator. |
|
Tournament probability. |
|
Tournament size. |
|
Number of iterations to run genetic algorithm. |
|
Size of the initial random solution (number of commands in the script for ABC). |
Example scripts#
Example scripts on running rmp for a sample design of gcd as follows:
./test/gcd_restructure.tcl
Regression tests#
There are a set of regression tests in ./test. For more information, refer to this section.
Simply run the following script:
./test/regression
Limitations#
FAQs#
Check out GitHub discussion about this tool.
License#
BSD 3-Clause License. See LICENSE file.