HDL로 설계하는 디지털 회로와 RTL 흐름

HDL의 병렬 실행 모델과 Verilog·VHDL·SystemVerilog, RTL 설계·합성·검증 흐름을 정리한다.

2026-08-14 · 최초 발행 2026-01-16

회로를 코드로 모델링하는 HDL

디지털 회로가 복잡해지면서 회로도를 직접 그리는 방식만으로는 구조와 동작을 관리하기 어려워졌다. HDL(Hardware Description Language)은 회로의 구조, 동작, 데이터 흐름을 텍스트로 표현하고, 합성 도구가 이를 실제 회로에 대응하는 형태로 바꾸도록 한다. Verilog와 VHDL은 ASIC과 FPGA 설계에서 대표적으로 쓰이는 HDL이다.

소프트웨어 언어와 문법적으로 닮은 부분은 있어도, HDL이 표현하는 대상은 프로세서에서 순차적으로 수행할 명령이 아니다. 동시에 동작하는 하드웨어 구조와 시간 관계를 기술한다.

구분 소프트웨어 언어 HDL
실행 모델 순차 실행 병렬 실행
시간 개념 없음 명시적 시간 지연
대상 프로세서 명령 하드웨어 구조
결과물 실행 파일 게이트 넷리스트
리소스 무한(가상 메모리) 유한(물리적 회로)
하드웨어HDL 코드합성 도구넷리스트FPGA/ASIC소프트웨어소스 코드컴파일러실행 파일프로세서

HDL은 회로 모델링, 병렬 실행 표현, 여러 추상화 수준의 기술, 테스트벤치를 통한 시뮬레이션, 게이트 수준 넷리스트로의 합성을 지원한다.

Verilog, VHDL, SystemVerilog의 쓰임

Verilog는 1984년 Gateway Design Automation에서 시뮬레이션 용도로 개발됐고, 이후 합성 가능한 설계 언어로 발전했다. C 언어와 유사한 문법, 간결한 코드, 빠른 학습 곡선이 특징이며 미국에서 주로 사용된다. 표준은 IEEE 1364다.

module full_adder (
    input  a, b, cin,
    output sum, cout
);
    assign sum  = a ^ b ^ cin;
    assign cout = (a & b) | (cin & (a ^ b));
endmodule

VHDL은 1980년대 미국 국방부가 주도한 VHSIC(Very High Speed Integrated Circuit) 프로젝트에서 유래했다. Ada 기반 문법과 강한 타입 검사, 명시적인 선언이 특징이고 유럽에서 주로 사용된다. 표준은 IEEE 1076이다.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity full_adder is
    Port ( a, b, cin : in STD_LOGIC;
           sum, cout : out STD_LOGIC);
end full_adder;

architecture Behavioral of full_adder is
begin
    sum  <= a xor b xor cin;
    cout <= (a and b) or (cin and (a xor b));
end Behavioral;
항목 Verilog VHDL
기반 언어 C Ada
문법 복잡도 간단 복잡
타입 검사 약함 강함
코드 양 적음 많음
학습 곡선 완만 가파름
주요 사용 지역 미국, 아시아 유럽
표준 IEEE 1364 IEEE 1076

SystemVerilog는 Verilog를 확장해 설계와 검증 기능을 강화한 언어다. 객체지향 프로그래밍, 동적 배열·연관 배열·큐 같은 고급 데이터 타입, 어설션, 커버리지, 랜덤 제약 기반 테스트를 제공한다.

HDL 발전Verilog(1984)Verilog-95(IEEE 1364)Verilog-2001SystemVerilog(2005)VHDL(1987)VHDL-93VHDL-2008

추상화 수준에 따라 달라지는 설계 대상

동작 수준(Behavioral Level)은 알고리즘 관점에서 회로가 무엇을 해야 하는지 기술한다. 시스템 기능을 명세하거나 알고리즘을 검증하기 좋고, 일부 구문만 합성할 수 있다. 테스트벤치 작성에도 활용된다.

RTL(Register Transfer Level)은 레지스터 사이의 데이터 전송과 조합 논리를 기술하는 수준이다. 클록 기반 동기 설계를 전제로 하며, 레지스터(플립플롭)와 조합 논리로 구성된다. 합성 가능한 표준 수준이므로 타이밍과 면적을 추정할 수 있다.

// 동기 레지스터
always @(posedge clk or negedge rst_n)
    if (!rst_n)
        q <= 0;
    else
        q <= d;

// 조합 논리
always @(*)
    case (sel)
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
        default: y = d;
    endcase

게이트 수준(Gate Level)은 논리 게이트와 연결을 직접 다룬다. 합성 도구의 결과물인 게이트 수준 넷리스트가 이 수준에 해당하며, 설계 자체보다는 정확한 타이밍 분석과 게이트 지연 시뮬레이션에 사용된다.

동작 수준(Behavioral)RTL 수준(Register Transfer)게이트 수준(Gate Level)트랜지스터 수준(Transistor)높은 추상화빠른 시뮬레이션합성 표준설계 주요 수준정확한 타이밍검증용

RTL에서 구현까지 이어지는 흐름

합성 가능한 RTL을 작성할 때는 클록 에지 기반 순차 논리, 래치를 피하기 위한 완전한 조건문, 비동기 리셋 최소화, 블록 단위 모듈화를 고려한다.

시뮬레이션에서는 먼저 타이밍 정보 없이 RTL의 논리 동작을 확인한다. 테스트벤치가 입력 벡터를 적용하고 출력이 의도한 결과인지 검증한다.

module tb_full_adder;
    reg a, b, cin;
    wire sum, cout;

    full_adder uut (
        .a(a), .b(b), .cin(cin),
        .sum(sum), .cout(cout)
    );

    initial begin
        // 테스트 벡터 적용
        {a, b, cin} = 3'b000; #10;
        {a, b, cin} = 3'b001; #10;
        // ... 모든 경우 테스트
    end
endmodule

논리 합성은 RTL 분석 및 정교화(Elaboration), 기술 독립적 최적화, 기술 매핑(Technology Mapping), 타이밍·면적 최적화 순으로 진행된다. 결과로 게이트 수준 넷리스트, 타이밍 리포트, 면적 리포트, 전력 추정을 얻는다.

HDL 코드RTL 분석논리 합성기술 매핑넷리스트타이밍 제약(SDC) 라이브러리

FPGA에서는 논리 블록(LUT, 레지스터)을 배치한 뒤 프로그래머블 라우팅으로 연결한다. ASIC에서는 표준 셀 배치와 금속 배선을 수행한다. 이후 정적 타이밍 분석(STA)으로 모든 경로의 지연을 계산해 타이밍 요구 사항 충족 여부를 확인하며, 셋업 타임 위반, 홀드 타임 위반, 클록 스큐, 최대 주파수가 주요 검사 항목이다.

동기 설계와 데이터 경로 구성

동기식 설계에서는 단일 클록 도메인을 권장하고, 모든 플립플롭이 동일한 클록 에지에서 동작하도록 구성한다. 비동기 입력은 동기화기를 사용한다. 이 방식은 타이밍을 예측하기 쉽고 합성 도구가 최적화하기 좋으며 테스트도 용이하다.

파이프라인은 연산을 여러 단계로 나누고 단계마다 레지스터를 넣는 기법이다. 처리량(Throughput)과 최대 동작 주파수를 높이는 대신 레이턴시는 단계 수만큼 증가한다.

4단계 파이프라인입력Stage 1RegStage 2RegStage 3RegStage 4출력

FSM은 상태 전이와 출력을 명시해 제어 로직을 구성한다. 이진 인코딩은 상태 수를 log2(상태)로 표현하고, 원-핫 인코딩은 상태 수를 상태 개수로 표현한다. 그레이 코드는 인접 상태가 1비트 차이를 갖는다.

// 상태 레지스터
always @(posedge clk or negedge rst_n)
    if (!rst_n)
        state <= IDLE;
    else
        state <= next_state;

// 다음 상태 및 출력 논리
always @(*)
    case (state)
        IDLE: if (start) next_state = RUN;
              else next_state = IDLE;
        // ...
    endcase

메모리 추론에서는 HDL로 메모리 구조를 기술하면 합성 도구가 BRAM이나 분산 RAM으로 매핑한다.

reg [7:0] mem [0:1023];

always @(posedge clk)
    if (we)
        mem[addr] <= din;

assign dout = mem[addr];

클록 경계와 검증을 다루는 방법

서로 다른 클록 도메인 사이로 데이터를 전송하면 메타스테이빌리티가 발생할 수 있다. 단일 비트에는 2단 동기화기, 다중 비트에는 비동기 FIFO, 제어 신호에는 핸드셰이크 프로토콜을 사용한다.

클록 도메인 BCDC 로직클록 도메인 A데이터 소스동기화기또는비동기 FIFO데이터 수신

고수준 합성(HLS)은 C, C++, SystemC 등으로 작성한 알고리즘을 자동으로 RTL로 변환한다. 개발 속도와 알고리즘 탐색, 소프트웨어 개발자의 접근성 측면에서 장점이 있지만, 최적화된 수동 RTL보다 효율이 낮을 수 있고 복잡한 제어 로직에는 제한이 있으며 도구 의존성도 있다.

UVM(Universal Verification Methodology)은 SystemVerilog 기반의 표준 검증 방법론으로 재사용 가능한 검증 컴포넌트를 구축한다. 형식 검증(Formal Verification)은 수학적 방법으로 설계의 정확성을 증명하며, 등가성 검사(Equivalence Checking), 모델 검사(Model Checking), 정리 증명(Theorem Proving)이 포함된다.

생산성, 전력, 타이밍 수렴의 제약

HDL 설계에서는 복잡도 증가에 비해 생산성이 정체되고 검증이 병목이 되기 쉬우며, IP 재사용 필요성이 커진다. 전력 측면에서는 동적 전력 감소, 누설 전력 관리, 저전력 설계 기법을 함께 고려한다.

나노미터 공정에서는 배선 지연이 증가하고 클록 분배가 어려워진다. 타이밍 수렴은 한 번의 합성으로 끝나지 않으며 반복적 최적화가 필요하다.

HDL디지털 회로VerilogVHDLRTL