본문 바로가기

VERILOG

Setup time, Hold Time, Violation, Slack

Setup Time & Hold Time

Setup time은 Flip Flop이 정상적으로 데이터를 캡처하기 위해 clock edge 이전에 input data value가 유지되어야 하는 시간이고,

Hold time은 Flip Flop이 정상적으로 데이터를 캡처하기 위해 clock edge 이후로 input data value가 유지되어야 하는 시간이다.

 

 

위 파형을 기준으로 Data가 FF의 input이고, posedge 방식의 FF라고 가정하자.

그러면 위 파형에서 clock이 0->1 이 되는 순간 Data를 캡처하여 output으로 내보내게 된다.

이때 "Setup Violation" 케이스와 같이 clock edge를 기준으로 setup time 도중에 값이 변경되었으므로 정상적인 동작을 보장하지 못하게 되고, (사실 도중에 값이 변경되었다기 보다는 이전의 combi logic이 크거나, routing path가 길거나 하는 등의 이유로 input data가 늦게 도착했다고 보는것이 맞긴 하다.)

"Hold Violation" 케이스의 경우, hold time 도중에 값이 변경되었으므로 마찬가지로 정상적인 동작을 보장하지 못하게 된다.

Setup Time Violation 해결방안

그래서 Setup time violation이 발생하면 어떻게 해결할까?

먼저 가장 쉬운 방법이 있다. 그냥 주파수를 낮추면 된다.

하지만 쉬운만큼 성능에 치명적인데, 같은 디자인에서는 clock 주파수와 성능(속도)이 비례하기 때문에 주파수를 낮추면 성능도 당연히 하락하게 된다. 그래서 이런 해결방식은 뒤에 나오는 해결방안의 적용이 불가능한 상황이나, IP 라이센싱을 받아 SoC에 integration 할 때, 내부 RTL 수정이 불가할 때만 사용하는 방식이다.

두번째는 문제가 되는 Path에 FF를 추가하는 것이다. setup time violation 의 경우 보통 combi logic depth가 깊어 거기서 발생하는 delay로 인해 setup time 이전에 FF 입력이 도착하지 않기 때문에 발생한다. (STA 엔지니어 입장에서는 다를 수 있지만..)

따라서 critical path에 해당하는 FF 사이의 combi logic을 잘 쪼개어 사이에 FF를 넣어주면 된다. 현업에서는 pipeline이나 register slice를 추가한다고 말한다.

그런데 디자인을 고려하지 않고 무작정 넣어버리게 되면 당연히 이상한 동작을 보일 것이다. 따라서 해당 FF의 output에 dependency가 있는 다른 FF들도 FF를 추가해야 할 것이다.

Hold Time Violation 해결방안

Hold Time Viloation은 Setup과 반대로 FF 사이의 delay가 너무 짧아서 값이 hold time 중간에 스위칭 되어버리는 상황에 발생한다.

따라서 buffer를 추가하는 등 combi logic을 중간에 넣어주면 된다.

Hold 와 Setup time violation 중 치명적인 걸 뽑자면 hold일 것이다. setup은 violation이 있는 채로 칩이 나와도 최악의 경우 실제 clock 주파수를 낮춰서 인가하면 동작이 가능은 하지만 hold는 그렇지 않다.

하지만 Hold time violation 의 경우 STA 후에 hold violation path에 buffer를 넣어주면 되기 때문에 RTL design 엔지니어 입장에서는 크게 고려대상이 아닌 것 같다. (사실 내가 PI업무를 해본적이 없어서 잘 모르겠다)

STA (Static Timing Analysis)란?

RTL design 단계에서는 칩 동작을 Noise, 온도 등의 이슈들을 고려하지 않고 이상적으로 보고 설계한다.

따라서 해당 이슈들을 고려하여 violation을 체크하여 타이밍을 검증하는 단계가 필요한데, 그게 STA이다.

보통 PrimeTime을 사용한다.

setup violation

data path를 최대한 빠르게 optimize 해주어야 함.

  • transition time 줄이기
  • cell Vth, drive strength를 바꿔 cell delay 줄이기
  • 미세공정으로 갈수록 crosstalk로 인하여 cell delay가 크게 증가하는데, 이러한 이유로 setup이 증가하면 routing간의 간격을 조금 벌려주거나 상위 metal로 care함

Hold violation

data path를 느리게 해서 data가 유지되어야 하므로 buffer를 insert하여 data path의 delay를 늘려준다.

  • Endpoint를 기준으로 buffer를 insert하면 수많은 buffer가 insert되어 physical적으로 issue가 발생할 수 있음.

-> delay cell을 적절하게 섞어서 insert하거나 common이 되는 data path에 buffer를 insert한다.

Slack의 개념

그림 3에 보인바와 같이 setup time interval의 가장빠른 경계(시간상 한계점)부터 데이터가

실제 도착한 시간사이의 절대시간간격을 Slack이라고 부릅니다.


그림 3. Slack을 표시한 타이밍도

따라서 Slack의 값이 음의 수(negative value)이면 setup timing violation이 발생하였음을 알 수 있습니다.

ASIC에서 Front end! 그중에서 PI! 특히 STA를 위해 필요한 핵심 개념을 정리해보겠습니다. 참고로 저는 Synopsys EDA tool만 써봤습니다~~

  1. Setup time, Hold time이 뭔가요? Violation이 일어나지 않기 위한 조건으로, 클럭의 엣지를 기준으로, 셋업은 엣지 이전에, 홀드는 엣지 이후에 데이터 값의 최소 유지시간입니다.
  2. Setup time violation과 hold time violation 중에 뭐가 더 나쁜가요? hold time violation입니다. hold time violation은 data path와 관련이 있습니다. Setup time violation은 클럭 주기 조절로 violation을 막을 수 있습니다.Tc2q + Tcomb ≥ Thold + Tskew
  3. Tc2q + Tcomb + Tsetup ≤ Tclk + Tskew
  4. Setup time Violation과 Hold time Violation을 어떻게 피할 수 있나요? Setup time Viloation은, Tc2q, Tcomb를 줄이고, 클럭을 늘리면 됩니다. (클럭 늘리는건 피하는게 좋으므로, 클럭 스큐를 조절해보거나 회로를 최적화해본다.) Hold time Viloation은, Tc2q, Tcomb를 높이면 됩니다. (버퍼 추가)
  5. Slack이 뭔가요? DRT와 DAT의 차입니다. Setup time Slack은 DRT-DAT이고, Hold time Slack은 DAT-DRT입니다. 차가 음수가 되면 Violation이 일어납니다.
  6. DRT=Capture edge - Launch edge - Setuptime이고, DAT는 로직들의 딜레이로 알 수 있습니다.
  7. 어떻게 Negative Slack을 개선하나요? 사이에 플립플롭(파이프라인)을 넣어서 DAT를 줄여주거나, 회로의 딜레이 최적화로 개선할 수 있습니다.
  8. Critical path가 뭔가요? Input에서 Output까지 Maxumun delay입니다.
  9. Critical path의 delay는 어떻게 계산하나요? 게이트 딜레이의 합+네트딜레이의 합 (네트딜레이를 볼 수 없다면, 팬아웃등을 참고함.)
  10. 클럭의 최소 주기는 어떻게 구하나요? 주파수는 어떻게 구하나요? Tc2q + Tcomb + Tsetup ≤ Tclk + Tskew freqeuncy=1/T
  11. 회로 설계자가 회로의 속도를 빠르게하는 방법? 최대값의 주파수를 사용한다. Critical path를 줄인다.(path가 input에서 output까지 지나갈 로직들을 복제하고 나눠서, 회로가 커지고 다른 회로가 늦어지는 대신에 느린 path가 지나치는 로직의 수를 줄임)
  12. STA가 뭔가요? STA는 시뮬레이션할 필요 없이 회로가 constraint에 대한 timing violation이 일어날 수 있는 모든 경로에 대해 정상 작동 여부를 판단하는 방법. 기능 검증은 하지 않습니다