Synthesis
We use Synopsys DC to synthesize a single RTL netlist file into gates. You can run the design up to this step like this:
% cd $top/build
% make synopsys-dc-synthesis
Here are the inputs, outputs, and scripts in the synthesis step and what they do.
input |
adk |
ASIC design kit interface to the process technology and library files. |
input |
design.v |
The RTL design in Verilog/SystemVerilog. |
input |
constraints.tcl |
Constraints on the design (e.g., input/output delays, min/max delays). |
input |
run.saif |
An optional SAIF activity file for RTL-driven power estimation. |
output |
design.v |
The post-synthesis gate-level netlist. |
output |
design.sdc |
Constraints dumped from synthesis. |
output |
design.namemap |
An optional name mapping for RTL nets and matching post-synth nets. |
After running synthesis, feel free to enter the synthesis sandbox (e.g.,
4-synopsys-dc-synthesis
) and find the following files in the reports
directory:
GcdUnit.mapped.area.rpt
GcdUnit.mapped.power.rpt
GcdUnit.mapped.qor.rpt
GcdUnit.mapped.timing.setup.rpt
GcdUnit.premapped.checkdesign.rpt
The quality-of-results (QoR) report is the most useful and summarizes both timing and area. The area report is a hierarchical breakdown of the module based on the area numbers reported for each gate (from the stdcells.lib). The power report is a high-level estimate of the power of your design assuming about 10% switching activity on all nets (not very accurate, but a good first-order estimate). The setup timing report contains the full trace for the most critical timing paths, with the critical path listed first.
There are also many parameters that can be used to slightly tweak the behavior of this node. Here are the key parameters:
design_name
– (string) Target a particular module within the input RTLclock_period
– (float) Clock target in library time units
Here are other useful parameters:
flatten_effort
– (int) Flatten effort “0” is strict hierarchy, and effort “3” is full flattening. Default = 0.topographical
– (bool) Enable DC topographical mode, which does mini placements at synthesis time to estimate wire delays more accurately. Default = True.nthreads
– (int) The maximum number of threads given to DC. Note that DC is not always able to make use of all threads, even if they are available. Default = 16.high_effort_area_opt
– (bool) Tell DC to do an additional post-compile area optimization pass (has longer spin time). Default = False.gate_clock
– (bool) Automatic fine-grain clock gating. Default = True.uniquify_with_design_name
– (bool) Uniquify by prefixing every module in the design with the design name. This is useful for hierarchical LVS when multiple blocks use modules with the same name but different definitions. Default = True.