엔지니어라면, 누구나 한 번쯤 해봤을 법한 생각이 있다. 입력 spec을 넣어주면 자동으로 H/W를 뱉어주는 마법 같은 시스템 상상 속에서만 존재하는 이야기라고 생각할지도 모르지만, 이를 위한 다양한 시도들은 아직도 현재 진행 중이다. 자동화에 대한 열망은 VPP(Verilog Pre-Processor)와 C++/perl 등의 library를 사용하여 코드를 뽑아주는 것부터해서 emacs, vim 등의 edit 도구를 이용한 반복 작업의 최소화, IPXACT 등의 xml을 사용하여 packaging, integration과 문서까지 만들어주는 등의 다양한 형태로 실현되고 있다. 주 52시간 근무 제도, 워라벨 중시 등의 시대적 흐름으로 인해 우리나라의 기업문화도 더 이상 예전처럼 공돌이를 갈아서 제품을 ..
제목을 검증의 기본 Assertion이라고 했지만, 설계에 있어서도 Assertion은 필수적인 요소일까? 인터페이스나 버스, 프로토콜이 중요한 IP에는 조기 검증에 큰 도움이 된다고 본다. 하지만 Assertion을 쓰지 않는다고 해서 부족한 설계라고 할 수 없으며, 본인이 추구하는 방법대로 검증하는 실력 있는 설계자들도 많다. Assertion을 알고 제대로 사용한다면 불필요한 검증 리소스를 줄일 수 있고 내 설계의 어떤 부분이 수정되어야 하는지 빠르게 알 수 있다. 두 말 할 것 없이 검증 엔지니어라면 필수로 알아야만 하는 System Verilog 문법이며, IP의 입력이나 출력이 잘못되었는지 확인하기엔 이만한 방법이 없다. 설계 엔지니어일 때, Assertion은 내게 가깝고도 먼 이름이었다. ..
처음에 이 글을 쓰려고 기획했을 때, 카테고리를 Testbench로 두어야 할지, SystemVerilog 문법으로 해야 할지 고민했다. 그러다가 어찌 보면 지엽적인 내용일 수도 있는 randomization에 대한 글을 문법 카테고리에서 작성하기로 결정했다. Testbench 연재에는 아키텍처 측면의 접근이나 Top view에서 쓴 글이 더욱 어울리다고 보고, 앞으로 이러한 기조로 글을 써 내려갈 예정이다. 어떻게 생각해보면 무작위(random)라는 개념은 세상에 존재하는 매우 친숙한 개념이다. 굳이 오늘 점심 메뉴를 룰렛을 돌려서 결정하거나 게임 캐릭터의 스텟이 난수 값으로 결정되는 등의 특수한 상황이 아니더라도 말이다. Digital design의 세계에서도 random이라는 것은 매우 중요한 개념..
평화로운 나날이었다. 우리는 일정대로 설계를 마치고, 검증 coverage를 높이기 위한 마무리 작업에 한창이었다. 설계자가 놓칠 수 있는 부분에 대한 lint 체크도 완료하였고, 합성을 해보니 area, power, timing까지 문제 있어 보이는 부분은 없었다. 그렇게 과제 하나가 종료되고 다음 과제까지 잠시의 휴식이 주어지는 듯 했다. 그렇다. 모두가 그렇게 생각했다. 그 연락이 있기 전까지는... 항상 어떠한 문제가 생기면, 예고를 하고 이슈가 발생하는 경우는 없다. 몇월 며칠 몇 시에 문제가 생길테니, 단단히 준비하고 있으라고 먼저 알려줬더라면 이렇게 무방비로 당하고 있지만은 않았을 것이다. 과제 쪽에서 X(unknown) value가 우리가 설계한 block부터 뒤쪽으로 전파되고 있다는 연락..
논리 회로 설계나 디지털 시스템 등의 입문 과목을 들으면서 Verilog라는 언어를 배우게 되면, 가장 헷갈리는 부분이 바로 wire와 reg의 사용에 관한 부분일 것이다. 나 또한 digital 회로 설계자로서 커리어를 쌓아오고 있지만, 명확하게 이 data type에 대해서 이해하고 사용하게 된 것은 그리 오래되지 않았다. 내가 학부생으로 공부할 당시만 해도, 이 두 개념에 대해 어떠한 차이가 있는지 알려주는 자료를 찾기 어려웠지만, 이제는 구글에 검색어만 넣어봐도 자세한 설명을 제공하고 있는 블로그들을 쉽게 발견할 수 있었다. 정말이지 혼자 공부하기가 수월해진 세상이다. 블로그와 Youtube의 비약적인 발전으로 인해 지식을 쌓고자 조금의 노력만 한다면 누구나 해당 학문을 익히고 배울 수 있게 되었..