전공/Design Compiler

Clock 명령어 및 예제 정리(.sdc)

전자-공돌이 2021. 3. 31. 14:54

1. create_clock

: Clock을 생성해주는 명령어이다.

 

 

명령어 옵션

 

-name clock_name

-add
-period period_value
-waveform edge_list

source_objects

 

명령어 예제

 

(1) 실제 존재하는 포트 A에 주기 10ns, 상승하는 시간 5.0ns, 하강하는 시간 9.5ns인 Clock을 생성하고 싶을 때

 

create_clock -period 10 -waveform {5.0 9.5} "A"

-> 옵션은 먼저 나와도 되고, 뒤에 나와도 된다.

 

(2) 실제 존재하는 포트 A를 clk으로 이름 짓고, 주기 10ns, Duty cycle이 50%인 Clcok을 생성하고 싶을 때

 

create_clock -period 10 -name "clk" "A"

-> waveform 옵션을 사용하지 않으면, 기본 값으로 주기의 절반이 하강시간에 들어간다.

-waveform {0 5} 옵션이 생략되어 있다고 생각하면 편하다.

 

(3) 실제 존재하는 포트를 사용하는 것이 아니라 가상의 clk인 "B"를 (1)과 같은 조건으로 넣어주고 싶을 때

 

create_clock -period 10 -waveform {5.0 9.5} -name "B"

 

 

 

 

 

 

 

 

 

2. create_generated_clock

: Clock을 이용하여 다른 Clock을 만들어 내는 명령어이다.

 

 

명령어 옵션

 

-divide_by number

-source source_name

-name clock_name

 

명령어 예제

 

Clock을 1/2배로 분할하여 새로운 Clock을 넣어주고 싶을 때

 

D flip flop을 이용한 주파수 분주

create-generated_clock -divide 2 -source [get_ports {clk}] -name clkdiv [get_pins {DIV/q}]

 

 

 

 

 

 

 

3. set_clock_latency

: Clock을 정의한 Point와 실제 Clock의 Latency를 표현하는 명령어이다.

 

latency의 분류

명령어 옵션

 

-source

-late

-early

-rise

-fall

 

명령어 예제

 


(1) 사용자가 clk으로 설정한 Port와 실제 Source clk와의 Delay가 3ns 인 조건을 넣어주고 싶을 때

 

create_clock -name SYSCLK -period 10.0 [get_ports CLK]

set_clock_latency -source 3.000 [get_clocks SYSCLK]

-> -source 옵션을 사용하지 않으면 기본적으로 Network latency 값을 지정해주는 것이 된다.

(2) "CLK1" 이라는 clk이 Source에서 부터 빠르면 0.8ns, 늦어도 0.9ns에 도달하게 하고 싶을 때

 

set_clock_latency 0.8 -source -early [get_clocks CLK1]

set_clock_latency 0.9 -source -late [get_clocks CLK1]

 

 

 

 

 

 

 

4. set_clock_uncertainty

: Clock skew를 조건으로 지정해 주는 명령어

 

 

명령어 옵션

 

-from from_clock
-rise_from rise_from_clock
-fall_from fall_from_clock
-to to_clock
-rise_to rise_to_clock
-fall_to fall_to_clock
-rise
-fall
-setup
-hold

 

명령어 예제

 

(1) Clock에 연결된 모든 포트에 setup time 0.65ns, hold time 0.45ns 만큼의 Skew Margin을 주고 싶은 경우

 

set_clock_uncertainty -setup 0.65 [get_clocks CLK]

set_clock_uncertainty -hold 0.45 [get_clocks CLK]

 

(2) "A"와 "B" 각각의 Skew는 0.4ns, "A"에서 "B"로 가는 Skew는 1.1ns만큼의 Margin을 주고 싶은 경우

 

 set_clock_uncertainty 0.4 -from A -to A
 set_clock_uncertainty 0.4 -from B -to B
 set_clock_uncertainty 1.1 -from A -to B
 set_clock_uncertainty 1.1 -from B -to A

 

 

 

 

 

5. set_clock_transition

: clock에 transition time을 지정해주고 싶을 때 사용하는 명령어

 

명령어 옵션

 

-rise

-fall

-min

-max

 

명령어 예제

 

clk의 fall transition time을 0.64ns로 지정해주고 싶은 경우

 

set_clock_transition 0.64 -fall [get_clocks clk]