Metastable문제와 clock domain crossing문제

아마도 비메모리 반도체 설계를 지망하시는 분들이 입사시 면접에서 가장 많이 받는 질문중의 하나가 바로 “metastable이 무엇이며, 이를 어떻게 해결할 수 있는지 설명해 보세요” 가 아닌가 생각합니다.

실제로 미국 비메모리 반도체 설계(ASIC designer) 직종의 면접에서 가장 많이 질문으로 사용되는 문제가 무엇인지 이야기가 나온적이 있는데, 위의 문제가 가장 많이 사용되었다고 하네요.. (이 내용을 어디서 봤는지는 잊었습니다.)

학교에서 digital system을 배우시고, HDL을 배우시고, ASIC을 시작한지 얼마 안되는 분들이 간과하기 쉬운 문제가 바로 이 metastable문제이며, 시뮬레이션에서는 별다른 문제 없어보이는데, 칩이 죽는 큰 원인중의 하나입니다.

Metastable?
Metastable은 사전적 의미로 “준안정성”이라고 해석됩니다. 즉, 안정화된 값을 가지지 않은 상태인 것이지요.
로직의 출력 전압에 따라 논리적인 값 0/1을 판단하는 디지털 로직에서는 0/1로 판단될 수 없는 전압이 출력되는 경우 이때의 전압 수준을 “undefined voltage”라 부르고, 로직상으로는 이를 “metastable” 상태인 것으로 판단합니다.

플립 플롭에서의 metastable 상태 출력
Flipflop이 입력된 값을 정상적으로 출력단으로 전달하기 위해서는 clock edge의 앞뒤로 일정시간동안 데이터가 안정화 되어 있어야 하는데, 이를 setup time/hold time이라고 합니다.
만일 데이터가 setup/hold time동안 안정화되지 못하고 데이터가 변하면 플릿플롭의 출력 transition time이 비정상적으로 길어지게 되어서 결과적으로 0/1로 판단할 수 있는 수준의 voltage level에 도달하지 못하는 상태가 발생할 수 있습니다. 이런 경우가 바로 플립플롭에서 metastable출력이 발생하는 경우이며, 이 경우 아주 치명적인 논리적 오류를 발생시킬 수 있습니다.

따라서, 플립플롭을 사용하는 synchoronous 설계에서는 setup/hold 시간을 고려하여 설계를 합니다. 즉, 데이터가 다음 클럭의 setup time 이전에 도착하도록 하고, 같은 클럭의 hold time보다 늦게 데이터가 도착하도록 설계하는 것입니다.

Asynchronous input의 문제
플립플롭에 대한 asynchronous input은 이런 조작이 근본적으로 불가능하기 때문에, metastable상태가 발생할 수 있는 경우가 있습니다.
Asynchronous input이란 다른말로, 언제 들어와도 아주 큰 상관 없는 입력이겠죠? ^^;
그러니까, metastable을 피하기 위해 플립 플롭을 하나 더 추가하는 방법으로 metastable문제를 해결합니다.
즉, 첫번째 플립 플롭에서 metastable이 되더라도, 추가적으로 하나 더 플립플롭을 사용하면 에러가 의미있는 로직으로 전파되는 것을 막을 수 있다는 것이지요.  이러한 해결방법을 multistage flipflop혹은 multistage synchronizer라 부릅니다.

Clock Domain Crossing
사실 metastable문제는 clock domain crossing(CDC)때문에 복잡해집니다. CDC에 대한 이야기는 나중에 자세하게 이야기할 예정이고, 여기서는 간략히 소개만 하겠습니다.
클럭 도메인이라는 것은 동일 클럭 소스를 받는 FF들의 집합 정도가 될까요… 그런데, ASIC을 설계하다 보면 클럭 도메인이 여러개가 될 수 있고, 클럭 도메인 간에 데이터 전달이 일어납니다.

연관 있는 클럭, 예를 들면 주기가 25ns인 클럭과 50ns인 동일 소스에서 분주된 두개의 클럭인 경우, 두 클럭간의 연관성이 매우 크기 때문에 clock domain crossing에서 별로 고려할 사항이 없습니다. 단지 합성시 tool setting만 제대로 해주면 되죠. ^^;

하지만, 연관성 없는 두개의 클럭, 예를 들어 클럭 소스도 완전히 분리되어 있고, 주기도 제각각인 클럭 도메인에서 신호가 전달되는 것은 asynchronous와 별다를바 없는 상황인 것입니다. 따라서 클럭 도메인을 변경시키기 위한 synchronizer와 더불어 추가적으로 플립플롭을 하나 더 써서 metastable을 방지해야 합니다.

아주 간단한 구조적 CDC문제만 이야기 했는데, 사실 CDC에는 구조적인 CDC뿐 아니라 클럭 도메인을 넘어가는 두 신호(혹은 버스)가 다시 조합되어 사용될때 발생할 수 있는 문제인 reconvergence의 문제와 같이 고려해야할 사항이 몇개 더 있습니다. 이 이야기를 좀더 알고 싶으신 분은 cadence에서 나온 CDC 자료를 참조하시면 됩니다. 나중에 이 이야기도 더 해볼 기회가 있을거라고 생각합니다.

혹시 ASIC position에 면접 보시는 분들.. metastable은 꼭 기억하고 들어가세요.

추가> Timing 시뮬레이션 관련 내용은 이 posting을 보세요

Mentor의 Summit Design 인수!

우와~! 오늘 mentor graphics가 summit design을 인수했습니다.

[wp]Mentor Graphics[/wp]는 뭐 다 아시다시피 EDA업계의 number3 이죠..^^; (누가 넘버 쓰리래~! 넘버 투지.. 라고 멘토 다니는 제 친구는 이야기할지 모르겠지만, 작년 매출상에서 넘버 쓰리 맞습니다…여하튼)
Mentor의 (실질적인) 대표적인 툴로는 calibre, FPGA advantage, Modelsim등이 있는데, 아마도 modelsim이 front-end 설계자들 사이에서는 가장 유명할테구요.. 실질적으로 돈이 되는 분야는 calibre라고 들었습니다.

여하튼… 다시 돌아와서..
Mentor의 요즘 행보를 보면 system level design & verification에 아주 집중하고 있는 모습을 보여주고 있습니다.
여러가지 [wp]systemC[/wp]와 [wp]SystemVerilog[/wp]기반의 platform들을 연이어 출시하고 있구요..(지난 posting에서 잠시 소개해 드렸던 AVM도 있습니다만..) 투자도 열심인 듯 하더군요.

그러더니만… 역시 system level design & verification 부분에서 걸출한(그러나 국내에는 참 안알려진) summit design을 인수 했습니다.
summit design은 2000년도에 이미 시스템 디자인을 위한 virtual CPU라는 툴과 visual Elite라는 툴을 출시했으니, 시스템 설계/검증 부분에서는 아주 오래된 기업입니다.

저는 개인적으로 summit design과 여러가지 인연이 있는데요..

우선 제가 다니는 회사가 아주 예전에는 summit design korea라는 이름으로 출발했었고(네.. summit design 툴을 파는 회사였습니다), 제가 예전에 처음 HDL을 배울 시절(97년)에 Visual HDL for VHDL이라는 graphical HDL entry툴을 이용해서 설계/검증을 했었고, 약 2년간 제 주력 툴이었습니다. (사실 랩의 설계용 주력툴이었습니다. ^^;)
아직도 개인적으로 Visual HDL for verilog의 node lock키를 가지고 있고, HDL 결과를 그림으로 보여주는 툴 중에서는 가장 좋은 툴이라 생각하는데 변함이 없습니다. (FPGA advantage의 debussy보다 훨씬 좋습니다!)

단지.. HDL entry툴이라는 것이 text editor와의 싸움에서 비참하게 패배했다는 것이 문제겠지요..(entry가 아닌 분석 및 document용으로 아직도 가끔은 씁니다..)

Visual Elite for HDL.. 대부분의 툴이 visual HDL과 같군요.


딴 이야기로 흘렀군요..

맨토에서 summit design을 얼마에 인수했는지 알려지지는 않았습니다만, System Level design쪽에서 GUI 기반의 툴이 상당히 창궐하는 분위기에 적절하게 mentor에서 summit을 인수해서 이런 분위기가 더 힘을 받을 것이라 생각되는 군요.

맨토가 과연 시스템 수준 설게에서 어떤 결과를 낼지 궁금하군요..

NeXT와 OS/2, CP/M

이 세가지 예는 컴퓨터라는 분야에서 “시의 적절”이라는 것이 얼마나 중요한지 알려준다고 생각합니다.

역사상 가장 진보적 시스템이었던 [wp]NeXT[/wp].
[wp]NeXT step[/wp]이라는 역시 가장 진보적이었던 개발 시스템과 더불어 다양한 아이디어를 담고 태어났으나, 이를 뒷받침하기에 하드웨어는 너무 느리게 개발된..

하지만, NeXT의 기반 개념은 Mac OS X나 여러 객체지향 개발환경에 영향을 주었습니다.

[wp]CP/M[/wp]. DOS의 아버지.. 기술 위주의 Gary Kildall과 비지니스의 빌게이츠의 대결에서 빌게이츠가 승리했다는 뒷이야기를 남기며 사라져간 OS입니다. 초기 DOS가 CP/M을 모방했다는 것은 아주 유명한 이야기지요..

[wp]OS/2[/wp]. 혁신적인 [wp]GUI[/wp]환경. 하지만, MS의 windows 3.x 성공에 이은 배신..
이후 IBM만의 힘으로 얼마간 계속 개발되었지만 조용히 사라져버렸습니다.
OS/2 프로젝트를 통해서 축적된 기술이 MS windows에 많은 도움을 주었다는 것은 의심할 여지가 없습니다.

기대되었으나, 실패했다는 것은 보통 ‘기술적으로 뛰어났지만 시대가 받아들일 준비가 되지 않은..’으로 해석될 수 있을 듯 합니다.
그래도, 혁신적인 기술의 흔적은 여전히 남아서  Xerox Alto의 경우 우리에게 “마우스”라는 입력 장치를(스티브 잡스는 alto의 마우스에 완전 반해서 그때부터 지금까지 one-button mouse를 쓰죠..^^;) , NeXT는 혁신적인 Mac OS X과 GUI기반 IDE를, OS/2는 windows를, CP/M은 DOS를 남기고 갔습니다.

기술 개발이란 참 재미있습니다.

ENTlic님의 글을 읽다가 생각나서 적습니다.