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 RTL
  • clock_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.