사악한 쌍둥이 full_case와 parallel_case

원제은 “full_case parallel_case”, the Evil Twins of Verilog Synthesis 이다. [download]

RTL 시뮬레이션과 gate-level 시뮬레이션 결과가 달라지는 이유가 무엇일까? 그 중 한가지는 case문의 잘못된 사용때문이다. 이것이 얼마나 중요한 것인가는 저 페이퍼의 제목만 봐도 알 수 있다. 오죽하면 ‘사악한 쌍둥이’라고 했겠는가? 또 이 페이퍼는 SNUG-1999에서 Best Paper로 선정된 것을 봐도 짐작할 수 있다.

Verilog를 잘 다루는 설계자라면 분명 if-else문보다는 case문을 선호할 것이다.
Design Compiler에서 합성을 해보면 초기 HDL Compile단계에서 각 case문에 대하여 아래와 같은 내용을 출력한다.

Verilog합성을 하면서 이 내용을 그동안 눈여겨보지 않았다면 앞으로는 꼭 확인하길 바란다.
case문은 잘 사용하면 매우 강력한 능력을 발휘한다. 하지만 잘못사용하면 그만큼 애를 먹이는 존재이다. 근본적으로는 RTL 기술을 잘하면 문제가 없지만, 이를 돕기 위해서 Synopsys는 “//synopsys full_case parallel_case” 와 같이 RTL내에 directive를 사용할 수 있도록 하였다.

문제는 이 directive들을 어떻게 사용함에 따라 같은 RTL코드라도 합성결과가 달라진다. 설계자를 돕기위한 이 기능이 ‘사악한 쌍둥이’가 된 이유는 시뮬레이션시에는 이 directive들이 반영되지 않기 때문에 gate-level시뮬레이션과 차이를 만들기 때문일 것이다.

더 자세한 설명은 다음 기회로 미루고, 쉽게 설명되어있는 내용이므로 직접 읽어보길 권한다.  [download]

3 thoughts on “사악한 쌍둥이 full_case와 parallel_case

  1. 도니님의 simplecore설계를 읽어보고 감명받은 한사람입니다. 이렇게 베이비웜 님이랑 같이 웹상에서 보게되다니 반갑네요. 저도 이제 4학년을 마치면 좀 더 전문적인 아키텍쳐의 길을 걷게 될 듯합니다. 아무튼 종종 들르겠습니다.

    • 메일 계정이 꽉차서 스팸메일을 지우다 작년에 블랙엔진님이 보내신 메일을 이제야 봤습니다. ㅡㅡ;;
      답장드렸어요

    • 반갑습니다.
      꽤 오래전에 연재했던 강좌인데도 기억하시는 분들이 계셔서 보람을 느끼네요. 시간나는 대로 연재했던 칼럼을 찾아서 블로그에 올려놔야겠습니다.
      도움되실 만한 글들을 자주 쓰도록 노력하겠습니다.

Leave a Reply to Donny Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>