0% found this document useful (0 votes)
74 views28 pages

Synthesis Basics Overview

The document outlines the synthesis process for converting RTL to a technology-dependent netlist while adhering to specific constraints. It details the directory structure for synthesis, the libraries involved, and the various stages of synthesis including import, UPF, compile, and optimizations like retiming and register replication. Additionally, it emphasizes the importance of constraints related to timing, area, and power that significantly impact the quality of the synthesized design.

Uploaded by

nibeditapani85
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views28 pages

Synthesis Basics Overview

The document outlines the synthesis process for converting RTL to a technology-dependent netlist while adhering to specific constraints. It details the directory structure for synthesis, the libraries involved, and the various stages of synthesis including import, UPF, compile, and optimizations like retiming and register replication. Additionally, it emphasizes the importance of constraints related to timing, area, and power that significantly impact the quality of the synthesized design.

Uploaded by

nibeditapani85
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 28

Synthesis

Synthesis

Convert RTL to technology dependent netlist satisfying constraints

Constraints
Technology dependent
Inputs

Technology dependent
Satisfying Constraints

RTL Synthesizer Netlist


SYNTHESIS AREA SETUP

The synthesis directory called “syn” should contain the following


directory structure:

Description:
 Inputs/ - contains the input files such as timing constraints, upf and other
such files
 Scripts/ - contains the block_setup.tcl and other such files needed by RDT
flow
 Outputs/ - contains the outputs of each stage of syn such as sdc, ddc, vg, etc
 Reports/ and logs/ contain what their name suggests
 Rest of directories and files are created by syn and the flow that you use
Inputs, Outputs & Reports

Logical Libraries
Topo
GTECH
Symbol
DesignWare
STANDARD CELL Outputs
MACROS/HIPS
Gate level Netlist
Physical Libraries scandef
Standard cell
Macros/HIPs
DDC
Design (.v, .vhdl, .sv) UPF
Constraints mwdb
Timing
DC
DEF
Area
Power Reports
UPF QoR (T, A, P)
Scan constraints mv checks
scan checks
Techfile
Tluplus
Layermap file
DEF
LIBRARIES

GTECH: This is a virtual internal library of Synopsys. Before the design is mapped to a
technology library, it gets mapped to this virtual library after elaborate is done. This
describes the basic functionality of the cell (ex: AND, AOI, etc) and is useful to see how
the design will map in the early stages itself.
SYMBOL: This is also an internal library of Synopsys (though every vendor has a version
of it). This library contains the different symbol shapes of the different cells that have
been mapped to the GTECH cells (and which later are mapped to tech library).
DESIGNWARE: It is a real implementation for a complicated function like multiplier,
divider etc.. it is an function-optimized ,but technology independent, macro that gets
instantiated if your code implies (or explicitly instantiates) an arithmetic or some other
standard function. Means you really don't need to know how to build a booth multiplier
or a priority encoder etc; you just write your code so that this functionality is required,
Synopsys will throw in the best-fit hardware implementation it knows for that function.
STANDARD CELL: This is a technology dependent library provided by the foundry to the
designer. It contains the logical, timing and physical information about the cells that will
be used during compile.
LIBRARIES (2)
$search_path – This is the path the DC uses to search for the libraries
specified in the design. This should contain the paths of the
directories containing lib files
$target_library – DC uses the libraries specified in this variable during
compile process
$link_library - DC uses the list of design files and libraries specified
here during linking. It tries to resolve references of all files from
libraries specified here.
Physical Libraries – In case, DC-topo is used, certain other tech files
such as tluplus files, layermap files, etc for a physical-aware
synthesis.
Macro/HIP Library – The interface paths and definitions of Ips used in
the RTL require that their respective .libs be available as part of
$link_library.
SYNTHESIS STAGES
 Import_design
 Upf
 Saif
 Uniquify
 Floorplan
 Constraints
 Compile
 Insert_dft
 Compile_incr
 Syn_final
The highlighted stages are general stages of synthesis. Rest are
optional.
Import_design

It reads the RTL from rtl_list.tcl. It reads the RTL one-b-one nd finally converts it into a
technology independent netlist i.e. a netlist mapped to GTECH cells.
This step executes two important commands:
 Analyze – this command does a “code-compile” on the rtl files read. It checks for
errors such as missing definitions, syntax or semantic errors.
 Elaborate – after analyze, this command finally elaborates the different verilog files and
converts them into a netlist mapped to GTECH cells.
What to check:
 Link – link command tells you if there are any cells in your design that are not mapped
to GTECH or macro libraries. They appear as blackboxes.
 Check_design – check_design generates a report which tells about the health of the
netlist. It reports out errors relating to any blackboxes in the design, shorted outputs,
multi-driven nets, unclocked registers and so on.
Always check these two reports and give the relevant feedback back to the FE designer.
UPF

UPF stage reads the <design_name>.upf file into the DC shell.


What to check:
 Check_mv_design – this command generates a report describing the health of the design after UPF
implementation. It will eport out issues such as missing isolation cells, power supplies, missing level-
shifters etc.
All errors in this report are to be cleaned by the block owner. He/she may have to edit the UPF for this
or he/she has to talk to the FE designer regarding any UPF related cells inserted in rtl.
 Sometimes, the FE designer defines power signals in his design. These power signals are interpreted
as a port with attribute type “signal” by the DC. When we define the power rails in UPF, DC interprets
them as a port with type “power”. We cannot have both of them present at the same type. If so, the
tool errors out.
Solution: Remove all power signals defined in the RTL before implementing UPF.
set rtl_pwer_port [get_object_name [get_ports -quiet "vss vcc*_1p03"]]
foreach ob $rtl_power_port {remove_port $ob}
set rtl_power_net [get_object_name [get_nets -quiet "vss vcc*_1p03"]]
foreach ob $rtl_power_net {remove_net $ob}
Uniquify

The uniquify process copies and renames any multiply referenced design so that each
instance references a unique design. The process removes the original design from
memory after it creates the new, unique designs.
Ex: Suppose, initially U3 and U4 have the same reference, an ADDER. It may be required to
make some changes to the ADDER to optimize U3. But those changes, will also be
reflected in U4, which we do not want. In this case, we use uniquify. After, uniquify
process, two copies of reference ADDER are made, ADDER_1 and ADDER_2 as shown.
This resolves our optimization conundrum explained above.

Command:
To uniquify specified designs:
uniquify -cell $uniquify_cells

To uniquify all:
uniquify -f -dont_skip_empty_designs
Constraints (1)

This is one of THE most important stages in synthesis. All the design
constraints related to timing, area and power are usually specified in this
stage. The constraints specified here control the entire compilation process
and are responsible for the quality of the synthesized design.

Remember: “garbage in” = “garbage out”


The various steps involved in constraints stage are:
 timing_constraints
 mbist_constraints
 lbist_constraints
 Syn_constraints
 constrain_visa_logic
 area_constraints
 operating_conditions
 power_constraints

All the design constraints can be provided either in a single .sdc (synopsys
design constraints) file or as a group of files that can be sourced individually.
Constraints (2)
Timing constraints
All constraints related to the timing intent. Includes:
 Clock definitions
 Clock uncertainty
 Clock groups
 Latency and transition specifications for clocks
 IO timing
 Macro interface timing
 Timing derates
 Timing exceptions
 Case analysis

These are specified in $WARD/syn/inputs


Constraints (3)

LBIST/MBIST Constraints
If the design contains LBIST or MBIST cells, constraints must be
specified for controlling and correct functioning of these blocks.
These constraints specify:
 Clock definitions of MBIST/LBIST
 Constrains for building scan chain
 Case analysis
 Constraints for Loading and reading test vectors from RF
VISA Constraints
These are constrains relating to the VISA architecture in your
design. VISA clocks are separate from functional clocks, and need to
be stamped at VISA muxes among other points in design. Hence, a
separate set of timing constraints are needed for VISA. For a sample
of VISA constraint files, look at slide 12.
Constraints(4)

Area Constraints
Can specify max area constraint
set_max_area <area_value>

Power Constraints
These are related to multi_voltage and power optimization techniques to be
followed by DC. The following commands generally form part of these
constraints.
 Enable Multi-VT design optimizations
set_multi_vth_constraint -lvth_percentage [getvar G_LVT_PERCENT] -
lvth_groups “ln” –type <hard/soft> -cost area
 Set power constraints
set_max_leakage_power <value>
set_max_dynamic_power <value>
 Enable dynamic and leakage power optimization
set_dynamic_optimization true
set_leakage_optimization true
set_leakage_power_model -type leakage
Constraints(5)

Synthesis constraints
 Design Rule constraints
set_max_capacitance
set_max_fanout
set_max_transition

 Wire Load Models


set_wire_load_model –name <ldb name> <design_name>

 Operating Conditions
set_operating_conditions -max typical_1.00 -max_lib <max_lib_name>
For setting a global operating condition, you can skip “-max_lib”

 I/O constraints
Not related to timing constraints
set_drive
set_driving_cell
set_fanout_load
set_load
Compile

 This stage performs the function of mapping the design to a


technology-dependent library.
 After this stage is complete, all cells which were till now mapped to
GTECH library are mapped to technology libraries.
 The compile stage optimizes the design in order to satisfy the
timing, power and area constraints specified earlier.
 The default command in our flow for compile is given below:
compile_ultra -no_seq_output_inversion -no_autoungroup -no_boundary_optimization
 To enable further optimizations, the following can be done:
set_app_var compile_seqmap_propagate_constants true
set_app_var compile_delete_unloaded_sequential_cells true
set_app_var compile_preserve_subdesign_interfaces false
set_app_var compile_seqmap_propagate_high_effort true
Compile (2)
WHAT TO CHECK?
 Check the check_design report and the check_mv_design report. There should be no errors in
both reports. No new issues should crop up.
 Also, if we are optimizing using the four commands given before in point 4, the number of
issues in check_design report should reduce.
 When set_app_var compile_delete_unloaded_sequential_cells true, the tool removes the
unloaded cells with a OPT-1207 warning. Compile a list of all such cells and share with the front-
end designer to make sure that these are indeed redundant and can be removed!!!
 To check for completeness of timing constraints, check the check_timing report. Although, all of
this report should be checked thoroughly by STA guy and DE, pay attention to Unclocked
Registers. Report them to front-end designer.
 Check for unmapped logic after compile. These represent the cells that could not be mapped to
a technology library and are still GTECH cells. You can check it by checking the
unmapped_logic.rpt generated by the flow OR do the following to report all unmapped designs:
get_cells -hierarchical -filter "is_unmapped==true”
 Check the timing reports and ensure that setup timing is met for all paths after taking into
account all derates and guardbands. If not, you have to debug to see wherein lies the problem.
If timing is not clean here, then it will be even worse when we start APR.
Automatic Ungrouping

Merges sub designs of a given level of the hierarchy into the parent cell or design.
 Removes hierarchical boundaries
Before Ungrouping
 Improves timing by reducing the levels of logic
 delay based auto ungrouping - default

 Improves area by sharing logic


 area based auto ungrouping

dont_touch attributes are honored After Ungrouping


DW components are not ungrouped
(already highly optimized)

compile_ultra -auto_ungroup
report_auto_ungroup
Sequential Output Inversion

Problem:
If you are inferring an asynchronous set pins in RTL
If your library has only Registers with asynchronous clear
pins

Solution: Inverting the output phase of Sequential Elements

You can allow Design Compiler to map to the opposite type of register and invert
all the data inputs and outputs by using

set compile_seqmap_enable_output_inversion true


compile_ultra -no_seq_output_inversion
Boundary Optimization

Propagates:
Constants
Equal and opposite information &
Unconnected port information
Across the Hierarchies

By default, DC does boundary optimization. To disable use the following switch


compile_ultra -no_boundary_optimization

Disable boundary optimization for a hierarchy


set_boundary_optimization <cell_name> false
Retiming

Retiming is a sequential logic/circuit optimization technique that moves registers


forward or backward across combinational elements in a circuit.

Types of Register Retiming:


Forward Retiming: removing a fixed number of registers from each input of a gate
and inserting the same number of registers at the output.
Backward Retiming: removing a fixed number of registers from the output of a gate
and insert the same number of registers in front of each gate.

Advantages:
Min-period: minimize the clock period of the circuit
Min-area: minimize the number of registers in the circuit
Constrained min-area: minimize the number of registers in the circuit subject to a
maximum constraint on the clock period, or indicate failure if the target period cannot be
achieved.
Reduce the power consumption and logic synthesis
Retiming (Example)

Case A: simple circuit


Clock period -> 6 units; Registers => 4

Case B: Retiming for minimum Registers


Clock period => 4units; Registers => 3

Case C: Retiming for minimum period


Clock period => 2units; Registers => 4

compile_ultra -retime #adaptive retiming, improves WNS, works best with general non-pipelined logic
optimize_registers #minimizes clock period, minimizes register count, executes incremental optimization
of the combinational logic. Performs retiming of sequential cells for pipelined designs
balance_registers #minimizes clock period, performs sequential mapping after moving registers
Removing Unnecessary Registers

Removing unconnected registers


registers that do not drive any load
combo logic associated with the input of the register can also be deleted if the cell is not used
elsewhere in the design.

set compile_delete_unloaded_sequential_cells [true|false]

Eliminating constant registers


Certain registers in a design might never change their state because they have
constant values on one or more input pins.

set compile_seqmap_propagate_constants [true|false]


Set compile_seqmap_propagate_high_effort [true|false]
What if while elaborating or reading RTL, these unloaded sequential cells are removed from
design?
control it using hdlin_preserve_sequential variable
Register Replication

Replicating registers can address


 Timing QoR,
 Congestion and
 Fanout issues

TOPO Placement aware, can help reduce congestion in some cases

WLM Load of the original replicated register is evenly distributed among the new
replicated register

set_register_replication
Merging Equal and Opposite Registers

Equal in all states (can be reached from the reset state)


Applies the same to opposite states

Advantages:
Reducing Registers
Logic Optimization

By default, DC does this optimization


Fixing Nets Connected to Multiple Ports

-feedthroughs

-outputs

-constants

-buffer_constants

DC uses assign statements in the Gate Level Netlist to represent such nets.
Backend tools could potentially have problems with assign statements

Default Behavior: Tool doesn’t fix them Use command: set_fix_multiple_port_nets

set_fix_multiple_port_nets -all -buffer_constants


Commands, switches & variables
compile_ultra <switches>
Switch What it does

-no_autoungroup Automatic Ungrouping – Disabled

-no_seq_output_inversion Sequential output inversion – Disabled

-no_boundary_optimization Boundary Optimization – Disabled

-retime Register retiming – enabled

-gated_clock Clock gating – enabled

Topic Commands

Register Retiming optimize_registers


balance_registers

Register Replication set_register_replication

Buffering Multiport Nets set_fix_multiple_port_nets -all -buffer_constants

Remove unloaded registers set compile_delete_unloaded_sequential_cells true

Eliminating constant registers set compile_seqmap_propagate_constants true


set compile_seqmap_propagate_high_effort true
Thank You!

You might also like