| 1 |
2 |
olivier.girard |
|
| 2 |
|
|
#=============================================================================#
|
| 3 |
134 |
olivier.girard |
# Configuration #
|
| 4 |
|
|
#=============================================================================#
|
| 5 |
|
|
|
| 6 |
|
|
# Enable/Disable DC_ULTRA option
|
| 7 |
|
|
set WITH_DC_ULTRA 1
|
| 8 |
|
|
|
| 9 |
|
|
# Enable/Disable DFT insertion
|
| 10 |
|
|
set WITH_DFT 1
|
| 11 |
|
|
|
| 12 |
|
|
|
| 13 |
|
|
#=============================================================================#
|
| 14 |
2 |
olivier.girard |
# Read technology library #
|
| 15 |
|
|
#=============================================================================#
|
| 16 |
|
|
source -echo -verbose ./library.tcl
|
| 17 |
|
|
|
| 18 |
|
|
|
| 19 |
|
|
#=============================================================================#
|
| 20 |
|
|
# Read design RTL #
|
| 21 |
|
|
#=============================================================================#
|
| 22 |
|
|
source -echo -verbose ./read.tcl
|
| 23 |
|
|
|
| 24 |
|
|
|
| 25 |
|
|
#=============================================================================#
|
| 26 |
|
|
# Set design constraints #
|
| 27 |
|
|
#=============================================================================#
|
| 28 |
|
|
source -echo -verbose ./constraints.tcl
|
| 29 |
|
|
|
| 30 |
|
|
|
| 31 |
|
|
#=============================================================================#
|
| 32 |
|
|
# Set operating conditions & wire-load models #
|
| 33 |
|
|
#=============================================================================#
|
| 34 |
|
|
|
| 35 |
|
|
# Set operating conditions
|
| 36 |
|
|
set_operating_conditions -max $LIB_WC_OPCON -max_library $LIB_WC_NAME \
|
| 37 |
|
|
-min $LIB_WC_OPCON -min_library $LIB_BC_NAME
|
| 38 |
|
|
|
| 39 |
|
|
# Set wire-load models
|
| 40 |
|
|
set_wire_load_mode top
|
| 41 |
|
|
set_wire_load_model -name $LIB_WIRE_LOAD -max -library $LIB_WC_NAME
|
| 42 |
|
|
set_wire_load_model -name $LIB_WIRE_LOAD -min -library $LIB_BC_NAME
|
| 43 |
|
|
|
| 44 |
|
|
|
| 45 |
|
|
#=============================================================================#
|
| 46 |
|
|
# Synthesize #
|
| 47 |
|
|
#=============================================================================#
|
| 48 |
|
|
|
| 49 |
|
|
# Prevent assignment statements in the Verilog netlist.
|
| 50 |
|
|
set_fix_multiple_port_nets -all -buffer_constants
|
| 51 |
|
|
|
| 52 |
134 |
olivier.girard |
# Configuration
|
| 53 |
2 |
olivier.girard |
current_design $DESIGN_NAME
|
| 54 |
|
|
set_max_area 0.0
|
| 55 |
|
|
set_flatten false
|
| 56 |
|
|
set_structure true -timing true -boolean false
|
| 57 |
|
|
|
| 58 |
134 |
olivier.girard |
# Synthesis
|
| 59 |
|
|
if {$WITH_DC_ULTRA} {
|
| 60 |
|
|
if {$WITH_DFT} {
|
| 61 |
|
|
compile_ultra -scan -area_high_effort_script -no_autoungroup -no_boundary_optimization
|
| 62 |
|
|
} else {
|
| 63 |
|
|
compile_ultra -area_high_effort_script -no_autoungroup -no_boundary_optimization
|
| 64 |
|
|
}
|
| 65 |
|
|
} else {
|
| 66 |
|
|
if {$WITH_DFT} {
|
| 67 |
|
|
compile -scan -map_effort high -area_effort high
|
| 68 |
|
|
} else {
|
| 69 |
|
|
compile -map_effort high -area_effort high
|
| 70 |
|
|
}
|
| 71 |
|
|
}
|
| 72 |
2 |
olivier.girard |
|
| 73 |
134 |
olivier.girard |
#=============================================================================#
|
| 74 |
|
|
# DFT Insertion #
|
| 75 |
|
|
#=============================================================================#
|
| 76 |
|
|
if {$WITH_DFT} {
|
| 77 |
2 |
olivier.girard |
|
| 78 |
134 |
olivier.girard |
# DFT Signal Type Definitions
|
| 79 |
|
|
set_dft_signal -view spec -type ScanEnable -port scan_enable -active_state 1
|
| 80 |
|
|
set_dft_signal -view existing_dft -type ScanEnable -port scan_enable -active_state 1
|
| 81 |
|
|
set_dft_signal -view spec -type Constant -port scan_mode -active_state 1
|
| 82 |
|
|
set_dft_signal -view existing_dft -type Constant -port scan_mode -active_state 1
|
| 83 |
|
|
set_dft_signal -view existing_dft -type ScanClock -port dco_clk -timing [list 45 55]
|
| 84 |
|
|
set_dft_signal -view existing_dft -type ScanClock -port lfxt_clk -timing [list 45 55]
|
| 85 |
|
|
set_dft_signal -view existing_dft -type Reset -port reset_n -active 0
|
| 86 |
|
|
|
| 87 |
|
|
# DFT Configuration
|
| 88 |
|
|
set_dft_insertion_configuration -preserve_design_name true
|
| 89 |
|
|
set_scan_configuration -style multiplexed_flip_flop
|
| 90 |
|
|
set_scan_configuration -clock_mixing mix_clocks
|
| 91 |
|
|
set_scan_configuration -chain_count 3
|
| 92 |
|
|
|
| 93 |
|
|
# DFT Test Protocol Creation
|
| 94 |
|
|
create_test_protocol
|
| 95 |
|
|
|
| 96 |
|
|
# DFT Design Rule Check
|
| 97 |
|
|
redirect -tee -file ./results/report.dft_drc {dft_drc}
|
| 98 |
|
|
redirect -file ./results/report.dft_drc_verbose {dft_drc -verbose}
|
| 99 |
|
|
redirect -file ./results/report.dft_drc_coverage {dft_drc -coverage_estimate}
|
| 100 |
|
|
redirect -file ./results/report.dft_scan_config {report_scan_configuration}
|
| 101 |
|
|
redirect -file ./results/report.dft_insert_config {report_dft_insertion_configuration}
|
| 102 |
|
|
|
| 103 |
|
|
# Preview DFT insertion
|
| 104 |
|
|
redirect -tee -file ./results/report.dft_preview {preview_dft}
|
| 105 |
|
|
redirect -file ./results/report.dft_preview_all {preview_dft -show all -test_points all}
|
| 106 |
|
|
|
| 107 |
|
|
# DFT insertion
|
| 108 |
|
|
insert_dft
|
| 109 |
|
|
|
| 110 |
|
|
# DFT Incremental Compile
|
| 111 |
|
|
if {$WITH_DC_ULTRA} {
|
| 112 |
|
|
compile_ultra -scan -incremental
|
| 113 |
|
|
} else {
|
| 114 |
|
|
compile -scan -incremental
|
| 115 |
|
|
}
|
| 116 |
|
|
|
| 117 |
|
|
# DFT Coverage estimate
|
| 118 |
|
|
redirect -file ./results/report.dft_drc_coverage {dft_drc -coverage_estimate}
|
| 119 |
|
|
}
|
| 120 |
|
|
|
| 121 |
2 |
olivier.girard |
#=============================================================================#
|
| 122 |
|
|
# Reports generation #
|
| 123 |
|
|
#=============================================================================#
|
| 124 |
|
|
|
| 125 |
134 |
olivier.girard |
redirect -file ./results/report.timing {check_timing}
|
| 126 |
|
|
redirect -file ./results/report.constraints {report_constraints -all_violators -verbose}
|
| 127 |
|
|
redirect -file ./results/report.paths.max {report_timing -path end -delay max -max_paths 200 -nworst 2}
|
| 128 |
|
|
redirect -file ./results/report.full_paths.max {report_timing -path full -delay max -max_paths 5 -nworst 2}
|
| 129 |
|
|
redirect -file ./results/report.paths.min {report_timing -path end -delay min -max_paths 200 -nworst 2}
|
| 130 |
|
|
redirect -file ./results/report.full_paths.min {report_timing -path full -delay min -max_paths 5 -nworst 2}
|
| 131 |
|
|
redirect -file ./results/report.refs {report_reference}
|
| 132 |
|
|
redirect -file ./results/report.area {report_area}
|
| 133 |
2 |
olivier.girard |
|
| 134 |
56 |
olivier.girard |
# Add NAND2 size equivalent report to the area report file
|
| 135 |
|
|
if {[info exists NAND2_NAME]} {
|
| 136 |
|
|
set nand2_area [get_attribute [get_lib_cell $LIB_WC_NAME/$NAND2_NAME] area]
|
| 137 |
|
|
redirect -variable area {report_area}
|
| 138 |
|
|
regexp {Total cell area:\s+([^\n]+)\n} $area whole_match area
|
| 139 |
|
|
set nand2_eq [expr $area/$nand2_area]
|
| 140 |
|
|
set fp [open "./results/report.area" a]
|
| 141 |
|
|
puts $fp ""
|
| 142 |
|
|
puts $fp "NAND2 equivalent cell area: $nand2_eq"
|
| 143 |
|
|
close $fp
|
| 144 |
134 |
olivier.girard |
puts ""
|
| 145 |
|
|
puts " ======================================================="
|
| 146 |
|
|
puts " | AREA SUMMARY "
|
| 147 |
|
|
puts " |-------------------------------------------------------"
|
| 148 |
|
|
puts " |"
|
| 149 |
|
|
puts " | $NAND2_NAME cell gate area: $nand2_area"
|
| 150 |
|
|
puts " |"
|
| 151 |
|
|
puts " | Total Area : $area"
|
| 152 |
|
|
puts " | NAND2 equivalent cell area: $nand2_eq"
|
| 153 |
|
|
puts " |"
|
| 154 |
|
|
puts " ======================================================="
|
| 155 |
|
|
puts ""
|
| 156 |
56 |
olivier.girard |
}
|
| 157 |
2 |
olivier.girard |
|
| 158 |
|
|
#=============================================================================#
|
| 159 |
134 |
olivier.girard |
# Dump gate level netlist, final DDC file and Test protocol #
|
| 160 |
2 |
olivier.girard |
#=============================================================================#
|
| 161 |
|
|
current_design $DESIGN_NAME
|
| 162 |
|
|
|
| 163 |
134 |
olivier.girard |
change_name -rules verilog -hierarchy
|
| 164 |
|
|
|
| 165 |
2 |
olivier.girard |
write -hierarchy -format verilog -output "./results/$DESIGN_NAME.gate.v"
|
| 166 |
|
|
write -hierarchy -format ddc -output "./results/$DESIGN_NAME.ddc"
|
| 167 |
|
|
|
| 168 |
134 |
olivier.girard |
if {$WITH_DFT} {
|
| 169 |
|
|
write_test_protocol -output "./results/$DESIGN_NAME.spf"
|
| 170 |
|
|
}
|
| 171 |
2 |
olivier.girard |
|
| 172 |
|
|
quit
|