Synopsis Constraints


Synopsis Constraints .




The following are some of useful Synopsis Constraints.



########################################################

#### Portion to Edit

#### Variables clock1_name is the Clock name, clock1_period is the Clock period,

#### clock1_period_half is the half of the clock period

#### set clock1_name <clock1_name>

#### set clock1_period <clock1_period>

#### set clock1_period_half [expr $clock1_period / 2]

#### set clock1_period_onetenth [expr $clock1_period / 10]

#### set clock1_period_onetwenth [expr $clock1_period / 20]

#### set clock1_latency <clock1_latency_number>

#### set CTS_clock1_skew <CTS_clock1_skew_number>

########################################################

#### Source the .synopsys_dc_setup file, File which has all the library settings

source .synopsys_dc_setup

#### Read the rtl files

read_verilog <RTL file name>

### Similar way read all the RTL files

### Specify the Top-level file name

current_design <top-level module name>

#### Link the design

link

#### Uniquify the design, for designs with multiple instantiation

uniquify

#### Design Constraints following....

####Specify the Clocks in the Design ######

#### Example for one Clock in the Design named clock1

create_clock -period $clock1_period -waveform [list 0 $clock1_period_half ] -name $clock1_name <specify the location of the node where clock need to be generated>

set_clock_skew -ideal -uncertainty $CTS_clock1_skew $clock1_name

set_clock_transition 0.3 $clock1_name

set_clock_latency $clock1_latency_number $clock1_name

set_dont_touch_network $clock1_name

#### Generate the same list of constraints for all the clocks in the design

#### Generate the False and Multi-cycle paths in the design as Timing Exceptions for the tool.

#### False And Multi-cycle paths are purely Design Specific.

#set_false_path -from <Source > -to <Destination> -setup

#set_false_path -from <Source > -to <Destination> -hold

#set_multicycle_path <no of cycles>  -from <source> -to <destination>

 


##### Steps to constrain the inputs/outputs and the design

set_input_transition $clock1_period_onetenth [all_inputs]

set_max_transition $clock1_period_onetwenth $current_design

#### Specify the wire-load model

set auto_wire_load_selection true    ### Tool automatically selects the wire-load model

#### Create virtual clocks to constrain the ports.To understand concept behind the virtual clocks

#### Check out the ASIC FAQ's column.

#### To constrain inputs

set_input_delay <input delay value>  -clock <with respect to virtual clock>  <input_port1>

### Similar way define for all the inputs and w.r.t virtual clocks

#### To constrain out-puts

set_output_delay <output delay value>  -clock <with virtual clock>  <output_port1>

### Similar way define for all the outputs and w.r.t virtual clocks

 

### To constrain purely combinational paths

set_max_delay <specify delay values> -from <source path> -to <destination path>

### For the high fanout nets for which tree will be built and to get away from false loading violation

set_ideal_net <reset_name>

set_ideal_net <scan_enable_name>

### In-order to constrain specific paths passing through the muxes, for example for the tool to

### concentrate on the functional-paths , specify case_analysis for functional paths.

set_case_analysis <case value 0/1> <Mux/Bi-furcating paths>

#### If the design requirement is for area critical designs

set_max_area 0

#### To prevent the tool from optimizing

#set_dont_touch <area to be dont-touched>

####Mapping the RTL specific to the Targetted Technology Library

#### The command means to map it , with scannable flop's, with high optimization possible,

#### Area optimized for non-critical-paths as-well-as boundary paths optimized.

compile -scan -map_effort high -area_effort high -boundary_optimization

#### Save the database

write -f db -h -o <design_name.db>

#### Set some variables for proper saving of verilog netlist file

set verilogout_no_tri true

set bus_naming_style [format "%s%s" "%s\[" "%d\"]

write -f verilog -h -o <design_name.v>

### Save the Used SDC(Synopsys Design Constraints file>

write_sdc <design_name.sdc>

###Report Generation

report_constraints -all_violators -verbose  ### Command to report all the violations

report_area  ### command to report the design area

report_reference ### command to report the design details as per the sub-blocks

### A very powerful command to know the quality of the design constraints

check_design   ###Command to know the design <for example flops which are not getting clocks, ports which are not constrained>

#### Now, let us know the Test Part of the Design

set test_default_period 100

set test_default_delay 5

set test_default_bidir_delay 30

set test_default_strobe 35

set test_default_strobe_width 0

#### Specify that there is no scan-chain present in the design

set_scan_configuration -existing_scan false

#### specify whether clock mixing is allowed or not while scanstitching

set_scan_configuration -clock_mixing no_mix

#### specify the style of flip-flop

set_scan_configuration -style multiplexed_flip_flop

#### Specify the scanchain methodology whether full-scan or partial scan

set_scan_configuration -methodology full_scan

#### Specify the longest chain length according to the tester memory

set_scan_configuration -longest_chain_length 200

#### Specify the scan-enable signal

set_scan_signal test_scan_enable -port <design_scan enable port name>

#### Specify a case analysis value for to the tool to be in the scan-mode while scan-stitching

set_test_hold <value either 0/1> <design scan-mode port name>

#### Specify the designs for which scan-stitching is not required

set_scan_element false [get_designs <sub design_name>

#### Specify the scan-in and scan-out port of the design to the tool

set_scan_signal test_scan_in -port [get_ports <design scan_port input>

set_scan_signal test_scan_out -port [get_ports <design scan_port out-put>

#### specify the test-clock in the design

create_test_clock < clock_name> -period < specify period numeric>  -waveform {rise-edge fall-edge}

#### run the check-test to know the design violations w.r.t. test <

check_test -verbose

##### command to insert scan

insert_scan -map_effort high

#### Report generation

report_test -scan_path   ### command to list all the scan-chains

#### Save the database

write -f db -h -o <design_name_scan.db>

#### Set some variables for proper saving of verilog netlist file

set verilogout_no_tri true

set bus_naming_style [format "%s%s" "%s\[" "%d\"]

write -f verilog -h -o <design_name_scan.v>

###Report Generation after scan-insertion

report_constraints -all_violators -verbose  ### Command to report all the violations

report_area  ### command to report the design area

report_reference ### command to report the design details as per the sub-blocks



Home