1. SDC
SDC란 Synopsys Design Constraint의 약자이다.
이런 constraint들이 필요한 이유는 우리가 원하는 spec의 chip을 만들기 위해서다.
만약에 chip에서 error가 발생했는데 timing issue로 매우 늦게 알림이 떠서 문제가 생길 수도 있고
constraint 하나를 넣지 않아서 chip이 일정 조건에서 다 죽어버릴 수도 있다.
constraint에는 크게 Design Rule Constraint와 Optimization Constraint로 나눠진다.
Design Rule Constraint는 technology library에 기술되어 있으며
Transition time, Fanout, Capacitance, Cell Degradation, Minimum Capacitance에 대한 constraint로 구성되어 있다.
파운드리에서 지정한 것보다 더 tight한 constraint를 주면 적용은 가능하지만 사실 수정할 일은 없다고 한다.(파운드리에서 전달한 constraint로도 충분하기 때문에)
Optimization Constraint는 우리가 작성해야 하는 부분이다.
Area와 Speed에 대해 constraint를 준다.
관련된 주 constraint(Optimization Constraint)
Area - set_max_delay
Speed
- sync : create_clock, set_input_delay, set_output_delay
- async : set_max_delay, set_min_delay
2. create_clock / create clock
1) syntax
create_clock [-name clock_name] [-add] [source_objects] [-period period_value] [-waveform edge_list] [-comment comment_string]
2) 간략한 설명
create_clock이라는 command를 통해 clock을 만들어낼 수 있다. virtual clock이 될 수도 있고 아닐 수도 있다.
create clock으로 만들어지는 clock은 clock의 시작점으로 이 지점으로부터 CTS(clock tree synthesis)를 하겠다는 의미이다.
3) 옵션
create_clock의 옵션들에 대해 설명해보려고 한다.
a) -name clock_name
직관적으로 알 수 있듯이 clock의 이름을 적어주는 옵션이다.
이 옵션은 사용하지 않을 수도 있다. 사용하지 않으면 source_object라는 옵션에 명시된 clock source의 이름으로 지 정된다. clock의 이름을 지정을 할 때는 이름만 봐도 어디에 쓰이는 clock인지를 알 수 있도록 하면 더 좋다.
b) -add
add라는 단어를 봤을 때 무엇을 추가한다는 의미가 온몸으로 느껴진다. 그렇다면 무엇을 추가하는 것일까. 당연히 create_clock의 옵션이니 clock을 추가하는 것이다. 무슨 말이지?할 수 있다. 만약에 같은 point에 clock을 지정하고
싶을 수 있다. 그럴 때 사용하는 옵션이다. -add 옵션을 사용하면 같은 point에 clock을 여러 개 만들려고 할 때 overwrite하지 않고 많들 수 있다. 주의해야 할 점은 이 옵션을 사용하기 위해서는 -name 옵션도 같이 사용해야 한다.
c) source_objects
clock을 생성할 pin이나 port를 지정해주는 옵션이다. 한마디로 너 어디에 clock을 생성할거니?이다.
당연히 virtual clock을 만들 때는 필요없는 옵션이다. 왜냐하면 virtual clock은 실존하는 clock이 아니기 때문이다.
실존하는 clock이 아니면 당연히 clock을 생성할 지점이 없다!
d) -period peiod_value
주기를 지정해주는 옵션이다.
clock은 주기를 갖는다. library time unit에 맞춰 기재해줘야 한다.
e) -waveform edge_list
파형을 결정해주는 옵션이다.
어느 시점에 rising을 하고 falling을 할 지 결정해주는 것이다.
반드시 짝수 개를 지정해야 한다.(rising, falling edge 번갈아가며 작성)
이 옵션을 사용하지 않을 경우 주기의 절반 지점이 falling edge로 지정된다.
f) -comment comment_string
주석을 작성할 수 있는 옵션이다.
3. create_generated_clock / create generated clock
1) syntax
create_generated_clock [-name clock_name] [-add] source_objects -source master_pin [-master_clock clock]
[-divide_by divide_factor | -multiply_by multiply_factor] [-duty_cycle percent] [-invert] [-preinvert] [-edges edge_list]
[-edge_shift edge_shift_list] [-combinational] [-comment comment_string]
2) 간략한 설명
generated clock이라는 말에서 알 수 있듯이 만들어진, 파생된 clock이라는 것을 알 수 있다. create clock으로는 clock의 시작점을 정의하지만 create generated clock은 원래 있던 clock에서 새로운 clock을 만들어낸다. create clock으로 만들어진 clock에서 generate할 수도 있고 generated clock에서 또 다시 generate해서 사용할 수 있다. 이는 master clock이 변경되면 자동으로 그에 맞춰 변경된다는 점에서 아주 편리한 명령어라고 할 수 있다.
3) 옵션
create_generated_clock(create generated clock)의 옵션들에 대해 설명해보려고 한다.
a) -name
generate할 clock의 이름을 지정하는 옵션이다.
-add 옵션을 사용하려면 반드시 -name 옵션을 사용해야 한다.
b) -add
앞서 언급한 것과 유사하다. 같은 pin이나 port에 여러 개의 generated clock을 지정하고자 할 때 사용한다.
c) source_objects
generated clock을 만들 point를 기재한다.
ex) A/B/C/port_A
d) -master_clock
generated clock을 어느 clock에서부터 만들것인지 기재한다. master clock의 이름을 작성하면 된다.
e) -source
위에서 기재한 master clock의 근원지를 적어준다. 즉 master clock이 지정된 point를 적어준다는 의미이다.
f) -divide_by
주파수를 몇으로 나눠줄 지를 기재한다. 나누는 대상이 주파수임을 잊지 않아야 한다. 1보다 큰 수로 나누면 주기는
늘어난다는 것! 1보다 작은 수로도 나눌 수 있는지는 확인이 필요하다.
g) -multiply_by
주파수를 몇으로 곱할 지를 기재한다. 곱하는 대상이 주파수임을 잊지 않아야 한다.
'반도체 칩 설계 > synthesis' 카테고리의 다른 글
[timing analysis] startpoint & endpoint (0) | 2024.06.13 |
---|---|
[timing analysis] data path & clock path (0) | 2024.06.12 |