Advanced Asic Chip Synthesis
Advanced Asic Chip Synthesis
Advanced Asic Chip Synthesis
SYNTHESIS
Post_layout optimization
SDF
HDL
(GTECH) HDL
Verified RTL
Design
Constraints
Time ok?
Floorplan placement,
CT Insertion&Global routing
Time ok?
Detail routing
Formal verification
Post-layout Optimization
(in-place optimization(IPO))
Static Timing Analysis
Time ok?
Tape out
no
tap
Tap_controller.v
Tap_bypass.v
Tap_instruction.v
Tap_state.v
Pre_layout
Synthesis
SDF generation
Verification
Post-layout Optimization
Initial Setup :
DC .synopsys_dc.setup
company =zte corporation;
designer =name;
technology=0.25 micron
search_path=search_path+{. /usr/golden/library/std_cells\
/usr/golden /library/pads}
target_library ={std_cells_lib.db}
link_library ={*,std_cells_lib.db,pad_lib.db}
symbol_library ={std_cells.sdb,pad_lib.sdb}
Synthesis:
Constrain scripts
/* Create real clock if clock port is found */
if (find(port, clk) == {"clk"}) {
clk_name = clk
create_clock -period clk_period clk
}
/* Create virtual clock if clock port is not found */
if (find(port, clk) == {}) {
clk_name = vclk
create_clock -period clk_period -name vclk
Constrain scripts
/* Apply default drive strengths and typical loads for I/O ports */
set_load 1.5 all_outputs()
set_driving_cell -cell IV all_inputs()
/* If real clock, set infinite drive strength */
if (find(port, clk) == {"clk"}) {
set_drive 0 clk
}
/* Apply default timing constraints for modules */
set_input_delay 1.2 all_inputs() -clock clk_name
set_output_delay 1.5 all_outputs() -clock clk_name
set_clock_skew -minus_uncertainty 0.45 clk_name
/* Set operating conditions */
set_operating_conditions WCCOM
/* Turn on Auto Wireload selection Library must support this feature */
auto_wire_load_selection = true
Write netlist
remove_unconnected_ports find(-hierarchy cell,*)
change_names hierarchy rules BORG
set_dont_touch current_design
write herarchy output active_design+.db
write format verilog hierarchy output active_design+.sv
Setup_time
Hold_time
DC
cell
Verification
SDF:verilog test_bench
:
RTLgate_level
ECO
DC
scriptDCDC
DC
DC
DCHDL
Translate_off/translate_on:DCverilog
full_case:caselatch
Script
Script
Script
DC(.synopsys_dc.setup)
read,compile)
Conditional:
if (expr) {
[dc_shell commands]
} else {
[dc_shell commands]
}
Looping:
foreach(variable, list ){
[dc_shell commands]
}
while( expr) {
[ dc_shell commands]
DC
DC8
Design:
Cellinstance
Reference:cellinstance
Port:design
Pin:designcell
Net:portspinspins
Clock:pinport
Library:celltarget_library,link_library
DC
DC
DC
,DC
DC,dc_shell_status;
DC
dc_shell>vhdlout_use_package={library IEEE.std_logic_1164;\
library STD_LIB;}
flop
dc_shell>designer=myname;
UNIX dc_shell>designer=get_unix_variable(USER)
dc_shell>List target_library
target_library=cbacore.db
dc_shell>List variable all
dc_shell> remove_ variable designer,
DC
DCnets,cells,clocks
DC,
set_attribute <object list>
<attribute name>
< attribute value>
dc_shell>get_attribute STD_LIB
default_max_transition
DC
DC
*.dbDC
Verilog
VHDL
EDIF:electronic design interchange format,
DC
target librariescell
Library Group;
Environment description;
Cell description;
Library Group
library(ex25)/* Library Group
{/*start of library*/
<attributes description>
<environment description>
<cell description>
}/*end of library*/
:table_lookup;
:feb 29,2000;
:1.0;
:1A;
:1ns;
:1V;
:1kohm;
:1.5;
:1.0;
:0.0;
:10.0;
:10.0;
:NOMINAL;
:match_footprint;
Environment description:
scaling factors)
timing rang models)
operation condition)
wire-load models)
:1.0;
:1.2;
:0.03;
:0.04;
:0.02;
:0.5;
operation condition)PVTRC
DCcellnetdelay;
tree_type:worst_case_tree,
balance_tree, best_case_tree,Dcdriver
pindriven cellinput pinwire_load
wire-load models)pre_layoutnet
Synopsys wire-load models
net fanout net length
Cell descriptioncellpin
cell(BUFFD0){
area:5.0;
pin(Z){
max_capacitive:2.2;
max_fanout:4;
function:I;
direction:output;
timing(){
}
related_pin: I;
}
pin(I){
direction:input;
capacitive:0.04;
fanout_load:2.0;
max_transition:1.5;
}
}
CellpinDRC
Input pinfanout_load
Output pinmax_fanout
Input or output pin max_transition
Input or output pinmax_capacitance
DRCcell
Cell DRC
dc_shell> set_attribute find(pin,ex25/BUFFD0/Z) max_fanout 2.0
Good library
cell
Bufferinverters
Cellrisefalldelay
cell:OR,NOR;
cells,:AND,NAND;
inverterscellsAIO,OAI
cells
flip_flop;
flip_flop
set,resetFlop
latch;
delay cell;
CMOS
CMOS
CMOS
non-linear delay model)cell
NLDM,,cellinput transition output loading
celldelayoutput transition ,cellcell delay,
output transition input transition output loading
cell,
Cellinput transitionoutput loadinginput transitiondriving
celloutput transitiondriving celltiming arc,driven cell
,
reset
2ns
Z
Z
U2
0.3ns
U1
Affected gate
scripts
RTL
HDL
DC
DCgroup,ungroup
Group:; Ungroup
groupungroup
dc_shell>current_design top
U1
top
U2
Ungroup -all
top
U1
sub1
U2
10K
I/Opads,DFT,clock,core logic;
block
Layout
cell
RTLHDLHDL
HDL
HDLDC
RTL
DC,
HDLhard_coded
Clock
Clockreset
Clock
muxset_disable_timing
top level
I/O pad
DC
verilog,Stateparameters ;
setup
setup
setup
setup
setup
setup
setup.synopsys_dc.setup,
setup
Startup
Search_path:
Target_library:cells, DC
Target libraryLink library
DC
Link_ library:cells,DCRAM,ROMPad
RTLcells
Symbol_library:cellsDA
Target_libraryLink _library
Target libraryLink_library
Target_libraryTarget librarytranslate
startup
.synopsys_dc.setup
company =zte corporation;
designer =name;
technology=0.25 micron
search_path=search_path+{. /usr/golden/library/std_cells\
/usr/golden /library/pads}
target_library ={std_cells_lib.db}
link_library ={*,std_cells_lib.db,pad_lib.db}
symbol_library ={std_cells.sdb,pad_lib.sdb}
DC
DCScript
Environment constraints
Optimizing design
Report constraints
DCHDL,
readanalyze&elaborateanalyze&elaborate
analyze&elaborateGTECH
HDL GTECHsoft macros such as adders, comparators
synopsys synthetic lib Analyze
.synworkelaborate
analyzedelaborateRead
analyze&elaborate
verilog VHDL
read
verilog VHDLEDIF
db
verilog VHDLRTL
-library
.syn
Generics(vhdl)
Architecture(vhdl)
Environment constraints
I/Owire-load
DC set_max_capacitance
set_max_transition
&set_max_fanout on
input &output ports or
current_design;
set_operating_conditions
on the whole design
Top level
clk
set_drive
on Clock
set_driving_cell
on input signals
Clock
Divider
Logic
Block B
Block A
set_load on inputs
set_wire_load
for each block,
including top level
set_load on output
Environment constraints
Environment constraints
Top:wire_loadtop-levelflattenlayout
Enclosednetwire_loadenclosed layout
logical and physical hierarchy
Segmentednetwire_loadenclosednet,
Segmented wire_load,
wire_load
pre-layout
dc_shell>set_wire_load MEDIUM mode top
Environment constraints
Environment constraints
Environment constraints
Environment constraints
DC
Top level
clk
Create_clock&
set_clock_skew
set_input_delay
on input signals
Clock
Divider
Logic
Block B
Block A
set_max_area
for each block,
set_output_delay
on output
set_max_area
timing path(Create_clock, Set_input_delay, Set_output_delay)
DC
Create_clock:duty
create_clock period 40 waveform{0 20} CLK40ns 0 ns,20
ns;
Set_clock_skewskewdelaypre_layout post_layout
-propagatedDCskew
Pre-layoutDC :
DC:
create_clock period 40 waveform {0 20} CLK
Set_clock_skew delay 2.5 uncertainty 0.5 CLK
Set_clock_transition 0.2 CLK
set_dont_touch_network CLK
set_drive 0 CLK
layoutskew
set_clock_skew delay 2.5 minus_uncertainty 2.0 plus_uncertainty 0.2 CLK
minus_uncertaintysetup-time plus_uncertainty hole-time.
celldelayinput signaloutput pin
clock networkfanout clock network clock
transition timeDC
post-layoutDC:
clock transition
timelayout DC
DC,scriptlayout
layout pre_layout.
DCclock
create_clock period 40 waveform {0 20} CLK
set_clock_skew propagated minus_uncertainty 2.0 plus_uncertainty 0.2 CLK
set_dont_touch_network CLK
set_drive 0 CLK
clock uncertaintyprocess
,SDFSDF
SDF
DC:
DC
DCCLKclkB CLKBlock B
CLKclkA,CLKclk_div clkAclkA
clk _divoutput port
Clk_div
clkA
CLK
clkB
Block
A
Block
DC:
Set_input_delay:
DC:
Set_output_delay:cell
DC:
Set_dont_touch_network,portnetDCnetnet
dont_touchCLKRST
Set_dont_touch_network{CLK,RST}
output portset_dont_touch_network.
set_dont_touch_network
DC DRCRESET
Set_dont_touchcurrent_design,cell,net,references.DC
Set_dont_touch find(cell,sub1)
Set_dont_use:.setupcellDC
Set_dont_use {mylib/SD*},SDflip-flops.
Advanced constraints
Path:startpoint endpoint
Path_delay
Advanced constraints
Set_false_path
DCfalse
pathfalse pathDC
false path
Advanced constraints
2,logicfalse path
Advanced constraints
Advanced constraints
Advanced constraints
Set_multicycle_path:DC
DC
Advanced constraints
Group_path:
dc_shell>group_path to {out1 out2} name grp1
Advanced constraints
Set_max_delay
set_fix_holdDC
Compilation Strategies
cpmpile
Multiple InstancesDC
unquify
dont_touch
Synopsys
Time-budget compile
Compile-characterize-write-script-recompile(CCWSR)
Compilation Strategies
Compilation Strategies
moduleB
moduleA
U1
U2
time-budgeting,moduleA moduleB DC
moduleA dont_touch
unquify U1,U2moduleA_U1moduleA_U2 DC
dc_shell>unquify
unquify dont_touch DCU1
U2
Compilation Strategies
top_level
Compilation Strategies
Time-budget compile:Bottom-Up
Scripts
scripts;
Top
incrementallyDRCs;
Compilation Strategies
Time-budget compile
Compilation Strategies
analyze {ALU.vhd}
elaborate ALU
# Default Constraints
. . .
# MAKE SURE timing has been met! (If not, recode or recompile)
write -format db -hier -output mapped/PRGRM_CNT_TOP.db
top level
read_vhdl source/RISC_CORE.vhd
# Bring in compiled .db files
link
# SYSTEM-LEVEL Constraints
source Top_level.scr;
# Check for timing violations:
report_constraint -all > reports/RISC_CORE.rpt
write -format db -hier -output mapped/RISC_CORE.db
Compilation Strategies
Compile-characterize-write-script-recompile(CCWSR):
DC
scripts
scripts
Optimizing design
horizontal logic
DC10%
Optimizing design
Optimizing design
in1
-5 ns
out
in2
CLK
-3 ns
TNSlayout
TNS
DCpositive slack
Optimization design
Optimization Step
Logic optimizationflattenstructure Gate optimization
Unoptimized design
Flatten
Structure
Logic optimization
Gate optimization
Optimized design
flattenstructure
Attribute
value
flatten
false
structure
true
structure(timing)
true
structure(boolean)
false
Optimization Techniques
Flattening
FlatteningFlattening
vertical flattened effortflattened
structured-map_effort high,
DCstructured
flattened,structured(,structuredset_flatten
-phasetrue,structured flattenedDC
flattened
set_flatten <true|false>
-design <list of design>
-effort <low|medium|high>
-phase<true|false>
Optimization Techniques
Structuring
before structuring
after structuring
P=ax+ay+c
P=aI+c
Q=x+y+z
Q=I+z
I=x+y
Structuring timing(Boolean Boolean
compile_new_boolean_structure= true,DCboolean
set_structure <true|false>
-design <list of design>
-boolean < true|false >
-timing<true|false>
Optimization Techniques
pinset_dont_touch_network,DCbuffer up
set_dont_touch_network
dont_touch
DC size upDRCset_dont_touch_network
incremental compilation
report_netnet,balance_buffer
buffer balance_buffer
in-place-optimizationcompile-in_place
compile_ok_to_buffer_during_inplace _optfalse,DC
buffersize up
Optimization Techniques
Removing hierarchy
DCDC
dont_use
Incrementally compile:
incrementally incrementallyDC
DCTC(Test Compiler)DFT
DCDFT
BIST
DFT
BIST
DC BIST BIST BIST
RAMBIST
pass/failBIST
BISTVerilog VHDL
RTL
DataIn
L
F
S
R
BIST
RAM
Address
L
F
S
R
BIST
Read/write control
M
I
S
T
DataOut
BIST
JTAGIEEE1149.1JTAGDC
TDITDO:TMS:TAPTCK:TAP
flopbuilt-inscan flop
scan_flopflopflop
scan_flop
DCflop
scan-flop,
scan-flopfloptest_ready
set_scan_configuration
set_scan_configuration -style
multiplexed_flip_flop
compile -scanDCscan_flop
preview -scanset_scan_configuration
check -test
DCRTL
ATPG
create_test_patterns -sample<n>
best case
input portsoutput
ports
insert_scan
report_test
DFT
tri-state
tri-state
Latches
Latches,latch
CLK
Test_mode
Secondary
clock
single Edge
single Edgerising falling
Edge
mux,
process(clk,test_mode)
begin
if(test_mode=1)then
muxed_clk_output<=clk;
else
muxed_clk_output<=not(clk);
endif
endprocess
(RAM
RAMunknown
Data Known
Logic
During
Scan-mode
testable
Scan_mode
D
Scan_mode
Combination logic
Combination logic
clock skewflop
hold-timehold-time
flop
flop
Layout
Layout
Post-Layout Optimization
Layout
Layout
layoutVerilogEDIF, EDIFECO
EDIFEDIF
Veriloglayoutlayout
Uniquify
net
ports
cellpin
assign tran
Layout
Uniquify
layoutDCuniquified.uniquified
layoutflat
flop
clock_netNon_ uniquified layout
DC
netport Uniquify
dc_shell>remove_attribute find(-hierarchy design,*)dont_touch
dc_shell>Uniquify
moduleB
U1
moduleA_U1
U2
moduleA_U2
Layout
layoutnet*cell*,*-return
layoutnet,portDClayout
.synopsys_dc.setup,
define_name_rules BORG allowed A-Za-z0-9 \
-first_restricted _ last_restricted_
\
-max_length 30
-map {{\*cell\*,mycell},{-*return,myreturn}}
DC
change_names hierarchy rules BORGS
setup DCbus
bus_naming_style=%s[%d]
ports
DCportsportsDC
ports
remove_unconnected_ports find(-hierarchy cell,*)
check_design
Layout
assign tran
Layout
cellpin
DCports,
DFF dff_reg (.D(data),.CLK(m_clock),.Q(data_out));
QN portDCQN port,cell4
port,layoutcellportsetup
verilogout_show_unconnected_pins=truelayout
DC
Layout
Layout
Floorplanning
Layout
Floorplanning
floorplanning cellmacros(RAMs,ROMs,sub-blocks)
netRC
sub-blocks
sub-blocksmacros,cell
macrosfloorplanning
timing_driven layout(TDL))
floorplan
Layout
timing_driven layout(TDL))
layout DCcellmacros
,DCSDF
SDF(V2.1)
(DELAYFILE)
(SDFVERSIONOVI2.1)
(CELL
(CELLTYPEHello)
(INSTANCE)
(TMINGCHECK
(PATHCONSTRAINT INPUT1 U751/A3 U751/ZN U754/I1
U754/ZN REG0/D(1.523:1.523:1.523))/*path_delay (min,typ,max)
.
Layout
Floorplan
DCFloorplan
PDEFphysical design exchange format)set_loadnet
SDFnetcell delaywire_load
DC
PDEFcell
DCLayoutPDEF
read_cluster design <design name> <pdef filename>
DCLayout
write_cluster design <design name> <pdef filename>
Layout
TDL
netlayout
DCPDEFpost-layout
Layout
latency
buffer
clock skew,buffer
latencyinverters,bufferinverters
invertersbuffer.
gate inverters;
Layout
SDFendpointflopclock pin
DCSDF
synopsys liblayout tool liby
clock treecellnet, layout database
Layout
globalnet
detailednet
EXTRACTION
:
wire-loadwire-load
wire-load
layout
layout tool
DSPFSPEFDSPFRC
net
RSPFSPEFpinetRC
net
SDFnetcelllayout toolDC
cellPTcase
SDFnet RC+lumpedDCRCnet
post-layout lumped synopsys set_load
lumpednet driving cell , netdriven cellnet
wire capacitance
EXTRACTION
Floorplanning,placement and
Clock tree insertion
Global routing
Extract estimated delays
no
Time ok?
no
detailed routing
Extract real delays
Time ok?
no
layout toolDC
custom wire_loadin_place
Optimization
layout tool
SDFNet RC
Set_load net
PDEF
SDF
load
custom wire-load
NetSDFcustom wire-load
PDEFcustom wire-load
DC
create_wire_load -design <design name>
-cluster <cluster name>//layout
-trim <trim value> //
-percentile <percentile value> //wire-load
-output <output file name>
CWLM(custom wire-load model)layoutwire-load model
update_lib <library name> <CWLM file name>
DCCWLMDC.
In-place optimization
IPOlayoutIPO
/SETUP_TIMEHOLD_TIME
IPO
cell
cellbuffers)
synopsys IPO
in_place_swap_mode:match_footprintcell_footprintcell
layout
setupIPOcell
compile_ignore_footprint_during_inplace_opt =true|false;
compile_ok_to_buffer_during_inplace_opt =true|false;
compile_ignore_area_during_inplace_opt =true|false;
compile_disable_area_opt_during_inplace_opt =true|false;
IPO
compile in_place//libwire_load
reoptimize _design in_place//,custom wire_load
cell
cellPDEFlayout tool
lbo_buffer_removal_enable =true
lbo_buffer_insertion_enable =true
IPOLBO
reoptimize_design_change_list_file_name=<file name>
Synopsys
delays
DC
Synopsys
two-pass
Single pass DC
Set_fix_hold
DCCLKbuffercell
hold-timelayoutreoptimize _designholdtime,layoutcompile incrementalhold-time
reoptimize _design
min_max
layout toolminmax
two-pass
worst-case lidsetup-time,layoutbest-case lib
hold-time
Single pass
set_min_library <worst case library name>
-min_version <best case library name>
set_operating_conditions min BEST max WORST
include net_delay.set_load
reading_timing interconnect.sdf
reading_cluster floorplan.pdef
set_input_delay max 20.0 clock CLK {IN1 IN2}
set_input_delay min -1.0 clock CLK {IN1 IN2}
set_output_delay max 10 clock CLK {IN1 IN2}
set_fix_hold CLK
reoptimize_design in_place
delay
10-20hold-time delay
buffer,bufferbuffercell
hold-timefanin
fanin buffer
DC
hold-time IPOscript
perl Awk)setup-time slackholdtime
disconnect_net,create_cell,connectDCDC
buffer.
SDF
SDF
SDF
pre_layout
post_layout
post_layoutSDFDCRClumpedPT SDF
DC:
write_timing format sdf-v2.1 output<file name>
SDFgate-level
SDF
SDF
pre_layoutSDF
pre_layoutwire-load,
DC
create_clock period 30 waveform {0 15} CLK
set_clock_skew delay 2.0 CLK
set_clock_transition 0.2 CLK
DCSDF DC
clock delayDCinput pad (CLKPAD)
set_annotated_delay 2.0 cell \
-from CLKPAD/A to CLKPAD/Z
clock_transitiondriven cell
delay,SDF
SDF
post_layoutSDF
,layout
read_timing format sdf<interconnect RCs in SDF format>
include quiet <parasitic capacitances in set_load format>
create_clock period 30 waveform {0 15} CLK
set_clock_skew propagated CLK
SDF
setup_timehold_timeXs
SDF
setup_timehold_time DC
setup_timehold_time zero
set_annotated_check 0 setup hold \
-from REG1/CLK \
-to REG 1/D
SDF
SDF
reset
2ns
U1
signal_a
Z
U2
0.3ns
Affected Gate