Knowledge Base

Chang-woo YANG 2014. 10. 22. 23:51

ASIC 또는 FPGA에서 delay, skew, slack, slew등의 용어가 자주 나오고 있습니다. 

모두 타이밍에 관한 특성 값들이지만, 서로 어떻게 다른 지 개념을 잡고 있는 것이 중요할 것 같습니다.

 

 

1. Delay
ASIC 또는 FPGA에서 발생하는 지연(delay)은 흔히 이야기 하는 [딜레이]가 맞습니다.

[DELAY] = [CELL_DELAY] + [NET_DELAY]

여기서 CELL은 "AND", "OR", "D-FlipFlop"등의 셀을 의미하고, NET은 이들을 연결하는 (구리)Wire를 의미 합니다.

CELL_DELAY는 전자의 이동속도 등과 관련이 있습니다.

CELL_DELAY는 아래 그림과 같이 세숫대야 모델(?)로 이해 할 수 있습니다.

 


세숫대야를 CELL로 봅니다. 대야속의 물의 높이 즉 '수위'가 CELL의 값을 나타냅니다.

현재 물이 비어있다고 가정하면, '0'의 값입니다. 수도꼭지를 틀어서 수위가 '1'이 될 때 까지의 시간을 "RISE_DELAY"라고 합니다.

그리고 수채구멍을 열어 수위가 다시 '0'이 될 때 까지의 시간을 "FALL_DELAY"라고 합니다.

물 대신 전자가 대야에 차고 또 비워지고 하는 것을 디지털의 '1'과 '0'으로 이해한다면 CELL_DELAY의 의미를

마음속에 그려 볼 수 있을 것입니다.

'0'은 0V이고, '1'은 경우에 따라서 3.3V 또는 5V 등의 전압을 의미 합니다.

 

 


2. Skew
실제 칩(ASIC 또는 FPGA)이 있다고 가정을 해 보겠습니다.


점선 안의 부분은 칩 내부이고, PAD로 연결된 칩 외부의 PCB상의 클럭 패턴도 있습니다. D-FF가 8개 있는 디자인 입니다.

단순하게 하기 위해, 필요한 부분만 남기고 나머지는 삭제하였습니다.

RTL(Verilog 또는 VHDL)로 설계 할 때는 단일 클럭인 "CLK" 만을 사용하는 설계였는데,

회로합성(synthesis)툴이 클럭을 나누어서 플립플롭 3개와 5개를 따로 드라이브하는 구조로 합성하였습니다.

클럭의 상승에지(rising edge)가 PCB_CLK에서 '발사' 되어 최종 목적지인 플립플롭 들에 '도착'하는 시간이 주요 관심사 입니다.

플립플롭들 중 foo와 bar라는 두 개의 플립플롭으로 도달하는 "CLK"의 시간은 조금 다를 것입니다.

그 이유를 처음의 그림의 세숫대야 모델로 생각을 해 볼 수 있습니다.

CLK'(수도꼭지#1)는 세 개의 세숫대야, 그리고 CLK''(수도꼭지#2)는 다섯개의 세숫대야를 채워야 하기 때문에

CLK''에서 공급받는 bar의 세숫대야는 약간 늦은 시간에 '1'로 도달할 것입니다.

PCB클럭으로 부터 foo와 bar 플립플롭으로 도착하는 클럭의 시점을 그림으로 그려 보면 아래와 같을 것입니다.


여기서 만약 T1=2ns이고 T2=2.5ns였다고 가정해 보겠습니다. CLK_PCB를 "기준"으로 보면 foo로 도착하는 CLK의 delay는 2ns이고 bar로 도착하는 CLK의 delay는 2.5ns 입니다.

우리는 여기서 "CLK의 SKEW는 0.5ns 이다." 라고 이야기 합니다.

즉 SKEW는 클럭의 delay가 아니라 "가장 빨리 도달하는 클럭과 가장 늦게 도달하는 클럭의 차이" 인 것입니다.

 

 

3. SLACK
위의 회로의 예를 계속 보겠습니다.

클럭이 100MHz 클럭이라고 가정해 보겠습니다. 그렇다면 주기(period)는 10ns일 것입니다.

단순화를 위하여 여기서는 T1=T2=0ns라고 가정하겠습니다. 그리고 Setup과 Hold도 무시하겠습니다.

foo와 bar사이에 "AND"게이트가 하나 있습니다. 이 AND게이트의 CELL_DELAY = 7ns라고 가정해 보겠습니다.

클럭의 주기가 10ns이니까, Delay는 10ns를 넘으면 안됩니다.

여기서는 delay = 7ns가 되었지요, 그렇다면 약 3ns의 여유가 있습니다.

이 말을 "3ns의 Slack이 있다."라고 이야기 합니다.

slack은 "마진(여유)"이라고 해석하면 될 것입니다.

만약 foo와 bar 사이의 AND게이트의 CELL_DELAY = 15ns 였다면 "Timing Violation"상황 입니다.

이 때 타이밍 리포트를 뽑아 보면 "SLACK = -5ns"라고 나올 것입니다.

즉 "네거티브 슬랙"의 의미는 우리가 원하는 조건(timing constraint)에 이 만큼 만족하지 못했다는 것을 의미하게 됩니다.

 

4. SLEW
Slew는 출력 PAD의 특성 값입니다. Slew의 의미는 '기울기' 입니다.

위의 세숫대야 모델로 본다면 RISE_DELAY와 FALL_DELAY를 통칭하는 의미로 보시면 됩니다.

상식적으로는 수도꼭지(drive strength)가 굵어서 '0'에서 '1'로 가는 시간이 짧으면 짧을 수록 좋은 것 처럼 보입니다.

하지만 무조건 빠른 것이 모든 면에서 좋은 것은 아닙니다.

 

즉, 항상 slew(기울기)가 높은 것이 좋은 것은 아닌 것입니다.

굵은 수도꼭지(낮은 기울기)의 단점은 두 가지가 있습니다.

(1) 0V에서 출발하여 3.3V로 도달하는데 걸리는 시간이 "아주" 짧아지면, 그만큼 원하지 않는 전자기파가 발생하기 쉽습니다.

     이런 전자기파는 EMI 또는 노이즈라고 부르며 보드(PCB)상의 다른 소자들에게 간섭을 주는 등 아주 좋지 않습니다.

(2) 예를 들어 64비트 버스가 출력으로 사용되는 디자인이 있다고 하겠습니다. 동작을 하다 보면, 어떤 우연한 상황에서 64개의 '출력' 모두 '0'에서 '1'로 올라가야 하는 싯점이 있을 것입니다.  [주1] 이 처럼 동시에 스위칭 하는 순간, 64개의 패드를 짧은 시간에 전압 레벨 '0'에서 '1'로 올리기 위해서는 엄청나게 굵은 수도꼭지로 물을 퍼부어야 할 것이고, 이 때 물의 양 즉, 순간전류는 상당히 많이 필요하게 됩니다.

이 처럼 순간 전력 피크치가 높으면, 칩 내부에 전압 강하 등의 문제가 발생할 수도 있을 것입니다.

이러한 이유들로 인해 '기울기'를 고의적으로 약간 "뉘여"주는 것이 전기적 특성을 좋게 만들기 때문에 "Slew Rate Control"이 가능한

출력 패드들이 있습니다.

[주1] 참고로 이렇게 동시에 스위칭하는 64개의 출력 패드를 SSO(Simultaneous Switching Outputs)라고 부릅니다

출처 : THE WORLD OF NEO
글쓴이 : 세계를 구한 Neo 원글보기
메모 :