FIRMWARE & SYSTEM VERILOG DEVELOPMENT
Embedded Systems Projects on the Nexys A7 FPGA
This collection of projects showcases my work with the Nexys A7 FPGA, using SystemVerilog in Vivado and C++ in Vitis to design responsive, real-time embedded systems. Each project focuses on hardware-software integration, low-level control, and interaction with peripherals like sensors, displays, and input devices. From VGA video rendering to tap detection and analog interfacing, these projects reflect my hands-on experience building efficient, event-driven systems at the hardware level.
Etch A Sketch–Style VGA Drawing Tool
An interactive drawing application using VGA video output and keyboard control. A PS/2 keyboard moves a persistent cursor across the screen, allowing pixel-by-pixel drawing. VGA timing and pixel rendering are handled in SystemVerilog, while C++ manages user input and system state. This project demonstrates pixel-accurate rendering and real-time embedded input handling.
Square Test Pattern Generator (VGA Output)
A customized square grid replaces a provided color bar pattern, rendered using coordinate-based logic in SystemVerilog. The grid alternates between complementary colors for contrast, and onboard switches allow real-time modification of pattern attributes. This project emphasizes low-level video signal generation and pattern-based visualization.
Keyboard-Controlled Chasing LEDs
A PS/2-compatible keyboard is used to control an LED chase pattern in real time. Arrow keys adjust direction and speed, while other keys pause and resume the sequence. Hardware scan code decoding is implemented in SystemVerilog, and a Vitis C++ program handles input mapping and control logic. The project highlights interactive embedded control and state-driven design.
Potentiometer-Controlled Chasing LEDs
An external potentiometer is used to adjust the speed of an LED chase pattern. The analog input is sampled using the XADC, and the chase timing is controlled in software. This project demonstrates analog-to-digital conversion, real-time input scaling, and responsive hardware behavior.
Tapping Detection Using Onboard Accelerometer
This project uses the onboard ADXL362 accelerometer to detect tap intensity via SPI. Real-time acceleration data is processed in C++, and the system triggers LED feedback based on motion strength. Light taps activate green LEDs, while stronger taps trigger red. This demonstrates sensor communication, event detection, and real-world input response.
Ambient Light Sensor via Pmod Interface
An external ambient light sensor connected via the Pmod header outputs an analog voltage proportional to light intensity. The signal is sampled with the XADC, and LEDs transition from green to red based on brightness. This project showcases analog sensing, environmental feedback, and smooth LED response through event-driven logic.
Spectrum Display
A real-time spectrum-style display driven by a potentiometer. As the input voltage increases, more LEDs light up, with a color transition from green to red. The XADC reads the analog input, and C++ software maps the result to both LED count and color. PWM is used to control LED brightness, creating smooth intensity transitions across the display. The red, green, and blue channel values are normalized and mapped from 0 to 1, enabling proportional control over color blending. This project highlights analog signal scaling, RGB color logic, PWM modulation, and responsive LED feedback.