Completed projects
My trajectory as a engineer being is simple — be accountable while making an impact. Check and follow my Github to keep posted!
My trajectory as a engineer being is simple — be accountable while making an impact. Check and follow my Github to keep posted!
Three Re-Usable Patterns Demo for SW/HW CoSim
This repository is a tiny but great showcase of three ways to co-simulate RTL—portable file-based vectors, blazing-fast Verilator C++, and Pythonic cocotb on Verilator. Centered on a ready/valid adder, each example ships with minimal Makefiles, readable flow diagrams, and built-in waves/coverage.
RISC-V Multi-Core DMA Cache Coherency Demo
This project showcases non-coherent DMA transfers on a multi-core RISC-V system, implemented in two flavors:
Linux User-Space Version — Runs under a RISC-V Linux kernel on QEMU with multiple harts, using POSIX threads.
Bare-Metal Version — Runs in pure Machine mode on Spike with four harts, using only minimal startup code and MMIO UART output.
Both variants simulate a DMA operation where one hart writes a data buffer, and other harts observe the results after explicit cache-maintenance operations.
This project demonstrates a minimal HW/SW co-simulation stack:
Firmware (RISC-V RV32) that performs MMIO to a GPIO block.
ISS bridge in C built on Unicorn that traps unmapped MMIO and forwards it to SV via DPI.
SystemVerilog testbench with an AXI-Lite GPIO slave and master tasks to service the ISS requests.
This project implements a RGB2YCbCr project using two different approaches: using SmartHLS C++ and RTL language Verilog. The idea behind this is to evaluate the pros and cons using RTL approach and C++ approach.
This project designs a sobel edge detector that processes an RGB image and outputs the processed RGB image in black and white where edges are enhanced. The design code is written in Verilog and the associated testbenches are in SystemVerilog.
This project contains various implementations of a RISC-V core supporting 32I ISA. The design code and the associated testbenches are in SystemVerilog.
This project writes a USB Linux device driver for REALTEK RTL8150L USB-Fast Ethernet adaptor, where USB packets are transmitted asynchronously for throughput maximization purpose. The network driver implementation is also realized to achieve network packet transmission and receival.
This project writes a PCI Linux device driver for REALTEK RTL8139 Ethernet controller, where data packets are transferred between the host and the device via DMA and the network packet transmission is achieved by using the associated Ethernet port. The network driver implementation is also realized to achieve network packet transmission and receival.
This project is a Low-Power-Bluetooth-based smart bedroom environment monitor which will promote good sleep quality by measuring and adjusting temperature, light and noise instantly for optimal sleep quality.
The project will monitor and adjust three factors of the bedroom environment using 3 sensors so as to meet the optimal conditions. In addition, the product enables the user to sleep better at any time by promoting the user to set the sleep time and configuring temperature, light and noise values correspondingly and automatically.
As home security camera systems are excellent tools for home protection and are great applications of computer vision, Facial Tracker is developed as a home security system using computer vision technologies. Facial Tracker detects and recognizes strangers nearby the protected property, tracks the individuals continuously and warns the owner of the property when the stranger is too close to the property.
The Shooter Game Battle Arena Donk! is a simple SDL-based game implemented in C++11. This game allows the player(i.e. Donk) to shoot enemies and gain points. Powerups such as health powerups and bullet powerups are randomly provided after killing each enemy. And upon one round of the game, the player has the option to records his/her score in the game achievement table. However, scores will not be stored in non-volatile storage, so each time the player closes the game, all scores will be removed.
A STM32-based WAV player that reads files from a storage device and plays it out through a speaker. Buttons are used to control the device such as starting/pausing songs. The song data such as the name of the song and current volume are displayed using an LCD. The selected song file is read from the USB flash drive and played via audio speaker.