SystemVerilog로 인버터 만들기와 Verilator로 검증하기
// SUMMARY
SystemVerilog로 가장 간단한 디지털 회로인 인버터를 작성하고, Verilator를 사용해 RTL 문법과 기본 품질을 검증하는 방법을 알아봅니다.
디지털 회로 개발은 소프트웨어 개발과 비슷한 흐름을 가진다.
C 소스 ↓ 컴파일러 ↓ 실행파일
하드웨어에서는 다음과 같다.
SystemVerilog RTL ↓ 합성(Synthesis) ↓ Gate Netlist ↓ FPGA Bitstream / ASIC GDSII
즉, SystemVerilog로 작성한 코드는 일반적으로 **RTL(Register Transfer Level)** 이라고 부른다.
##가장 간단한 회로: 인버터
입력 신호를 반전시키는 인버터를 SystemVerilog로 작성하면 다음과 같다.
module inverter (
input logic a,
output logic y
);
assign y = ~a;
endmodule소프트웨어로 비유하면 다음과 같은 함수와 비슷하다.
int inverter(int a) {
return !a;
}다만 RTL은 소프트웨어가 아니라 실제 회로를 기술한다는 점이 다르다.
##Verilator란?
Verilator는 오픈소스 SystemVerilog 컴파일러이자 시뮬레이터이다.
주요 용도는 다음과 같다.
- —SystemVerilog 문법 검사
- —RTL Lint 검사
- —시뮬레이션 실행
- —AI가 생성한 RTL 코드 검증
상용 툴인 VCS, Questa, Xcelium과 비슷한 역할을 하지만 무료로 사용할 수 있다.
##문법 검사
가장 많이 사용하는 명령은 다음과 같다.
verilator --lint-only --Wall inverter.sv
오류가 없으면 아무 메시지 없이 종료된다.
문제가 있으면 다음과 같은 에러를 출력한다.
%Error: inverter.sv:5: syntax error
##왜 Verilator를 사용하는가?
AI가 생성한 RTL은 종종 다음과 같은 문제를 포함한다.
- —문법 오류
- —포트 연결 오류
- —신호 폭(width) 불일치
- —사용하지 않는 신호
따라서 AI가 RTL을 생성하면 가장 먼저 Verilator를 실행하여 기본 품질 검사를 수행하는 것이 일반적이다.
verilator --lint-only --Wall rtl/*.sv
##오픈소스 ASIC 플로우
현재 가장 유명한 오픈소스 디지털 설계 플로우는 다음과 같다.
SystemVerilog
↓
Verilator
↓
Yosys
↓
OpenSTA
↓
OpenROAD
↓
GDSII각 단계의 역할은 다음과 같다.
- —Verilator : 문법 및 RTL 검증
- —Yosys : 합성(Synthesis)
- —OpenSTA : 타이밍 분석
- —OpenROAD : 배치배선(P&R)
##마무리
SystemVerilog는 디지털 회로를 기술하는 RTL 언어이며, Verilator는 이를 검증하는 가장 유명한 오픈소스 도구 중 하나이다.
처음 시작한다면 다음 한 줄만 기억해도 충분하다.
verilator --lint-only --Wall inverter.sv
이 명령은 AI가 생성한 RTL이 최소한 올바른 SystemVerilog 코드인지 빠르게 확인할 수 있는 가장 간단한 방법이다.