728x90
1. Handshake란?
- Handshake는 송신자(Sender)와 수신자(Receiver) 사이에서 데이터를 안전하게 주고받기 위한 동기화 과정
- 데이터 전송 시 송신자와 수신자의 상태를 동기화하지 않으면 데이터 손실이 발생할 수 있다.
- 기본적으로 Request(A)와 Acknowledge(B) 신호의 교환을 통해 이루어짐
_
# Handshake 과정 예시)
- 송신자(A)가 "데이터를 보낼 준비가 되었다"는 요청(Request)을 보냄
- 수신자(B)가 "데이터를 받을 준비가 되었다"는 응답(Acknowledge)을 보냄
- 두 신호가 모두 충족될 때 데이터가 전송됨.
-> 이 과정을 통해 데이터 전송이 안정적으로 이루어지며 손실을 방지할 수 있다.
==========𝔼𝔼𝟚𝟚==========
2. FPGA에서의 Handshake (AXI 인터페이스 기준)
2.1 AXI Handshake 개요
: FPGA에서 흔히 사용되는 AXI(Advanced eXtensible Interface) 프로토콜에서는 VALID(유효 신호)과 READY(준비 신호)를 이용한 핸드셰이크가 기본적으로 사용된다.
_
2.2 AXI 사용 신호
- VALID: 송신자가 데이터를 보낼 준비가 되었음
- READY: 수신자가 데이터를 받을 준비가 되었음
- VALID=1 & READY=1이 동시에 발생할 때 데이터 전송이 이루어짐
_
2.3 AXI Handshake 동작 과정
- 송신기(Sender)가 VALID=1로 설정 → "데이터를 보낼 준비 완료"
- 수신기(Receiver)가 READY=1로 설정 → "데이터를 받을 준비 완료"
- VALID=1 & READY=1이 동시에 발생하면 데이터 전송 완료
- 전송 후 VALID와 READY가 다시 0으로 초기화되거나, 다음 데이터를 위해 유지됨
_
# 예시표 (Clock Cycle 기반)
| Clock Cycle | VALID (송신) | READY (수신) | 데이터 전송 |
|---|---|---|---|
| 1 | 0 | 1 | X (대기) |
| 2 | 1 | 0 | X (대기) |
| 3 | 1 | 1 | O (전송) |
| 4 | 0 | 1 | X (다음 데이터 대기) |
==========𝔼𝔼𝟚𝟚==========
3. Handshake 방식의 종류
3.1 2-way Handshake (이중 핸드셰이크)
- Request 신호와 Acknowledge 신호를 사용
- 비동기 시스템에서 많이 사용됨
- 속도가 느리지만 안정성이 높음
# 동작 과정
- 송신기: REQ = 1 (전송 요청)
- 수신기: ACK = 1 (수락 응답)
- 송신기: REQ = 0 (전송 완료 신호)
- 수신기: ACK = 0 (수락 완료 신호)
_
3.2 3-way Handshake (삼중 핸드셰이크)
- REQ (Request), ACK (Acknowledge), DATA (데이터 유효) 신호를 사용.
- TCP/IP 네트워크 프로토콜에서도 많이 사용됨.
- 속도가 빠르고 안정성이 높음.
# 동작 과정
- 송신기: REQ = 1 (데이터 보낼 준비 완료)
- 수신기: ACK = 1 (데이터 받을 준비 완료)
- 송신기: DATA 전송 (데이터가 유효함을 의미)
- 송신기: REQ = 0 (다음 데이터 준비)
- 수신기: ACK = 0 (다음 데이터 받을 준비)
==========𝔼𝔼𝟚𝟚==========
4. Handshake의 중요성
4.1 장점
- 데이터 손실 방지 : 송신기와 수신기의 상태를 동기화하여 데이터 유실 방지
- 안정적인 데이터 흐름 유지 : VALID & READY 신호를 활용하여 버퍼 오버플로우(Overflow) 및 언더플로우(Underflow) 방지
- 비동기(Asynchronous) 환경에서도 사용 가능 : 클럭이 다른 모듈 간의 통신에도 유용
_
4.2 FPGA에서 Handshake가 중요한 이유
- AXI 기반 데이터 전송에서 Handshake 역할
- AXI-Stream, AXI-Lite, AXI-Full 인터페이스에서 데이터 신뢰성 보장
- AXI DMA (Direct Memory Access)에서 S2MM (Stream to Memory-Mapped) 및 MM2S (Memory-Mapped to Stream) 과정에서 필수적
- 프로토콜 기반 핸드셰이크 적용 사례
- UART, SPI, I2C 등 통신 프로토콜에서 필수적으로 사용됨
==========𝔼𝔼𝟚𝟚==========
5. Handshake 사용 영역
5.1 SoC에서 Handshake가 사용되는 주요 영역
- CPU ↔ 메모리 컨트롤러
- AXI 인터페이스의 VALID/READY 신호를 통해 데이터 동기화
- CPU ↔ DMA (Direct Memory Access)
- CPU 대신 DMA가 데이터 전송을 수행하여 성능 향상
- CPU ↔ Peripherals (UART, SPI, I2C 등)
- 주변 장치와 데이터 전송 시 Handshake 활용
- 멀티코어 프로세서 간 통신
- 데이터 동기화를 위해 Handshake 사용
_
5.2 FPGA에서 Handshake가 사용되는 주요 영역
- AXI Stream 기반 데이터 전송
- VALID & READY를 통한 데이터 스트리밍 제어
- BRAM (Block RAM)과 연산 블록 간 데이터 처리
- AXI-Lite 및 AXI-Stream을 활용하여 연산 후 데이터 저장 및 전송
- AXI 기반 DMA 전송
- MM2S (Memory-Mapped to Stream), S2MM (Stream to Memory-Mapped)에서 안정적인 데이터 전송 수행
- FPGA 내 Custom IP 블록 간의 인터페이스
- 직접 설계한 모듈 간 동기화 수행
==========𝔼𝔼𝟚𝟚==========
6. SoC 설계 vs FPGA 설계에서 Handshake 차이점
| 구분 | SoC 설계 | FPGA 설계 |
|---|---|---|
| 사용 방식 | AXI, AHB, APB 프로토콜 사용 | AXI Stream, AXI-Lite, Custom Handshake 사용 |
| 주요 적용 대상 | CPU ↔ 메모리, CPU ↔ DMA, CPU ↔ 주변 장치 | DMA ↔ DRAM, BRAM ↔ DSP, AXI Stream 데이터 전송 |
| 동기화 방식 | CPU 또는 DMA 컨트롤러가 제어 | 하드웨어 모듈 간 직접 핸드셰이크 신호 사용 |
| 인터페이스 예시 | AXI, AHB, APB | AXI Stream, AXI-Lite, Custom Handshake |
==========𝔼𝔼𝟚𝟚==========
7. 결론
- Handshake는 송신기와 수신기 간의 데이터 동기화 보장을 위한 핵심 메커니즘
- FPGA에서는 특히 AXI 인터페이스 기반 데이터 전송에서 Handshake가 필수적
- AXI DMA, BRAM, DRAM 데이터 전송 및 FPGA 내 데이터 패스 구축 시 Handshake 개념을 정확히 이해하는 것이 중요하다.
- SoC 설계에서도 FPGA와 동일한 원리로 사용됨
728x90
반응형
'Study > FPGA' 카테고리의 다른 글
| 10. AMBA | AXI4와 AXI4-Stream의 차이점 (0) | 2025.03.11 |
|---|---|
| 09. AXI4-Lite 개념 (+standard와의 차이점) (0) | 2025.03.11 |
| [FPGA] 07 - 파이프라인 Pipeline 개념과 예제 (0) | 2025.03.08 |
| 06 - Verilog Module 모듈과 Instance 인스턴스화 개념 (0) | 2025.03.08 |
| 05 - 동기 Synchronous vs. 비동기 리셋 Reset (0) | 2025.03.03 |