Category Archives: SoC & IP design

GeSHi를 사용하는 CodeHighlighter를 위한 verilog문법 정의 파일

테터보드나 WordPress에서 GeSHi라는 문법 강조기를 이용하여 code highlighting 모듈이 많이 만들어지고 있습니다. 제가 사용하고 있는 Lang-to-HTML도 그렇구요..

아쉬운 점은 제가 블로그상에 자주 포스팅하는 내용이 verilog HDL이라는 하드웨어 설계/기술 언어를 사용해서 설명되는 경우가 많은데.. GeSHi에는 verilog HDL code에 대한 하이라이팅 기능이 없다는 것이었습니다.
그래서, 그냥 GeSHi상에서 적용할 수 있는 verilog 문법 파일을 하나 만들어봤습니다.

GeSHi의 문법파일 지정 방식이 직관적이어서 처음 생각했던것 보다 빠르게 만들수 있었습니다. ^^;

적용은 간단합니다.
아래 파일의 압축을 해제하셔서,  플러그인의 geshi디렉토리에 올리시고, Language이름은 Verilog로 지정하시면 됩니다. 예를들어 Lang-to-html의 경우 code type=Verilog 으로 쓰시면 됩니다.
cfile29.uf.194297594D6A7AA240E756.rar
개인적으로 쓰려고 만든것이라 버그가 있을수도 있으니 혹 발견하시면 제보해 주세요..

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을 인수해서 이런 분위기가 더 힘을 받을 것이라 생각되는 군요.

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