공부

Synthesis

기동3 2023. 4. 14. 14:46

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 사용