떠오르는 생각을 정리하는 공간
[003] clock skew 본문
Sequential logic을 사용하는 SoC 설계에서는 클럭의 edge에 트리거하여 동작하는 것이 일반적입니다. 특히 최근에는 성능을 높이기 위해 클럭을 높이면서 작은 timing의 변화가 전체 칩에 미치는 영향이 커지고 있습니다. 그래서 이번 주제는 SoC 설계 과정에서 중요한 timing에 관련된 이야기를 해보려고 합니다.
SoC의 동작과정은 F/F이나 레지스터에 클럭이 연결되어 동기를 맞춰, 설계자가 구현한 기능을 수행하게 됩니다. 하지만 wire length, temperature variations, capacitive coupling, material imperfections 등으로 인해서 clock skew가 발생하게 되면 각 로직에 클럭이 도착하는 시간이 달라지게 됩니다.
기본적으로 디지털 로직에서는 F/F과 같은 Sequential logic은 잠시 데이터를 저장하고, 중간에 combinational logic에서 데이터를 계산한다. 또한 F/F과 F/F 사이는 단일 cycle 안에 동작하는 것을 기본으로 한다.
그래서 기본적으로는 클럭에 따라 데이터가 다음 F/F으로 이동하고, [그림2]와 같이 동작을 하게 됩니다. 하지만 clock skew가 발생하여 clock이 너무 빨리 도착하거나 늦게 도착하는 경우에 다음과 같은 문제점이 발생하게 됩니다.
[그림3]은 클럭의 rising edge 상황에서 데이터의 값이 바뀌고 있습니다. 로직에서는 현재 데이터의 값이 0인지 1인지를 구별할 수 없기 때문에 정상적으로 동작을 할 수 없습니다. 이를 해결하기 위해서는 clock의 주기를 늘려주거나 중간에 삽입되어 있는 comb. logic의 딜레이를 줄여 더 빠르게 데이터가 다음 로직에 도착할 수 있도록 해야 합니다.
[그림4]는 클럭이 변하는 과정에서 데이터의 값이 변경되어 정확한 값을 인식하지 못하게 됩니다. 이를 해결하기 위해서는 combi. logic의 속도를 늦추기 위해 중간에 buffer를 삽입하여 추가적인 delay를 만드는 방법으로 해결할 수 있다. 또한 칩이 설계 된 후에 hold violation을 발견해도 고칠 수 없기 때문에 설계 과정에서 충분히 고려해야 합니다.
'개인 공부 > 정리' 카테고리의 다른 글
| [002] 폴링, 인터럽트, DMA (1) | 2016.05.29 |
|---|---|
| [001] GPU에 대한 간략한 설명 (0) | 2016.05.23 |
| [000] 전공 공부 정리를 위한 게시판 (0) | 2016.05.23 |