Study/FPGA

08. Handshake 개념

도엔 2025. 3. 8. 16:16
728x90

1. Handshake란?

  • Handshake는 송신자(Sender)와 수신자(Receiver) 사이에서 데이터를 안전하게 주고받기 위한 동기화 과정
  • 데이터 전송 시 송신자와 수신자의 상태를 동기화하지 않으면 데이터 손실이 발생할 수 있다.
  • 기본적으로 Request(A)와 Acknowledge(B) 신호의 교환을 통해 이루어짐

_

# Handshake 과정 예시)

  1. 송신자(A)가 "데이터를 보낼 준비가 되었다"는 요청(Request)을 보냄
  2. 수신자(B)가 "데이터를 받을 준비가 되었다"는 응답(Acknowledge)을 보냄
  3. 두 신호가 모두 충족될 때 데이터가 전송됨.

-> 이 과정을 통해 데이터 전송이 안정적으로 이루어지며 손실을 방지할 수 있다.

 


==========𝔼𝔼𝟚𝟚==========

 

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 동작 과정

  1. 송신기(Sender)가 VALID=1로 설정 → "데이터를 보낼 준비 완료"
  2. 수신기(Receiver)가 READY=1로 설정 → "데이터를 받을 준비 완료"
  3. VALID=1 & READY=1이 동시에 발생하면 데이터 전송 완료
  4. 전송 후 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 신호를 사용
  • 비동기 시스템에서 많이 사용됨
  • 속도가 느리지만 안정성이 높음

# 동작 과정

  1. 송신기: REQ = 1 (전송 요청)
  2. 수신기: ACK = 1 (수락 응답)
  3. 송신기: REQ = 0 (전송 완료 신호)
  4. 수신기: ACK = 0 (수락 완료 신호)

_

3.2 3-way Handshake (삼중 핸드셰이크)

  • REQ (Request), ACK (Acknowledge), DATA (데이터 유효) 신호를 사용.
  • TCP/IP 네트워크 프로토콜에서도 많이 사용됨.
  • 속도가 빠르고 안정성이 높음.

# 동작 과정

  1. 송신기: REQ = 1 (데이터 보낼 준비 완료)
  2. 수신기: ACK = 1 (데이터 받을 준비 완료)
  3. 송신기: DATA 전송 (데이터가 유효함을 의미)
  4. 송신기: REQ = 0 (다음 데이터 준비)
  5. 수신기: ACK = 0 (다음 데이터 받을 준비)


==========𝔼𝔼𝟚𝟚==========

 

4. Handshake의 중요성

4.1 장점

  1. 데이터 손실 방지 : 송신기와 수신기의 상태를 동기화하여 데이터 유실 방지
  2. 안정적인 데이터 흐름 유지 : VALID & READY 신호를 활용하여 버퍼 오버플로우(Overflow) 및 언더플로우(Underflow) 방지
  3. 비동기(Asynchronous) 환경에서도 사용 가능 : 클럭이 다른 모듈 간의 통신에도 유용

_

4.2 FPGA에서 Handshake가 중요한 이유

  1. AXI 기반 데이터 전송에서 Handshake 역할
    • AXI-Stream, AXI-Lite, AXI-Full 인터페이스에서 데이터 신뢰성 보장
    • AXI DMA (Direct Memory Access)에서 S2MM (Stream to Memory-Mapped) 및 MM2S (Memory-Mapped to Stream) 과정에서 필수적
  2. 프로토콜 기반 핸드셰이크 적용 사례
    • UART, SPI, I2C 등 통신 프로토콜에서 필수적으로 사용됨


==========𝔼𝔼𝟚𝟚==========

 

5. Handshake 사용 영역

5.1 SoC에서 Handshake가 사용되는 주요 영역

  1. CPU ↔ 메모리 컨트롤러
    • AXI 인터페이스의 VALID/READY 신호를 통해 데이터 동기화
  2. CPU ↔ DMA (Direct Memory Access)
    • CPU 대신 DMA가 데이터 전송을 수행하여 성능 향상
  3. CPU ↔ Peripherals (UART, SPI, I2C 등)
    • 주변 장치와 데이터 전송 시 Handshake 활용
  4. 멀티코어 프로세서 간 통신
    • 데이터 동기화를 위해 Handshake 사용

_

5.2 FPGA에서 Handshake가 사용되는 주요 영역

  1. AXI Stream 기반 데이터 전송
    • VALID & READY를 통한 데이터 스트리밍 제어
  2. BRAM (Block RAM)과 연산 블록 간 데이터 처리
    • AXI-Lite 및 AXI-Stream을 활용하여 연산 후 데이터 저장 및 전송
  3. AXI 기반 DMA 전송
    • MM2S (Memory-Mapped to Stream), S2MM (Stream to Memory-Mapped)에서 안정적인 데이터 전송 수행
  4. 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
반응형