Search

260318_0928_FPGA와 Verilog를 다룰 때 필수적으로 마주하게 되는 핵심 개념

1. 기본 디지털 블록 (Basic Digital Blocks)

카운터 (Counter) 및 타이머 (Timer)

카운터: 클럭의 상승 에지(Rising Edge)마다 내부 레지스터 값을 증가 또는 감소시키는 회로입니다. 주파수 분주(Frequency Division), 이벤트 발생 횟수 기록, 주소 생성기 등에 활용됩니다.
타이머: 카운터의 하위 개념으로, 특정 값에 도달했을 때 플래그를 발생시켜 시간 흐름을 제어합니다. 임베디드 시스템의 인터럽트 발생이나 정해진 주기의 데이터 샘플링을 위한 필수 요소입니다.

통신 프로토콜 (UART, SPI, I2C)

UART: 비동기 직렬 통신으로, 클럭 신호 없이 데이터 라인만으로 1:1 통신을 수행합니다. 구조가 단순하여 디버깅용 로그 출력에 주로 사용됩니다.
SPI: 동기식 전이중(Full-Duplex) 통신입니다. Master-Slave 구조로 고속 데이터 전송이 가능하며, 센서나 디스플레이 제어에 널리 쓰입니다.
I2C: 2개의 선(SDA, SCL)만 사용하여 다수의 장치를 연결할 수 있는 버스 구조입니다. 속도는 상대적으로 느리지만 배선 효율이 좋아 저속 주변 장치 연결에 최적화되어 있습니다.

데이터 관리 블록 (FIFO, Buffer)

FIFO (First-In-First-Out): 데이터 입력 순서대로 출력이 나가는 큐(Queue) 구조의 메모리입니다. 특히 서로 다른 클럭 도메인(Clock Domain Crossing) 간의 데이터 전달 시 안정성을 보장하는 핵심 버퍼 역할을 수행합니다.
Buffer: 일시적으로 데이터를 저장하여 장치 간의 처리 속도 차이를 흡수하고 데이터 손실을 방지하는 일반적인 저장 공간을 의미합니다.

FSM (Finite State Machine, 상태기계)

제어 로직의 뼈대입니다. 현재 상태와 입력 조건에 따라 다음 상태로 전이하며 하드웨어의 동작 시퀀스를 제어합니다. Moore 방식과 Mealy 방식으로 나뉘며, 복잡한 프로토콜 제어나 시스템 컨트롤러 설계의 핵심입니다.

2. 하드웨어 설계 핵심 개념

Verilog HDL 문법 및 모델링

하드웨어의 동작을 기술하는 언어입니다. assign을 이용한 조합 회로(Combinational Logic)와 always 블록을 이용한 순차 회로(Sequential Logic)의 구분이 명확해야 합니다. 코드가 소프트웨어처럼 위에서 아래로 실행되는 것이 아니라, 하드웨어 장치로 병렬 배치된다는 점을 이해하는 것이 관건입니다.

타이밍 해석 (Timing Analysis)

디지털 회로가 정상 동작하기 위한 가장 중요한 물리적 제약 조건입니다. 신호가 다음 레지스터에 도달할 때까지의 지연 시간(Slack)을 관리해야 합니다. Setup Time(설정 시간)과 Hold Time(유지 시간) 위반이 발생하면 시스템이 예측 불가능한 상태(Metastability)에 빠집니다.

파이프라이닝 (Pipelining)

하나의 긴 연산 과정을 여러 단계로 쪼개어 클럭 주기마다 데이터가 한 단계씩 이동하게 만드는 기법입니다. 전체 연산의 지연 시간(Latency)은 늘어날 수 있지만, 동작 클럭 주파수를 높여 단위 시간당 처리량(Throughput)을 극대화할 수 있습니다.

3. 시스템 레벨 설계 및 구현

FPGA 구현 프로세스 (Implementation Flow)

Synthesis (합성): Verilog 코드를 게이트 수준의 Netlist로 변환합니다.
Place & Route (배치 및 배선): FPGA 내부의 한정된 자원(LUT, Flip-flop 등)에 로직을 배치하고 물리적인 선을 연결합니다.
Bitstream Generation: 실제 칩에 로드할 수 있는 바이너리 파일을 생성하는 최종 단계입니다.
4비트 바이너리 카운터 예제
// 모듈 선언: 입력과 출력 정의 module counter_4bit ( input clk, // 시스템 클럭 input rst_n, // 비동기 리셋 (Active Low) input en, // 카운트 활성화 신호 output [3:0] count // 4비트 카운트 출력 (0~15) ); // 내부에서 값을 유지할 레지스터 변수 선언 reg [3:0] r_count; // 클럭의 상승 에지(posedge) 또는 리셋의 하강 에지(negedge)에서 동작 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin // 리셋 신호가 들어오면 0으로 초기화 r_count <= 4'b0000; end else if (en) begin // 활성화 상태일 때 1씩 증가 (15 다음은 자동으로 0으로 Overrun) r_count <= r_count + 1'b1; end // else: 현재 값 유지 (Latch 방지를 위해 순차 회로에서는 생략 가능) end // 출력 연결: 내부 레지스터 값을 출력 포트로 할당 assign count = r_count; endmodule
JavaScript
복사

실시간 데이터 및 신호 처리

센서 데이터 처리: ADC를 통해 들어온 로우(Raw) 데이터를 필터링하거나 규격에 맞게 변환합니다.
실시간성: CPU 기반 시스템과 달리 하드웨어는 지연 시간(Jitter)이 거의 없는 확정적 성능(Deterministic Performance)을 제공하므로 영상 처리나 초고속 신호 분석에 유리합니다.

SoC (System on Chip) 아키텍처 이해

FPGA 내부에 소프트 CPU(Soft-core)나 하드 CPU(Hard-core)를 올리고, 이를 직접 설계한 주변 장치(IP)와 연결하는 구조입니다. 버스 프로토콜(AXI, AHB 등)에 대한 이해가 필요하며 하드웨어와 소프트웨어의 경계를 설계하는 단계입니다.

4. 고급 하드웨어 가속 기술

MAC (Multiply-Accumulate) 유닛

곱셈과 덧셈을 동시에 수행하는 연산기입니다. 디지털 신호 처리(DSP) 및 인공지능 연산의 핵심 구성 요소이며, FPGA 내부의 전용 DSP Slice를 효율적으로 사용하는 것이 성능의 핵심입니다.

병렬 연산 구조 (Parallel Architecture)

순차적으로 명령어를 실행하는 CPU와 달리, 하드웨어는 수만 개의 연산을 동시에 처리할 수 있습니다. 데이터 병렬성(Data Parallelism)을 극대화하여 연산 속도를 기하급수적으로 높이는 구조를 설계합니다.

AI 가속기 (Neural Network Accelerator)

신경망 연산에 특화된 하드웨어 구조입니다. 가중치(Weight)와 활성화 함수 데이터를 메모리 계층 구조 내에서 효율적으로 재사용하여 외부 메모리 대역폭 병목 현상을 해결하는 로직을 포함합니다.

안녕하세요

관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

For technical and business inquiries, please contact me at “glory@keti.re.kr”