본문 바로가기

공부/Accelerator Design

1. Clock & Timing _ Violation

728x90

Sequential Circuit이란 이전 state + Input값으로 Output이 결정되는 회로이다. 입력에 의해 출력이 바로 결정되는 Combination Circuit과 Memory로 보통 구성되며, F/F사이의 combination logic이 path를 이루게 된다.

 

Vivado에서 RTL coding을 한 후 Simulation을 돌리게 되면 어떤 종류의 시뮬레이션인지에 따라 다르지만 timing violation이 발생하는것을 종종 목격할 수 있다. 실제 HW를 사용하기 때문에 그 안에서 신호가 움직이는데 걸리는 시간이 있기 때문에 즉, delay가 발생하기 때문에 발생하는 문제인데 여기서 사용되는 개념이 Slack이다.

다른말로 Margin이라고도 하는데 Slack의 정확한 식은 Required path delay - Real path Delay이다.

Real path Delay가 더 커서 slack<0이 되는 순간 setup time violation이 발생하게 되며 큰 문제가 발생한다.

 

Critial path의 경우 slack이 가장 작은 path이다.

 

D-Flip flop을 이용한다고 생각하고,

우선 timing violation에 대해 정리해보자.

D-F/F이 정상적으로 동작한다는것은 d로 들어간 값이 clk edge에서 q로 잘 넘어간다는 의미이며, clk edge에서 d의 값을 q로 잘 sampling한다는 말과 같다.

 

1. hold time violation

2. setup time violation

 

hold time violation의 경우 Data가 너무 빠르게 이동해서 뒤에 있는 F/F이 Data 안정화 유지시켜야하는 시간에 d가 바뀌어서 발생하는 문제이고, -Max delay constraint와 관련됨.

setup time violation의 경우 Data가 너무 느리게 이동해서 Setup time 시작 전까지 Data가 안정화되지않아 발생하는 문제이다. -min delay constraint와 관련됨.

 

관련 표를 살펴보기 전에 용어정리를 먼저 해보면,

t_pd: Propagation Delay

t_cd: Contamination Delay

t_pcq: Propagation clk to q 

t_ccq: Contamination clk to q

t_setup: Setup time

t_hold: Hold time

 

Propagation delay = 이동시간 +transient 시간 즉, 출력이 안정된 값에 완전히 도달하는데 걸리는 최대 시간이며,

Contamination delay = 신호가 변화한 후 출력이 안정적인 값을 가질 때까지의 최소 시간 즉, input 신호가 변경되었을때 출력이 새로운 안정된 값으로 변하기 시작하는데 걸리는 최소 시간이다.

정리하면, Propagation은 출력이 새로운 안정 상태에 도달하는데 걸리는 최대 시간,

Contamination은 신호가 변화한 직후 출력에 변화가 시작되는 시간이다.

 

Truth Table에서 input에 일정한 값이 주어지면 output에 특정 값이 오게 되는데 이 때 input값이 주어지자마자 output값이 바로 딸깍하고 나오는것이 아닌 transient 구간을 거쳐 특정 값이 나온다는 것을 이해해야한다. (HW를 다루기 때문이다. delay가 없을 수가 없다.) 

 

쉽게 생각하면, Contaminate는 Input에 변화가 생기고 언제부터 output이 transient하게 흔들리기 시작하느냐의 문제이기 때문에 이는 transient response가 시작하는 시간으로 이해할 수 있고 즉, 가장 짧은 시간을 의미한다.

Propagation은 Input이 바뀔때 ~ transient가 끝나고 output쪽에 steady state가 시작하는 시간으로 Truth table을 통해 예측한 값은 t_pd 이후부터 나온다.

 

Combination마다 path가 달라서 delay가 전부 다른데, 제일 짧은 path가 t_cd만큼 지나야 output이 변하기 시작한다. 

다만, 완벽한 출력값은 제일 긴 path의 t_pd만큼 지나야 출력되게 된다.

 

위 그림에서 A도 누군가의 output이기 때문에 흔들리는 구간이있으며, Y의 출력이 변하는 부분은 A의 가장 짧은 부분 + t_cd,  ~~ 가장 긴부분 + t_pd이다. 

 

이제 setup time과 hold time에 대해 알아볼 차례이다.

이 둘을 만족해야 clk edge근처에서 d값이 q로 넘어가게 되고,

setup time은 clk edge이전에 input이 안정화되는데 걸리는 최소한의 시간이고

hold time은 F/F이나 reg가 새로운 data를 안정적으로 기억하기 위해 필요한 최소시간이다. 즉, clk신호가 변한 후 입력 신호가 안정적으로 유지되어야하는 시간이다.

 

 

우선 clk edge ~ clk edge가 나타나는 한 주기 >= 가장 긴 path값이어야한다. 가장 긴 path delay는 skew와 jitter를 고려하지 않을시 t_pcq1 + t_pd + t_setup2이게된다. (여기서 숫자는 F/F 순서이다.)

 

다음으로 t_hold 보다는 가장짧은 path의 delay가 커야한다. 즉, t_hold < tccq1 + t_cd이며,

이렇게 보면 한눈에 알 수 있다.

 

그렇다면 이런 timing violation이 발생하면 어떻게 해결해야 할까?

 

holdtime violation의 경우 data가 너무 빠르게 이동하는것이 문제이므로, path상 Buffer를 추가해주거나, t_skew를 조절해준다.

setuptime violation의 경우 data가 너무 느리게 이동하는것이 문제이므로, clk freq를 감소시켜 전체 주기 자체를 높이거나, pipeline설계를 통해 data 통과 시간 자체를 줄여버리면된다.

 

 

 

 

 

다음으로 회로상 여려 변수가 있어(ex: load cap) t_skew와 t_jitter를 고려해줘야한다. 해당 내용은 다음에 이어서 작성하도록 하겠다.

 

 

728x90

'공부 > Accelerator Design' 카테고리의 다른 글

4. Interconnect_2  (1) 2025.01.12
3. Interconnect_1  (0) 2025.01.06
2. For advanced performance of Hardware  (0) 2025.01.02
Preview  (1) 2024.12.29