
여는 글 꿀 먹은 벙어리🤢 개강 후, 첫 수업 시간이었다. 교수님께서 DRAM을 설명하시면서, 다음과 같은 질문을 하셨다. "DRAM은 무엇의 약자입니까?" 옆에 앉아 있던 학생이 대답했다. "Dynamic Random Access Memory입니다." 그러자, 옆에 앉아 있던 나에게 이렇게 물어보셨다. "그렇다면, DRAM에서 Dynamic은 어떤 의미입니까?" "…" 꿀 먹은 벙어리가 되었다. 뒤에 앉아 있는 학생에게 바통이 넘어갔다. "주기적으로 recharge를 해야 하기 때문에 dyanmic 메모리라고 합니다." 쪽팔림이 등골을 타고 흘러내렸다. 몰랐던 건 아니었다. 나도 질문을 받았을 때 'refresh'가 가장 먼저 떠올랐었기 때문이다. 그러나 혹시나 이게 틀린 답이 아닐까 두려웠다. 교수님..

IDM 회사의 디지털 회로 설계 부서에 들어가거나 팹리스 업체에서 일하게 된다면, 검증용 SRAM 모델은 대부분 셋업 되어 있을 것이라 생각한다. SRAM 모델은 어떤 공정을 사용할지 정해지기 전이나 메모리 spec이 확정되지 않았을 때, RTL 검증 환경을 만드는 과정에서 유용하게 사용된다. 신입사원 꼬꼬마 시절엔 나도 그냥 아무 생각 없이 가져다 썼던 것을 이제야 직접 만들어 보게 되었다. 메모리의 종류나 SRAM의 특성 등에 대해서는 여기서 자세히 다루지는 않을 것이다. 간략히 말하자면, SRAM은 래치에 데이터를 저장하는 휘발성 메모리이고, line buffer나 FIFO와 같이 데이터를 임시로 저장해야 하는 경우에 주로 사용하게 된다. 대부분의 사람들이 익숙한 DRAM의 경우에는 보통 logic..

어느새 Testbench 연재 3번째 포스팅이다. 크게 생각해보면, 아래 3가지 정도 내용이 더 남았고 Random configuration Reference model Monitor & Scoreboard Test case나 coverage, 그리고 regression 환경(Tcl, Script 등)은 일단 뒤로 미루어 두려고 한다. DUT에 맞게 stimulus를 넣어주는 부분을 소개하자니, 어플리케이션에 따라 천차만별일 것이라는 생각이 들었다. CPU, AP처럼 OP code와 Bus 입력 등이 필요할 수도 있고, display, sensor처럼 영상 바탕의 입력이 요구될 수도 있다. 여기서는 간단히 특정 프로토콜에 맞춰서 영상 스트림을 뒤로 출력하는 image driver를 구현해 보았다. 대부분..

Testbench의 기본이란 무엇일까? 검증하고자 하는 target에 spec에 맞는 입력을 제대로 넣어줄 수 있어야 한다. 랜덤 한 입력을 넣어주게 되지만, 검증력을 높이기 위해서는 적절한 constraints를 설정하여, 유의미한 값들이 생성되어야 한다. 검증 환경의 구현에 대해 이야기해보자면, 말마따나 정답이 없는 세계라고 할 수 있다. 검증 엔지니어의 취향이나 본인만의 신념대로 환경이 꾸려지기 때문에 같은 IP를 검증한다 해도 다양한 형태의 testbench가 가능하다. 어떤 것이 효율적인가에 대한 물음은 항상 검증 엔지니어들을 따라다니는 숙제이다. 좋은 검증 환경이란 유연하고 확장성이 좋아야하며, 재사용성도 보장되어야 한다. 그리고 언제나 검증에 있어서 빠른 처리 시간의 충족이라는 현실적인 문제..

Verilog를 사용해본 유저들이라면, SystemVerilog가 생소하지는 않을 것이다. SystemVerilog는 설계를 위해 사용되는 언어라기보다는 검증에 최적화되어 있다. 오로지 설계를 위해서라면, Verilog2001까지의 문법만으로도 대부분의 logic을 구현하기에 전혀 무리가 없다. 그러나 검증의 세계에 첫발을 디디면 완전히 새로운 세상이 펼쳐진다. Verilog라는 단일 언어로는 복잡한 logic을 효율적으로 검증하기에는 한계가 있다. 특히 Verilog로 OOP(객체지향) 관점에서의 Testbench를 꾸미기에는 무리가 있으며, 이를 위해서 탄생한 것이 오늘 소개할 SystemVerilog이다. 일단, 본인은 logic 검증 엔지니어가 아님을 밝혀두는 바이다. 솔직히 말해 IP 설계자로서..
지난 시간에는 Modelsim을 이용하여 간단한 Verilog code를 작성해보고 simulation까지 진행했었다. 간단한 combinational logic을 설계하였기에, timing diagram을 그릴 필요까지는 없었다. 그러나, 실제 우리가 다뤄야 할 회로들은 대부분 sequential logic과 combinational logic이 복잡하게 얽혀져 있다. 실제로 timing을 면밀히 고려하지 않아, 설계 의도대로 회로가 동작하지 않고 문제를 일으키는 경우가 종종 있다. clock 신호에 동기화되어 cycle마다 신호들이 어떻게 변화해야 하는지 어떤 timing에 low에서 high로 값이 천이하고 혹은 변화하지 않고 특정 시간까지 값을 유지해야 하는지 등등 꼼꼼하게 timing diagr..
지난 시간에 ModelSim을 다운로드 받고, 실행하는 방법까지 다뤄봤었다. 이번에는 간단한 디지털 회로를 설계하고 ModelSim을 이용하여 simulation을 진행하는 방법에 관해 이야기 하고자 한다. 만약, ModelSim을 다운받고 설치하는 방법을 알고 싶다면 ▼아래 링크를 클릭하길 바란다. https://dreamsailor.tistory.com/3?category=856131 전자공학이라는 학문을 배우기 시작한 사람 중에 회로 설계를 세부 전공으로 선택하는 사람들이 반드시 직면한다는 고민은 다음과 같다. 아날로그 설계냐 아니면 디지털 설계냐 현업에서 설계 업무를 하다 보니, 두 가지 서로 다른 background를 가진 사람들을 많이 만나게 된다. 이러한 사람들과 함께 일을 하면서 느꼈던 것..
마지막으로 ModelSim을 사용해서 Verilog simulation을 돌렸던 적이 언제였을까? 정확히 기억은 안 나지만 학부 4학년 때, VLSI 공학 수업을 들으면서 프로젝트를 했을 때였던 것으로 기억한다. ModelSim은 전자공학을 전공했다면, 디지털 시스템 설계 수업 때, 한번쯤은 다뤄봤을 법한 HDL simulation tool이다. 만약, 디지털 시스템 수업을 처음 듣는 사람들에게는 HDL(High-level Description Language)이라는 단어가 다소 생소하게 느껴질 것이다. 간단히 말하자면, 반도체 회로를 빠르고 쉽게(?) 설계할 수 있도록 정의된 프로그래밍 언어이다. 사실, 현업에서는 ModelSim을 많이 사용하지는 않는듯하다. HDL simulator로는 크게 Syno..