베릴레이터의 장단점(Pros & Cons Verilator)
디지털 반도체 설계에서 검증의 제일선에 자리하는 도구는 하드웨어 언어 시뮬레이터다. 그런데 ETRI050 디자인 킷[링크]의 예제들을 수행하다 보면 베릴레이터(Verilator)라는 도구가 사용되고 있음을 발견 하게 된다. 정통(전통?) HDL 설계자에게 어쩌면 생소할 이 도구는 레지스터 트랜스퍼 수준(RTL)의 베릴로그 기술(description)을 C++ 또는 SystemC로 변환하는 언어 번역기다. 예제에서 왜 이 툴을 채택했을지 의문을 가져봤을 것이다. 오픈-소스로서 "무료" 사용이 가능 했기 때문 만은 아니다. 이미 상용 HDL 시뮬레이터[*]가 무상 라이센스 정책을 실시하고 있는 마당에 굳이 "언어 변환기"를 사용하는 이유를 디자인 킷 개발자의 취향이라고 한다면 단순한 답변이다.
[*] QuestaSim은 베릴로그, 시스템 베릴로그, VHDL은 물론 SystemC/C++를 모두 아우르며 언어 표준을 가장 넓은 범위로 지원하는 강력한 상용 HDL 시뮬레이터다. 인텔(intel)에서 지멘스 EDA(옛 멘토그래픽스, 그 이전에는 모델텍의 ModelSim)로부터 라이센스를 받아 무상으로 배포하고 있다. FPGA의 양대 벤더 중 하나인 알테라가 인텔에 합병되면서 라이센스 배포권이 인텔로 옮겨갔다. 또 다른 FPGA 벤더인 자일링스도 한 때 ModelSim 라이센스를 배포하기도 했으나 지금은 중지하고 자사의 XSIM을 무상 배포하고 있다.
베릴레이터의 홈페이지에 들러 그들의 주장을 들어보자.
https://www.veripool.org/verilator/
이 툴은 베릴로그와 시스템 베릴로그 언어를 읽어 C++와 SystemC로 변환해 준다. 변환된 C++ 소스는 GNU C++ 컴파일러로 빌드할 수 있어서 실행 속도가 매우 빠르다고 한다. 이미 많은 설계 회사들에서 사용하고 있는 충분히 믿을 만한 도구라고 자랑한다. 오픈-소스 도구로서 누구든 스스로 빌드[**]해서 쓰던가 비용을 지불하면 개별 지원(Commercial Support)을 받을 수 있단다.
[**] x86/64 머신 뿐만 아니라 ARM 32/64 등 리눅스의 GNU C++ 컴파일러가 설치된 리눅스 머신에서 빌드할 수 있다.
상이한 하드웨어 구조를 가진 컴퓨팅 기계 사이의 이식성은 원시 코드가 그대로 배포되는 "오픈-소스"의 장점이다. 이는 "리눅스"라는 역시 오픈-소스 운영체제와 "빌드 툴" 덕분이다. 수많은 상용 C++ 컴파일러를 물리치고 개발 툴 전장을 평정한(!) GNU의 개발 툴은 이제 C++ 언어 표준을 이끌고 있다[link]. C++는 알고리즘 기술의 표준으로서 각종 크래스들 역시 ANSI C++언어 표준으로 제정되었다. 자료구조 라이브러리의 표준 크래스 STL(Standard Template Library)도 그중 하나다. SystemC는 시스템 수준 하드웨어 및 소프트웨어 모델링을 위해 개발된 C++ 용 오픈-소스 크래스 라이브러리로서 IEEE 표준 1666으로 제정되었고 현재 2023 개정판이 있다[SystemC LRM].
자체 사건구동(event-driven) 실행 체계(병렬 시뮬레이션 엔진)를 갖추고 그 위에서 작동되는 상용 HDL 시뮬레이터에 비해 언어 변환기를 통해 얻은 C++ 를 컴파일 하면 실행 속도가 빨라지는 것은 당연하다 하겠다. 언어변환기 "베릴레이터"를 선호한 이유가 속도만은 아니다. 상용 도구들의 정책 전환을 예상하기 어렵다는 점도 있다. 일순간 무료 라이센스 정책을 중단 하지는 않겠지만 해당 툴의 개발 방향 전환을 외부인으로써 예측이 어렵다는 점이다. 컴퓨팅 언어는 지속적으로 변화 발전하고 있고 빌드 툴 역시 이에 따른다. HDL도 예외는 아니다. 상용 HDL 시뮬레이터는 SystemC를 지원하하기 위해 GNU 빌드 툴들을 내장하고 있다. SystemC의 버젼이 3.x로 전환된지 몇년이 지났지만 상용 시뮬레이터에 내장된 버전은 2.x이며 C++ 빌드 툴 역시 구버젼이다. 이에 덧붙여 그동안 수없이 쌓아온 각종 과학기술 및 데이터 시각화 라이브러리들을 테스트벤치에 활용하려면 하드웨어 언어 표준에서 제정한 외부 언어 인터페이스 기준(PLI/VPI, DPI/UVM, VHPI)을 따라야 한다는 점도 부담이다. 차라리 HDL을 표준 C++ 언어로 변환하여 다른 라이브러리(심지어 모든 컴퓨팅 언어를 포함)와 손쉽게 묶어 빌드하는 편이 수월하다. 게다가 우리는 C++ 라는 개발 언어에 너무나 익숙하지 않았던가! GDB와 DDD 같은 디버깅 도구들의 장점은 더 말할 필요도 없다. C++는 운영체제 자체를 만든 도구이며 수많은 컴퓨팅 언어들이 이로부터 파생되었다. C++ 라면 컴퓨터에서 할 수 있는 모든 짓을 할 수 있다! 심지어 임의의 주변장치를 달아 구동할 수 있는 장치 구동기(device driver)의 제작도 매우 수월하다. FPGA 하드웨어를 SystemC 테스트벤치 소프트웨어에 엮어 검증하는 코-에뮬레이터(Co-Emulator)를 단 몇줄의 C++ 코드로 구현한다는 점은 엄청난 장점이라 하지 않을 수 없다.
이럼에도 불구하고 우리는 왜 상용 툴을 찾고 있는가?
요즘 뜬다는 제미나이 AI에게 베릴레이터의 장단점을 얘기해 달라고 했더니 이렇단다. AI가 내놓은 답변 속에서 이 질문의 답을 찾아보자. AI에게 싫컷 물어봤는데 뭔말인지 모른다면 그보다 슬픈일은 없을 것이다. 단, AI는 베릴레이터를 사용해본 당사자가 아니라는 점을 잊지말자. 이 장단점은 인터넷상의 누군가 경험과 주장을 요약해 놓았을 뿐이다. 그 "누군가"에 대한 신뢰성은 알아서 판단하자.
Verilator is a high-performance, open-source compiler that converts Verilog/SystemVerilog code into C++ or SystemC models for simulation. It is widely used for SoC-level, large-scale simulations, offering superior speed compared to traditional event-driven simulators, but it has specific limitations regarding language constructs and modeling techniques.
Pros of Verilator
Extremely Fast Simulation: Verilator compiles Verilog into executable C++, often outperforming proprietary simulators by converting designs into optimized, multithreaded models.
Cost & Licensing: It is free and open-source (LGPL/Artistic license), allowing for unlimited parallel regression tests without license costs.
Performance Scaling: It scales well on a single machine and supports multithreading.
Integration with C++/SystemC: It allows for easy integration of C++ testbenches and DPI (Direct Programming Interface) calls, making it ideal for high-level modeling.
Code Quality Checks: It performs linting during compilation, helping to identify potential bugs early.
Cons of Verilator
Limited SystemVerilog/Verilog Support: It primarily supports synthesizable code and does not support full SystemVerilog IEEE standards, such as behavioral delay modeling (#10).
Two-State Simulation: It operates on a 2-state logic system (0/1), lacking native support for 4-state simulation (X/Z/U/W), which can make debugging initialization issues harder.
No Mixed-Language Support: It does not support VHDL or mixed-language simulations directly.
No Encrypted IP Support: It cannot handle encrypted IP cores, limiting its use in environments heavily reliant on vendor-provided IP.
Setup Complexity: Testbenches must be written in C++ or SystemC, which requires more effort than writing testbenches in Verilog/SystemVerilog.
Summary Table
Summary Comparison (2026)
Feature Verilator Commercial(VCS/Questa/Xcelium)
------- --------------------------- ------------------------------
Cost Free/Open Source Very High (Per-seat license)
Logic 2-State (0,1) 4-State (0,1,X,Z)
Speed Excellent(Compiled C++) Varies(Interpreted or Compiled)
Testbench C++,Python,SystemC SystemVerilog(UVM),VHDL
Use Case SoC logic,Unit tests, Final sign-off, Gate-level,
RISC-V Mixed-signal
Best Use Case: Large-scale SoC verification
Weakness: Behavioral simulation, Analog modeling
"오픈-소스"가 제아무리 장점이 많아도 "회사"에서 안쓴다면 그만이다. 베릴레이터를 사용한다는 회사들의 목록을 보면 꽤나 진취적이거나 스타트-업들이다. 우리가 아는, 반도체 시장을 좌지우지 한다는 그 회사는 보이지 않는다. 사실 유명 EDA 벤더들의 설계 검증용 에뮬레이터의 판매 공략 대상업체에서도 찾아보기 어렵다. 메모리 시장 호황에 미래를 맞겨도 될까?
댓글 없음:
댓글 쓰기