All projects

Hardware & embedded / PROJECT NOTES

Zynq-7000 SoC: FPGA + ARM Embedded System

Built a full hardware-software stack on a Zynq-7000 SoC — custom AXI peripherals in SystemVerilog, Linux kernel driver, and a userspace application.

01 / OVERVIEW

The idea behind it.

End-to-end embedded systems project on the Xilinx Zynq-7000 SoC, which combines a dual-core ARM Cortex-A9 processor (PS) with programmable FPGA fabric (PL). Designed custom digital hardware blocks in SystemVerilog and exposed them to the CPU through AXI4-Lite bus interfaces. Developed a Linux kernel character device driver to map the hardware registers into kernel space and handle interrupt signaling. Finally, wrote a userspace C application that opens the device file, issues ioctl/read/write calls, and demonstrates the hardware acceleration in action — completing the full path from RTL gates to a running application.

02 / FEATURES

What it does.

  • 01Custom digital hardware peripheral designed in SystemVerilog
  • 02AXI4-Lite slave interface for CPU-to-FPGA communication
  • 03Control/status registers mapped over AXI bus
  • 04Linux character device driver exposing hardware to userspace
  • 05Interrupt handling from PL to PS via GIC
  • 06Userspace C application using ioctl, read, and write syscalls
  • 07Hardware acceleration offloading compute from the ARM CPU

03 / CHALLENGES

The problems worth solving.

  • 01Meeting AXI4-Lite handshake timing and protocol requirements in RTL
  • 02Debugging signal integrity and bus transactions in Vivado ILA
  • 03Writing a Linux kernel module without crashing the system during development
  • 04Correctly mapping physical FPGA register addresses into kernel virtual memory
  • 05Synchronizing interrupt handling between PL fabric and the ARM kernel driver
  • 06Cross-compiling the driver and application for the ARM target from an x86 host

04 / LEARNINGS

What I took away.

  • 01SoC architecture and the PS-PL interface on Zynq-7000
  • 02AXI4-Lite protocol — address, data, and handshake phases
  • 03SystemVerilog RTL design: modules, interfaces, and finite state machines
  • 04FPGA toolchain: synthesis, implementation, and bitstream generation in Vivado
  • 05Linux kernel module development: init/exit, cdev, file_operations
  • 06Memory-mapped I/O with ioremap and register access from kernel space
  • 07Interrupt handling with request_irq and bottom-half processing
  • 08Userspace–kernel communication through ioctl and device file read/write
  • 09Cross-compilation and deployment workflow for embedded Linux targets

KEEP EXPLORING

AI-Powered Panel Connection Verification System