Clock

일단 create clock과 genetate clock의 차이를 알아보도록 한다.

Create clock 

Reference clock signal이 없는 clock signal을 선언할 경우 사용된다. 예를 들어 port의 입력으로 받는 clock signal이나 library의 output, clock이 아닌 두 signal이 combinational logic을 거쳐 만들어지는 clock의 경우 등이 이에 해당한다.

 

Genetate clock

Reference clock signal이 있는 clock signal을 선언할 경우 사용된다. 즉, 어떠한 reference를 dividing하거나 이 reference를 clock으로 사용하는 F/F을 통해 만들어지는 clock signal의 경우 generate clock으로 선언해주어야 한다.

 

1. myCreateClockPort

Port로부터 시작되는 clock signal을 선언해주는 function이다.

용도: 합성하고자 하는 top module의 input으로 받는 clock의 속성을 선언한다.

 

proc myCreateClockPort { clock_name clock_period half_period clock_uncertainty clock_skew clock_pin } {

create_clock -name $clock_name -p $clock_period -w [list 0 $half_period] [get_ports $clock_pin]

set_clock_uncertainty -setup $clock_uncertainty [get_ports $clock_pin]

set_clock_uncertainty -hold $clock_skew [get_ports $clock_pin]

set_clock_transition 0 $clock_name

#infinite drive strength clock signal

# set_dirve 0 [get_ports $clock_pin]

#zero load clock signal

# set_load 0 [get_ports $clock_pin]

set_dont_touch_network [find clock $clock_name]

}

 

2. myCreateClock

Port가 아닌 pin이 아닌 library 또는 clock이 아닌 signal로부터 새로운 clock을 선언하였을 경우 사용하는 function이다.

용도: Port로부터 받는 clock이 아닌 top module 내의 library로부터 출력된 clock(ex. PLL의 output) 또는 clock이 아닌 signal로부터 새로운 clock을 선언하였을 경우 사용한다.

proc myCreateClock { clock_name clock_period half_period clock_uncertainty clock_skew clock_pin } {

create_clock -name $clock_name -p $clock_period -w [list 0 $half_period] [get_pins $clock_pin]

set_clock_uncertainty -setup $clock_uncertainty [get_pins $clock_pin]

set_clock_uncertainty -hold $clock_skew [get_pins $clock_pin]

set_clock_transition 0 $clock_name

#infinite drive strength clock signal

# set_dirve 0 [get_pins $clock_pin]

#zero load clock signal

# set_load 0 [get_pins $clock_pin]

set_dont_touch_network [find clock $clock_name]

}

 

3. myGenerateClockPort

Port로부터 시작되는 clock signal을 통해 새로운 clock을 만들 경우 사용하는 function이다.

용도: Port로부터 시작되는 clock signal을 reference로 사용하여 새로운 clock을 생성하는 경우 사용한다.

proc myGenerateClockPort {clock_name mclock_name div clock_uncertainty clock_skew clock_pin} {

create_generated_clock -name $clock_name -source [get_ports $mclock_name] -divided_by $div [get_pins $clock_pin]

set_clock_uncertainty -setup $clock_uncertainty [find clock $clock_name]

set_clock_uncertainty -hold $clock_skew [find clock $clock_name]

#infinite drive strength clock signal

# set_dirve 0 [get_pins $clock_pin]

#zero load clock signal

# set_load 0 [get_pins $clock_pin]

set_dont_touch_network [find clock $clock_name]

}

 

4. myGenerateClock

Port가 아닌 어떠한 clock signal을 통해 새로운 clock을 만들 경우 사용하는 function이다.

용도: Top modul의 port가 아닌 다른 clock signal을 reference로 사용하여 새로운 clock을 생성하는 경우 사용한다.

proc myGenerateClock {clock_name mclock_name div clock_uncertainty clock_skew clock_pin} {

create_generated_clock -name $clock_name -source [get_pins $mclock_name] -divided_by $div [get_pins $clock_pin]

set_clock_uncertainty -setup $clock_uncertainty [find clock $clock_name]

set_clock_uncertainty -hold $clock_skew [find clock $clock_name]

#infinite drive strength clock signal

# set_dirve 0 [get_pins $clock_pin]

#zero load clock signal

# set_load 0 [get_pins $clock_pin]

set_dont_touch_network [find clock $clock_name]

 

 

Reset

1. myCreateResetPort

Top module의 port로부터 주어지는 reset을 선언할 경우 사용한다.

용도: Top module의 port로 받는 input을 선언할 때 사용한다.

proc myCreateResetPort {reset_name} {

set_disable_timing [get_ports $reset_name]

set_ideal_network [get_ports $reset_name]

set_dont_touch_network [get_ports $reset_name]

}

 

2. myCreateReset

Port로 받지 않고 top module의 안에서 생성되는 reset을 선언해주는 function이다.

용도: Port로부터 받는 reset이 아닌 CRG또는 IP내부에서 생성한 reset을 선언해줄 때 사용한다.

proc myCreateReset {reset_name} {

set_disable_timing [get_pins $reset_name]

set_ideal_network [get_pins $reset_name]

set_dont_touch_network [get_pins $reset_name]

}

Posted by sunshowers
,