RTL & UVM Generator
코드 생성 AI 기반 RTL/테스트벤치 자동 생성 엔진
특허 및 지적재산권
"LLM 기반 RTL 코드 및 UVM 테스트벤치 동시 생성 시스템"
- Transformer 모델 기반 구조-코드 변환 기술
- 문법 검증 내장 코드 생성 (Syntax-Aware Generation)
- 테스트 커버리지 자동 최적화 UVM 생성
기술 개요
RTL & UVM Generator는 논리 합성된 마이크로아키텍처를 입력받아 Verilog/SystemVerilog RTL 코드와 UVM 테스트벤치를 동시에 자동 생성합니다. GitHub Copilot처럼 코드를 제안하는 수준이 아니라, 완전히 동작 가능한 RTL 전체를 생성하며 문법 오류율 0.1% 미만을 달성했습니다.
* RISC-V 5단 파이프라인 (3,247 LOC) 벤치마크 기준 (2024.Q4)
벤치마크 측정 방법론
• 입력: AI Logic Synthesizer 출력 (마이크로아키텍처 + 네트리스트)
• 출력 검증: Synopsys VCS 시뮬레이션 통과 + Formal Verification
• 문법 오류율: Verilator lint + VCS compile로 자동 검증 (3,247 LOC 중 3건 = 0.09%)
• 비교 기준: 수동 RTL 작성 (3명의 시니어 엔지니어, 평균 12일 소요)
• 측정 환경: AWS EC2 c6i.4xlarge (16 vCPU, 32GB RAM)
기존 기술 대비 차별점
vs GitHub Copilot / ChatGPT
❌ 코드 조각 제안, 전체 RTL 생성 불가
✅ CREAIM: 완전한 칩 설계 전체를 구조화하여 생성 (3000+ LOC)
vs High-Level Synthesis (HLS)
❌ C/C++ → RTL 변환, 제어 로직 제한적
✅ CREAIM: 아키텍처 다이어그램 → RTL, 복잡한 파이프라인/상태머신 지원
vs 수동 RTL 작성
❌ 개발자가 직접 작성, 수 주 소요
✅ CREAIM: 자동 생성 + 테스트벤치 포함, 10초 이내
핵심 기술 구조
1. Transformer 기반 Structure-to-Code
마이크로아키텍처 그래프를 Sequence로 변환 후 Transformer 모델로 RTL 코드 생성. 수백만 개의 오픈소스 RTL 코드를 학습하여 업계 관례에 맞는 코드 스타일 적용.
2. Syntax-Aware Generation
Verilog/SystemVerilog 문법을 트리 구조로 표현하고, 생성 과정에서 실시간 문법 검증. 이를 통해 컴파일 오류가 없는 RTL을 보장 (99.9% 정확도).
3. UVM 자동 생성 및 커버리지 최적화
RTL의 인터페이스를 분석하여 UVM Agent, Driver, Monitor, Scoreboard를 자동 생성. Coverage-Driven Verification으로 테스트 커버리지 85% 이상 자동 달성.
입력/출력 구조
입력
- • 마이크로아키텍처 그래프
- • 논리 회로 네트리스트
- • 인터페이스 명세 (포트, 신호)
- • 제약 조건 (SDC/UPF)
출력
- • RTL 코드 (Verilog/SystemVerilog)
- • UVM 테스트벤치 (전체 계층 구조)
- • 시뮬레이션 스크립트 (VCS/ModelSim)
- • 커버리지 리포트
자동 생성 코드 예시
// Auto-generated by CREAIM Chip Engine
module riscv_core #(
parameter XLEN = 32
)(
input wire clk,
input wire rst_n,
output wire [31:0] pc_o,
output wire [31:0] instr_o,
// ... more ports
);
// Pipeline Stages
reg [31:0] if_pc, id_pc, ex_pc, mem_pc, wb_pc;
reg [31:0] if_instr, id_instr;
// Fetch Stage
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
if_pc <= 32'h0;
end else begin
if_pc <= if_pc + 4;
end
end
// Decode Stage
always @(posedge clk) begin
id_pc <= if_pc;
id_instr <= if_instr;
end
// ... Execute, Memory, Writeback stages
assign pc_o = if_pc;
assign instr_o = if_instr;
endmodule실제 적용 사례
입력:
- • 아키텍처: 5단 파이프라인
- • 32개 레지스터
- • 분기 예측기 포함
생성 결과:
- ✓ RTL: 3,247 LOC (Verilog)
- ✓ UVM TB: 1,850 LOC
- ✓ 생성 시간: 8.3초
- ✓ 문법 오류: 0건
- ✓ 커버리지: 87.2%
현재 한계 및 제약사항
❌ 극도로 복잡한 상태머신
100개 이상의 상태를 가진 복잡한 FSM은 생성 코드의 가독성과 유지보수성이 저하될 수 있습니다.
❌ 비표준 코딩 스타일
회사별 특수한 코딩 컨벤션(주석 형식, 네이밍 규칙 등)은 추가 설정 없이는 완벽히 반영 불가.
❌ 시뮬레이터별 문법 차이
VCS/ModelSim/Xcelium 등 시뮬레이터별 미묘한 SystemVerilog 문법 차이는 수동 수정 필요할 수 있음.
기술적 챌린지 & 해결방법
챌린지 1: 긴 코드 생성 (3000+ LOC)
LLM은 보통 짧은 코드만 생성 가능 (수백 라인)
✓ 해결: Hierarchical Generation (모듈별 생성 후 조립) + Context Window 확장 기법
챌린지 2: 문법 오류 최소화
일반 LLM 생성 코드는 문법 오류율 10~20%
✓ 해결: Syntax-Aware Decoder + 실시간 문법 검증 + 자동 수정
챌린지 3: 고품질 UVM 테스트벤치
단순 랜덤 테스트로는 버그 검출 한계
✓ 해결: Coverage-Driven Test Generation + Directed Random 기법 적용