HDMI Sobel Edge Detection using AXI4-Stream on Zynq FPGA

vom·2026년 5월 26일

RTL & FPGA

목록 보기
4/5

목차

  1. 개요
  2. 개발환경
  3. HDMI Demo 동작 확인
  4. System Architecture
  5. Data Format
  6. Debugging
  7. Real-Time Test Result
  8. Summary
  9. 결론
  10. 설계 과정 메모

1. 개요

Zybo Z7-10 보드에서 HDMI 입력 영상을 실시간으로 Sobel edge detection 처리한 뒤 HDMI 출력으로 전달하는 시스템을 구현하였습니다.

기존에는 AXI-DMA 및 AXI4-Stream 기반으로 이미지 데이터를 Sobel 연산하는 구조를 구현하였는데, 이번에는 HDMI 기반 실시간 영상 스트림에 직접 Sobel 연산을 적용해보는 것을 목표로 하였습니다.

Digilent HDMI demo를 기반으로 AXI4-Stream video pipeline 중간에 Sobel IP를 삽입하는 방식으로 구성하였습니다.


2. 개발환경

항목내용
BoardZybo Z7-10
HDLVerilog
ToolVivado / Vitis
TerminalTeraTerm
InputPC RX(HDMI)
OutputMonitor TX(HDMI)
Resolution1280 × 720

3. HDMI Demo 동작 확인

Digilent에서 제공하는 Zybo Z7 HDMI demo 프로젝트를 실행하여 기본 HDMI 입출력이 정상적으로 동작하는지 확인하였습니다.

Vivado에서 bitstream 생성 후 Vitis에서 application을 실행하였고, TeraTerm의 UART menu를 통해 HDMI resolution 및 frame index를 제어하며 HDMI demo 동작을 확인하였습니다.

HDMI demo는 아래와 같은 흐름으로 동작하였습니다.

HDMI RX (PC)
→ dvi2rgb
→ v_vid_in_axi4s
→ AXI4-Stream Video Pipeline
→ rgb2dvi
→ HDMI TX (Monitor)

Block diagram

동작 사진

영상


4. System Architecture

최종 구조는 다음과 같이 구성하였습니다.

HDMI RX (PC)
→ dvi2rgb
→ v_vid_in_axi4s
→ RGB-to-Gray
→ Sobel
→ Gray-to-RGB
→ AXI4-Stream
→ rgb2dvi
→ HDMI TX (Monitor)

HDMI 입력 영상은 AXI4-Stream video 형태로 변환된 뒤 Sobel edge detection 연산을 수행하도록 구성하였습니다.

Block diagram


5. Data Format

기존 Sobel IP는 grayscale 8-bit 데이터를 입력받아 처리하도록 설계하였지만, HDMI demo의 AXI4-Stream video 데이터는 RGB888 기반의 24-bit 데이터 형식으로 구성되어 있어 입력 데이터 폭이 서로 맞지 않았습니다.

따라서, RGB888 형식의 입력 데이터를 grayscale로 변환하기 위해 RGB-to-Gray 블록을 추가하였습니다.

AXI4-Stream video의 tdata[23:16]은 R, tdata[15:8]은 G, tdata[7:0]은 B 데이터를 의미하며, 이를 ITU-R BT.601 기반 grayscale 변환 방식으로 처리하였습니다.

항목Sobel IPHDMI Video
Data FormatGray 8-bitRGB888 24-bit
gray = (77 * R + 150 * G + 29 * B) >> 8; // ITU-R BT.601 표준 권장 가중치

또한 Sobel 출력 결과를 다시 HDMI 출력 형식에 맞추기 위해 Gray-to-RGB 블록을 추가하였습니다.

rgb = {gray, gray, gray};

6. Timing Issue

초기 구현에서는 아래 사진의 vid_in_axi4s와 converter_in Block 사이에 Block 및 IP를 추가하였습니다.

추가한 이후,

※추가한 Block 및 IP
  RGB-to-Gray → Sobel → Gray-to-RGB

이후 synthesis 및 implementation 결과 WNS = -3.5ns 로 Timing Violation이 발생하였습니다.

Timing report를 확인해보니 RGB-to-Gray 출력부터 Sobel line buffer 입력까지의 경로와,
Sobel 내부 연산 이후 output register까지의 경로가 critical path로 확인하였습니다.

1) RGB-to-Gray 연산 경로 → Sobel 입력/line buffer 경로
2) Sobel 내부 line buffer/window 값 → Gx/Gy, abs, magnitude, output register 경로

Combinational Logic depth 및 routing delay가 증가하면서 Negative Slack이 발생하여 이를 해결하기 위해 각 Block 내부를 pipeline 구조로 수정하였습니다.

1) RGB-to-Gray : 2-stage Pipeline
2) Sobel : 3-stage Pipeline

이후 Synthesis 및 Implementation 결과로 WNS = 0.454ns의 Positive Slack을 확인하였고 bitstream generate 수행하였음.


7. Debugging

화면 겹침 문제

Timing 문제를 해결한 뒤 bitstream을 FPGA에 programming하여 실행해보니 Sobel 결과는 출력되었지만 화면이 겹쳐 보이는 문제가 발생하였습니다.

Sobel 내부 IMAGE_WIDTH parameter와 실제 HDMI resolution이 서로 다르게 설정되어 있는 것을 확인하였고, 동일한 크기인 1280으로 수정하였습니다.

parameter IMAGE_WIDTH = 1280;

수정 후 정상적으로 Sobel edge detection 영상이 출력되는 것을 확인하였습니다.


8. Real-Time Test Result

노트북 HDMI 출력 영상을 Zybo Z7-10 보드에서 입력받아 실시간 Sobel edge detection 결과가 Monitor에 정상 출력되는 것을 확인하였습니다.


9. Summary

HDMI 기반 실시간 Sobel edge detection 시스템을 구현하였습니다.

기존 HDMI demo를 기반으로 AXI4-Stream video pipeline 중간에 Sobel block을 삽입하였으며, RGB888 입력 데이터를 grayscale로 변환하는 block을 추가하였습니다.

초기 구현에서는 Combinational Logic 및 routing delay로 인해 timing violation이 발생하였고, pipeline 구조를 적용하여 timing closure를 만족시켰습니다.

또한 HDMI 입력 해상도와 Sobel 내부 line buffer width가 서로 맞지 않아 화면 겹침 현상이 발생하였고, IMAGE_WIDTH를 수정하여 문제를 해결하였습니다.

이를 통해 HDMI 기반 AXI4-Stream video pipeline 구조와 timing optimization, streaming image processing 구조를 직접 구현하고 확인할 수 있었습니다.


10. 설계 과정 메모

HDMI video pipeline 구조 및 timing issue를 분석하면서 정리한 메모입니다.


0개의 댓글