본문 바로가기
Digital Design/SoC

[SoC] Timing Violation (Setup/Hold/Skew/Jitter/해결법)

by 스테고사우르스 2023. 4. 14.

오늘은 Flip/Flop 간의 타이밍 문제를 다뤄보고자 합니다.

 

클락 타이밍에 문제를 일으키는 것들을 여러가지가 있는데,

Set-up/Hold Time, Clock Skew, Jitter 등을 소개하겠습니다.

 

물론 설계를 할 땐 하나하나 확인하지 않아도 됩니다.

STA (Static Timing Analysis) 툴을 이용하면 더 많은 violation들을 체크할 수 있기 때문이죠.

 

가장 기본적인 문제들 위주로 학습해보고,

그에 대한 해결법도 알아보겠습니다.

 


Set-up Time

먼저 Set-up Time 입니다.

Rising edge마다 값을 반영하는 D FlipFlop이 있다고 해볼게요.

그럼 이 FF의 Rising edge 직전에 D가 바뀌면 Q에 반영이 될까요?

 

정상적인 케이스 먼저 파형으로 보겠습니다.

Clock의 Rising edge에서의 D 값에 따라 Q가 변합니다.

(여기서 복습하자면 D FF는 rising edge에서 Q <= D 입니다.)

 

위의 경우는 Clock의 rising edge 시점의 D 앞뒤로 여유 시간이 널널합니다.

우리는 FlipFlop이 준비할 시간을 주어야 합니다.

이 시간을 Set-up Time 이라고 합니다.

D는 무조건 이 Set-up time 전까지 준비되어 있어야 합니다.

만약 준비되어 있지 않다면 어떤 문제들이 생길까요?

 

Set-up Time을 지키지 않았을 경우,

High까지 다 올라가지 못하고 툭 튀는 Glitch 현상이 발생하거나,

긴~ Delay가 생기게 됩니다.

 

회로를 설계할 때 이런 문제들이 생기면 곤란하겠죠?

그러면 Set-up violation이 발생하지 않기 위한 조건을 알아보겠습니다.

 

t_pcq : Clock to Q Propagation Delay
t_pd   : Combinational Circuit Propagation Delay

t_pcq는 F/F 그림으로 보면 이해하기 쉽습니다.

D에서 Q로 가는데 걸리는 시간이라고 보시면 됩니다.

FlipFlop의 Delay로 생각하셔도 되요.

 

t_pd는 가운데 조합회로의 Delay를 말합니다.

일반적인 게이트로 이루어진 덧셈기 등등을 지나가는 시간입니다.

 

그리고 이 두 시간은 Propagation delay로 critical path,

즉 가장 오래 걸리는 루트를 생각해서 계산해야 합니다.

 

이렇게 두 Delay와 방금까지 배운 Set-up time을 고려해야겠죠?

그러면 빨리 도착하는지 늦게 도착하는지 알 수 있을 겁니다.

그리고 그 시간을 Slack이라고 합니다.

Slack이 양수이면 여유있게 도착했다는 뜻이고,

Slack이 음수이면 늦게 도착해서 violation이 발생했다는 뜻입니다.

 

식으로 표현하면 다음과 같습니다.

이 식을 만족하지 않는다면 Set-up violation이 발생합니다.

 


Hold Time

t_ccq: Clock to Q Contamination Delay
t_cd  : Combinational Circuit Contamination Delay

Set-up Time은 최대시간 (Propagation Delay)를 고려해서 계산하였습니다.

그럼 반대로 최소시간도 고려해야 하지 않을까요?

 

Input에서 Output으로 가는 최소시간은 Contamination Delay라고 합니다.

이 Contamination Delay가 너무 짧으면 문제가 생길 수도 있습니다.

 

파형으로 보겠습니다.

t_ccq와 t_cd의 합이 t_hold 보다 작다면 Hold Time Violation이 발생합니다.

클락이 변하고 짧은 시간동안 플립플롭이 값을 유지해야 하는데 그렇지 못해서 발생한 문제입니다.

t_hold 동안 F/F의 값을 capture해야 하는데 너무 빨리 변해서 capture하지 못한 것이죠.

 

간단히 말하면 이전 플립플롭에서 출발한 시그널이 너무 빨리 도착해서,

다음 플립플롭의 값이 반영되기도 전에 바뀌어 버렸다는 뜻입니다.

 

Hold Time을 만족하기 위한 식을 한 줄로 정리할 수 있습니다.


Clock Skew

지금까지는 이상적인 clock에 대해 Set-up Time과 Hold Time을 지키기 위한 조건을 알아보았습니다.

하지만 물리적으로 이상적인 clock은 존재할 수 없죠.

그 이유는 여러가지가 있는데 대표적으로 Clock Skew가 있습니다.

t_a와 t_b가 같을 수 있을까요?

우리가 그림으로 표현할 때 나오는 '선'은 사실 '메탈'입니다.

메탈은 저항이 있기 때문에 전류가 흐르는 속도를 이상적(무한대)으로 보면 안됩니다.

 

그림상에서는 t_b > t_a 로 보입니다.

t_b - t_a 를 Clock Skew라고 부릅니다.

[ 받는 F/F - 보내는 F/F ]

 

이제 Clock Skew라는 변수가 생겼으니 Set-up Time과 Hold Time을 보정해줘야 합니다.

그럼 각각을 만족하기 위한 조건은 다음과 같습니다.


Clock Jitter

이번에는 Jitter라는 문제입니다.

Jitter는 원하는 신호와 실제로 발생하는 신호간에 발생하는 "불안정한 신호의 차이들"입니다.

좀 더 와닿게 표현하면 Clock이 흔들릴 수 있다 이거죠.

 

파형으로 보겠습니다.

1GHz 기준 이상적인 Clock은 1ns의 주기를 가져야 합니다.

하지만 Jitter가 발생하게 되면 0.9ns나 1.1ns 처럼 오차가 생길 수도 있습니다.

 

이때 빨리 도착하는 것을 + Jitter,

늦게 도착하는 것을 - Jitter라고 부릅니다.

 

이제 이 Jitter도 Set-up, Hold 만족 조건에 포함해야겠죠?

Jitter는 +값도 있을 수 있고, -값도 있을 수 있으니

(앞 FF에서 -, 뒤 FF에서 +)

최악의 경우의 수를 포함하기 위해 2배로 계산해줍니다.

 


Solution

지금까지 여러 문제들을 살펴보았습니다.

문제가 있으면 해결해야 하겠죠?

이제 해결법 몇 가지를 알아보겠습니다.

 

  • Clock 주기 변경

가장 쉬운 방법은 그냥 Clock주기를 바꾸는 것입니다.

1GHz 로 하였을 때 Combinational Delay가 너무 길어서 Set-up Time에 문제가 생긴다면

그냥 500MHz로 바꿔주면 깔끔하게 해결할 수 있습니다.

 

하지만 쉬운만큼 단점은 존재합니다.

전체적으로 느려지겠죠..

 

그래서 다른 방법을 선택하는 경우도 있습니다.

 

  • Clock Buffer

고의로 늦추는 방법입니다.

Buffer를 이용해 Delay를 주어 Clock Timing을 맞추는 방법입니다.

차이가 많이 날바엔 차라리 버퍼로 밀어버려서 타이밍을 맞추는 기법입니다.

오실레이터에서 가까운 곳에 있는 FF과 멀리있는 FF의 타이밍을 맞출 때 사용하면 좋겠네요!

 

  • Register Retiming

이번엔 Combinational Delay가 있을 경우 해결하는 방법입니다.

고작 몇 개의 Delay를 해결하려고 Clock을 다 바꿔버리는 건 손해겠죠.

Combintaional 회로에 조금 변경을 주면 해결할 수 있습니다.

이런 식으로 앞에서는 마이너스 슬랙이 나오고 뒤에서는 플러스 슬랙이 나올 때

회로에 변형을 주면 해결할 수 있습니다.

그냥 간단히 앞의 게이트 몇 개를 뒤로 보내버리면 됩니다.

물론 계산에 문제가 없다는 가정 하에!

 

이런 식으로 앞의 Combinational Circuit을 조금 떼어내서 뒤에 붙여버리면 해결됩니다.

둘 다 슬랙이 양수가 됐기 때문에 Timing 문제가 생기지 않습니다.

 

  • Time Stealing

위와 비슷한 방법입니다.

위에서는 Combinational Circuit을 건드렸는데, 이번에는 Clock을 건드려 보겠습니다.

가운데 있는 FF_B에 Delay가 조금 있는 CLK2를 연결해줍니다.

앞에는 널널하게 1.1ns가 되고 뒤에는 타이트하게 0.9ns가 됩니다.

이렇게 양 쪽 모두 만족할 수 있도록 clock의 타이밍을 맞춰주면 문제를 해결할 수 있습니다.

 

이것을 시간을 훔쳐온다는 뜻은 Time Stealing이라고 합니다.

 


이렇게 Timing Violation과 Uncertainty 그리고 해결법에 대해 알아보았습니다.

디지털 회로 설계를 할 때 가장 중요한 것 중에 하나가 타이밍입니다.

위에 있는 기본기만 제대로 알고 있어도 설계에 용이하게 사용할 수 있습니다.

댓글