Synopsys Design Compiler Tutorial 2021
With low-power designs ubiquitous, DC 2021 introduces set_voltage for multiple power domains.
create_voltage_domain -name VDD_CORE -voltage 0.8
create_voltage_domain -name VDD_IO -voltage 1.8
set_voltage 0.8 -domain VDD_CORE
set_voltage 1.8 -domain VDD_IO
set_level_shifter_strategy -domain VDD_CORE -from_domain VDD_CORE -to_domain VDD_IO INSERT_LEVEL_SHIFTERS
Below is a template you can use to run synthesis in batch mode.
# run_dc.tcl
# 1. Setup
source .synopsys_dc.setup
# 2. Define Design Library
define_design_lib WORK -path ./WORK
# 3. Read Design
analyze -format verilog [glob ./rtl/*.v]
elaborate top_module
current_design top_module
link
check_design
# 4. Constraints
create_clock -name clk -period 5 [get_ports clk]
set_input_delay -max 1 -clock clk [all_inputs]
set_output_delay -max 1 -clock clk [all_outputs]
set_load 0.1 [all_outputs]
set_max_area 0
# 5. Compile
compile_ultra
# 6. Reports
redirect -tee ./reports/timing.rep report_timing
redirect -tee ./reports/area.rep report_area -hierarchy
redirect -tee ./reports/power.rep report_power
# 7. Outputs
change_names -rules verilog -hierarchy
write -format verilog -hierarchy -output ./outputs/top_netlist.v
write_sdc ./outputs/top.sdc
exit
Fix: Use set_driving_cell on all input ports. DC 2021 is stricter about floating inputs. synopsys design compiler tutorial 2021
The new report_eco_sequence command logs every change made during incremental synthesis, allowing for transparent late-stage modifications without breaking functional equivalence.
Once the design meets timing constraints, you need to write out the results for the Place & Route (P&R) team. Below is a template you can use to
create_clock -name clk -period 10.0 [get_ports clk]
Open a terminal and invoke the GUI or shell mode. Fix: Use set_driving_cell on all input ports
dc_shell -gui
Pro tip for 2021: Use dc_shell -64bit -legacy_ui if you prefer the classic Tcl prompt over the new Python-driven interface.
| Action | Command |
|--------|---------|
| Check design | check_design |
| Show clock | report_clock |
| Reset design | remove_design -all |
| Change naming rule | define_name_rules ... |
| Ungroup hierarchies | ungroup -flatten -all |
| Set max area | set_max_area 0 |
| Set max fanout | set_max_fanout 20 [current_design] |
