3장에서 clock, input/output delay 등에 대한 제약 조건을 설정했지만 아직 정확한 타이밍 분석을 하기에는 불충분하다.
따라서 4장에서 Driving Cell과 Load Cap과 같은 환경 요소에 대한 제약 조건을 적용해보고자 한다.
By default, DC assumes ZERO transition of input port
→ This would result in optimistic I/O paths timing
→ Optimistic Path Timing reults is bad because we design it with Worst case in mind
Transition Time & setup Time
Modeling
set_input_transition -max 0.12 [get_ports INB]
set_driving_cell -max -lib_cell OR3B [get_ports INA]
set_driving_cell -max _lib_cell FD1 -pin Qn [get_ports INA]
set_driving cell -no_design_rule
By defaults, DC assumes ZERO load cap of output port
→ This would result in ※optimistic I/O paths timing
→ Optimistic path timing is bad things, cuz we design it with worst case in mind
Modeling
set_load -max [expr {30.0/1000}] [get_ports OUTB]
set_load -max [load_of lib/cell/pin_name] [get_ports OUTB]
set_load -max [expr {[load_of lib/cell/pin_name]*3} [get_ports OUTB]
set_driving_cell -max -no_design_rule -lib_cell inv1a1 $ALL_INPUT
set_max_capacitance [expr {[load_of libname/and2a1/A] * 10}] $ALL_INPUT
set_load -max [expr {expr {[load_of libname/and2a1/A] * 30}] [all_outputs]
my_design.v → Read → Constraints → Verify → Save → MY_DESIGN.ddc
(RTL) (source MY_DESIGN.con) (unmapped)
All input ports, except clk & Cin, are driven by bufbd1 buffers
set ALL_INPUT [remove_from_collectoin [all_inputs] [get_ports {Clk Cin*}]]
set_driving_cell -max -library cb13fs120_tsmc_max -lib_cell bufbd1 $ALL_INTPUT
Port Cin is a chip level input and has an input transition of 120ps
set_input_transition 0.12 [get_ports Cin*]
All outputs, excepts Cout, drive 2x bufbd7 loads
set_load [expr 2 * {load_of cb13fs120_tsmc_max/bufbd7/I}] [get_ports out*]
Cout drives 25fF
set_load 0.025 [get_ports Cout*]
Operating condition use to scale cell and net delays
set_operating_conditions -max cb13fs120_tsmc_max
get_lib_cells */bufdb1