Synthesis
Logic synthesis: RTL modeling -> Gate level netlist
Translation + logic optimization + mapping
Read Compile
RTL code + constraints === translation + optimization + mapping ===> gate level netlist
*.v, *.db *.scr
constraints information: timing, area requirements
cell 크기가 클수록 delay 적음 > gate 갯수, 선폭
Design Compiler
- splits the design into paths
- constraints 따라 optimizes
- 디자인의 모든 path 확인하여 timing violations
Static Timing Analysis (STA)
- synthesis의 한 부분
- 기능 확인이 아님
- timing paths에 따라 start/end points 구분
start point: clock pin of a register
end point: data pin of a register
Target library
- building a circuit을 위해 design compliler에서 사용
- mapping 되는 동안 design compiler는 최적의 gates 선택, timing 계산
Link library
- design references 확인
칩의 각 로직들을 각각 db화하여 top으로 돌릴 때
- DC: memory 먼저 확인 후 link lib 확인, 정의된 모든 경로 확인
- db file 자동 연결. HDL 파일 아님.
Technology library
- symbol lib: 회로도 심볼, *.sdb, or *.slib
- ASCII file: *.lib, 시놉시스 lib 컴파일러로 컴파일됨.
wire load
analyze: read hdl files
- 코드가 synthesis한지 확인( hdl syntax and synopsys rule check)
- 설계 lib에 intermediate file 저장, intermedisate file은 *.sim, *.syn, *.mra 포함
elaborate: analyze로 생성된 intermediate 파일 read
- design -> GTECH 변환
- perform a link automatically
Design rule constraints
- implicit constraints, tech lib에서 정의
- 설계 의도대로 작동하기 위해 맞춰줘야 하는 기술 제한 사항
- lib 사용하는 어떤 design 이든 사용
- optimization 조건보다 더 제한하여 사용 가능
- maximums: transition time fanout capacitance
set_max_transition
set_max_fanout
set_max_capacitance
- Cell degradation 잘 쓰지 않음
set_cell_degradation
- minimum capacitance
set_min_capacitance
Optimization constraints
- explicit constraints, 사용자 정의
- design 목표로도 나타남.
- speed, area, porosity 등 제한 사항을 나타낼 수 있지만, 설계 동작에 중요하지 않을 수 있다.
- speed(=timing) 조건은 area, porosity 보다 우선 순위가 높다.
- Area 0으로 넣고 확인
set_max_area
- Speed
create clock
set_input_delay
set_output_delay
set_max_delay
set_min_delay
timing 의 목적 : synchronous design
- 설계의 모든 path에 대해 timing constraint 정의: input logic paths, internal(register to register) paths, output paths
- clock, clock과 연관된 I/O
- must define: clock source, clock period
- may also: duty cycle, offset/skew, clock name
create_clock : design의 clock signal 정의
set_dont_touch_nerwork: clock net을 DC가 buffer up 하지 않도록 선언
report_clock: 정의된 클럭과 그 속성 확인
ex)
create_clock -period 10 [get_ports CLK]
set_dont_touch_network [get_ports CLK]
Clock tree
- DC에서 사용하지 않음. 버퍼 정도는 해줌
- auto P&R에서 physical placement data 기반하여 사용
clock uncertainty: clock edge의 불확실성
clock network에서 branches clock 사이의 delay 차이 = clock skew
* skew: clock 간의 시간 위상 차
set_clock_uncertainty -setup Tu [get_clocks CLK]
*Tu: Pre layout clock skew + jitter
Total latency = Source latency + network latency
source latency: clock 소스(PLL, OSC 등) ~ define clock 지연 시간.
network latency: define clk ~ register clk pin 지연 시간
pre layout: ideal clock에 대한 uncertaintu와 latency 사용
set_clock_uncertainty 0.5 CLK
set_clock_transition 0.25 CLK
set_clock_latency 2 CLK
post layout: propagated clock, skew 사용
set_clock_uncertainty 0.1 CLK
set_propagated_clock CLK
ex) assume every block has registered outputs, 10ns clock
set_all_in_ex_clk [remove_from_collection [all_inputs] [get_ports CLK] ] : 모든 input에서 clk 제외
set_input_delay -max $clk_to_q -clock CLK $all_in_ex_clk
set_output_delay -max [expr 10 -$clk_to_q] -clock CLK [all_outputs]
check_timing : constraint 빠뜨린 path 나옴 > tcl로 run 때릴 때 안 씀
report_port -verbose : 사용자가 설정한 constraint 확인.
report_clock : 모든 clock에 대한 report
reset_design : current design의 constraint, attribute 삭제
list_libs : memory의 lib 확인
modeling capacitiv load: output cells로 인해 생기는 total capacitance 알아야 함
set_load : output ports에 load 되는 external capacitive 특정해야 함, default 0
ex) set_load 5 [get_ports OUT] : port OUT에 5 load
load_of : tech lib에서 cell pin load로 external load 지정 가능
ex) set_load [load_of lib/cell/pin] [get_ports OUT] : port OUT에 특정 pin load
set_load [expr [load_of lib/inv/A] * 3] \ [get_ports OUT] : inv A 3개 배치
input drive strength: input port의 transition time 필요
set_driving_cell : 입력 포트로 구동되는 외부 cell 지정 가능, default transitino time 0
ex) set_driving_cell -lib_cell FD1 \ -pin Q [get_ports IN] : Q pin 안 쓰면 첫번째로 찾아진 output pin 사용