FPGA-based Real-time Image Processing Accelerator using AXI4-Stream
This project implements a hardwired image processing IP designed for Zynq SoC environments. It processes high-speed image stream data from a camera or memory in real-time on the FPGA (PL) side using the AXI4-Stream protocol.
Detailed documentation for the project is available in the following files:
- Project Specification: System overview, design goals, and performance targets.
- Architecture & Dataflow: Detailed pipeline structure (DMA -> Skid Buffer -> Sobel -> DMA) and block logic.
- Interface Control Document (ICD): Signal specifications, protocols, and handshake mechanisms.
The system follows a stream-based processing pipeline structure:
graph LR
DMA_MM2S["DMA (MM2S)"] -->|AXI Stream| S00_AXIS
subgraph "FPGA Image IP Top"
S00_AXIS --> SkidBuffer_In
SkidBuffer_In --> SobelCore["Sobel Edge Detection"]
SobelCore --> SkidBuffer_Out
SkidBuffer_Out --> M00_AXIS
end
M00_AXIS -->|AXI Stream| DMA_S2MM["DMA (S2MM)"]
- AXI4-Stream Compliance: Fully compatible with Xilinx DMA and other AXI IPs.
- Real-time Processing: Pipelined architecture for low latency (Pixel Clock based).
- Robust Flow Control: Implements Skid Buffers to handle back-pressure without data loss.
- Sobel Edge Detection: Performs 3x3 convolution to detect edges in the image.
The project workspace is organized as follows:
AXI_image/
├── AXI-Image_ip-workspace/
│ └── axi/
│ ├── src/ # Verilog Source Files
│ │ ├── myip.v # Top-level Wrapper
│ │ ├── sobel_core.v # Core Logic
│ │ ├── skid_buffer.v # Flow Control Buffer
│ │ └── ... # AXI Interface Modules
│ └── tb/ # Testbench Files
│ └── tb_myip.sv # SystemVerilog Testbench
├── Project *.md # Documentation Files
└── README.md # This File
The project includes a SystemVerilog testbench (tb_myip.sv) to verify the functionality and flow control.
The testbench (tb_myip.sv) performs the following:
- Reset: Applies global reset.
- Data Transmission: Sends a stream of pixel data (1 to 20) to the IP.
- Back-pressure Test: Randomly toggles the
m_treadysignal (50% chance) to simulate downstream congestion and verify that the Skid Buffer correctly handles the stall without data loss.
You can run the simulation using Vivado or any simulator that supports SystemVerilog.
- Open Vivado.
- Add the files from
AXI-Image_ip-workspace/axi/srcandAXI-Image_ip-workspace/axi/tb. - Set
tb_myipas the top module for simulation. - Run Behavioral Simulation.
- Status: Development (Draft)
- Target: Xilinx Zynq-7000 Series (or compatible AXI4 systems)