버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
초기 집적회로 설계 시절, 엔지니어들은 트랜지스터와 연결을 종이에 직접 그려가며 실리콘 제작용 레이아웃을 설계했습니다. 회로가 복잡해지자 더 나은 설계 방식이 필요해졌고, VHDL이 먼저 등장해 하드웨어 기능을 기술하면 자동화 도구가 게이트 레벨로 변환해주는 흐름을 열었습니다. 이후 Verilog가 더 간결하고 유연한 문법으로 등장해 오늘날 반도체 업계에서 가장 널리 쓰이는 HDL(Hardware Description Language)이 되었습니다.
Verilog가 유용한 이유
Verilog는 구현 세부사항을 추상화해 동작(behavior) 중심으로 설계할 수 있게 합니다.
예를 들어 D 플립플롭을 트랜지스터 레벨에서 설계하려면 트랜지스터 배열, 라이즈/폴 타임, 클럭-투-Q 지연, 파워 소모, 드라이브 강도 등 물리적 특성을 모두 알아야 합니다. 하지만 Verilog에서는 "양의 에지에서 입력을 출력으로 래치한다"는 동작만 기술하면 되고, 물리 구현은 합성 도구와 표준 셀 라이브러리가 담당합니다.
예시: 업/다운 카운터
module ctr (
input wire up_down,
input wire clk,
input wire rstn,
output reg [2:0] out
);
always @(posedge clk) begin
if (!rstn)
out <= 3'b000;
else begin
if (up_down)
out <= out + 1;
else
out <= out - 1;
end
end
endmodule
이 코드는 카운터의 동작만 기술합니다. 실제 플립플롭 종류(면적/전력/성능 최적화)는 나중에 EDA 도구에서 표준 셀 라이브러리 중 선택합니다.
Verilog 학습 로드맵
- 기초 문법: 모듈, 포트, 데이터 타입(wire/reg), 연산자, 할당문
- 조합 논리:
assign, always @(*)로 게이트 레벨 로직 기술
- 순차 논리:
always @(posedge clk)로 플립플롭, 레지스터, 상태 머신 구현
- 모듈 계층화: 인스턴스화, 파라미터, generate 블록으로 계층 설계
- 시뮬레이션/검증: 테스트벤치, 태스크/펑션, 시스템 태스크(
$display, $monitor)
- 합성 가능 코딩 스타일: 래치 방지, 클럭 도메인 교차, 타이밍 제약 이해
- 고급 주제: FIFO, 파이프라인, AXI/버스 인터페이스, DSP 블록 활용
시작하기 전 준비
- 디지털 논리 기초(게이트, 플립플롭, 상태 머신) 이해
- 시뮬레이터: Icarus Verilog(무료), ModelSim/Questa, VCS, Vivado Simulator
- 파형 뷰어: GTKWave, Surfer, Verdi
- FPGA 보드(옵션): 실습 검증용 (예: Digilent Arty, Basys 3)
이제 Verilog 학습을 시작해봅시다!