A collection of open-source tools, simulations and hardware experiments, from digital logic and embedded Linux to real-time scheduling, acoustics and music software.
Areas: FPGA & digital design · Embedded systems & RISC-V · Linux scheduling & real-time systems · Room & outdoor acoustics · Music production · Linux infrastructure · 3D design
Technologies: VHDL · Verilog · C/C++ (C++11–26) · Python · Rust · JavaScript · Shell · Linux · Qt · CMake/CTest · GHDL · Yosys · Podman · OpenSCAD · GitHub Actions
Explore the project index · View project statistics · Browse all repositories
| Project | Highlights |
|---|---|
| learning_fpga | Paired VHDL/Verilog designs, single-cycle and pipelined RV32I CPUs, a memory-mapped SoC with SIMD/FIR accelerators, and a CI-generated schematic/waveform gallery. |
| Alpine Linux on ESP32-S31 | 32-bit RISC-V Linux bring-up on hardware and in QEMU, with a 19-patch aports series, signed apk repository on GitHub Pages, Ethernet, native Wi-Fi and SSH. |
| linux-scheduling-lab | Measured Linux scheduling experiments in C++20 and Python: synthesized audio/video workloads, SCHED_FIFO/RR/DEADLINE, priority inheritance, mlock, cgroup v2 and offline HTML reports. |
| acoustic-spaces | Indoor and outdoor acoustics simulator on PyPI, with a Qt editor, ray tracing, edge diffraction, wave and parabolic-equation solvers on CPU/GPU, four binaural demos and published validation. |
| Ferrous Lineup | Five-crate Rust music studio with an automatic backing band, 300+ demo songs, 171 styles, audio-to-chord transcription, MP4/PDF/WAV/MIDI export, and a bilingual companion book. |
| Explore | Projects & focus |
|---|---|
| FPGA & digital design | learning_fpga — paired VHDL/Verilog, RV32I CPUs and SoC, VGA/audio/serial peripherals, testbenches and CI diagrams. |
| HDL tooling | hdltools / waveview — containerized simulation, synthesis and headless waveform rendering. |
| Embedded Linux | RISC-V & Arm: esp32s31-alpine · alpine-riscv32 · ESP32-S31 kernel work · luckfox_rockchip_testing · openbouffalo_dev_container / BL808 |
| Microcontrollers & firmware | ESP32 / ESP32-S3 / ESP32-C3: signal-generator experiments · timers & DAC · PoC_PoV · DMX512 |
| Board support & build automation | PlatformIO ESP32-S31 support · Sipeed M1s / BL808 SDK |
| Drivers & peripheral interfaces | PyMOPanel · Linux GPIO/PWM · MPU6050 · FPGA UART/I²C · UDA1380 · AD9833 experiments |
| 3D printing & mechanical design | 3d_models — OpenSCAD enclosures, motor supports and galvanometer mirror mounts with CI-rendered STL/PNG previews. |
| Linux scheduling, packaging & infrastructure | linux-scheduling-lab — measured scheduling, RT & cgroup v2 experiments · gentoo-binhost — signed x86-64-v3 binary packages · gitea-rootless-podman-kit |
| C++ & compiler experiments | gcc_updates — C++11–26 & GCC 13–16 executable reference, Clang 23 cross-check, sanitizers and -fanalyzer CI. |
| Room & outdoor acoustics | acoustic-spaces — indoor/outdoor acoustics simulator on PyPI: CAD/BIM & map scenes, ray tracing, wave/WAPE GPU solvers, binaural demos, portable scene packs and validation · OpenSKP legacy .skp parser fix |
| Music production | Ferrous Lineup — Rust music studio with a backing band, sequencer, harmony tools, audio-to-chord analysis and an English/Spanish book. |
| Audio & instrument control | WaveDiff · VoxPad · PSG9080 control |
| Games & simulations | Sprint to Nowhere — satirical sprint-management roguelike in React. |
| Project statistics | Language mix, source-repository activity, workflow presence and project counts. |
A progressive collection of paired VHDL and Verilog designs, from logic styles, clock enables, PWM, synchronous RAM/ROM and FIFOs to 7-segment and 640×480 VGA displays, serial buses, audio playback and processor architecture.
- CPU design: tutorial CPUs implementing an RV32I subset in both single-cycle and five-stage pipelined forms, with data forwarding, load-use hazard stalls and branch flushing.
- Hardware/software integration: a runnable RV32I SoC pairing the CPU with memory-mapped UART TX/RX, a four-lane SIMD ALU and a 4-tap FIR filter accelerator, backed by a zero-dependency Python assembler (
rv32_asm) and executable test programs. - Verification: self-checking assertion testbenches and a shared container build (
hdltools) for local development and CI, which automatically synthesizes RTL schematics and renders waveform diagrams.
CPU & SoC walkthrough · RV32I assembler · Timing notes · Live CI gallery
blink_led · VHDL schematic |
blink_led · Verilog schematic |
|---|---|
| 7-segment clock · RTL schematic | Clock dot-blink waveform |
|---|---|
![]() |
Schematics and testbench waveforms update through CI; the clock waveform checks dot-blink timing.
UART receiver testbench output; regenerated by CI as the design changes.
A containerized VHDL, Verilog and SystemVerilog toolchain combining GHDL, Yosys with ghdl-yosys-plugin, Icarus Verilog, Verilator and slang. Includes netlistsvg for RTL schematics and the waveview renderer, which turns VCD/FST/GHW traces into deterministic SVG/PNG diagrams without a desktop session, with sidecar YAML control over signal groups, formatting and time windows. Used by learning_fpga for simulation and CI artifacts.
Container & build targets · waveview documentation
Linux bring-up, root filesystems, cross-compilation and peripheral access across RISC-V and Arm platforms.
Bringing Alpine Linux (riscv32, musl, OpenRC, apk) to the ESP32-S31 Function-CoreBoard-1, using Espressif's Linux 6.18 BSP, custom kernel fragments and a dual-hart SMP/Wi-Fi stack.
- Working on hardware: Linux 6.18 boots an ext4 root filesystem from USB automatically on reset (falling back to Buildroot when unplugged), OpenRC starts a serial console and Dropbear SSH, Ethernet and native WPA2 Wi-Fi (including channels 12 and 13) connect at boot, the on-chip temperature sensor (
esp32s31_tsens) is enabled via a runtime device-tree overlay, andapkinstalls signed packages over the network. - Step-by-step engineering record: a 24-step bring-up plan across six phases with reproducible guides, pinned BSP commits, kernel patches/fragments, Buildroot overlays and a dated hardware journal.
Source & setup · Steps & guides · Boot from USB · Ethernet & apk · Native Wi-Fi & SSH · Temperature sensor
Kernel fork: targeted ESP32-S31 fixes and experimental SMP/Wi-Fi integration with Espressif's boot stack. Includes RV32 F-only floating-point support, non-coherent DMA setup and XIP RAM-resource accounting fixes, plus adaptations of an existing SMP/radio port for per-hart interrupts, timers and cache handling.
CI builds the XIP kernel and bootloader artifacts, plus matched radio artifacts on the SMP/Wi-Fi branch.
Focused fixes · SMP/Wi-Fi integration · Patch comparison · CI runs
The board-independent distribution work behind the bring-up: a 19-patch aports series, cross toolchain and musl-based userspace for rv32imac_zicsr_zifencei / ilp32 soft-float, suitable for QEMU, LiteX or any RV32 Linux target.
- Bootstrap & native packages: cross-builds Alpine's bootstrap set (
alpine-base, OpenRC,apk) and builds 450+riscv32packages natively underqemu-user—includingpython3(3.14),openssl,openssh,wpa_supplicant,iw,htop,vim,tmux,btopandlm-sensors. - Automated
apkrepository: GitHub Actions builds incremental changes and publishes a signedapkrepository on GitHub Pages alongside versioned GitHub release archives for offline USB installation.
Patch series · Package status · Build & boot guides · Package CI & Pages repo
Cross-compiled C++ GPIO/PWM applications and bench measurements of PWM and UART on Arm-based Rockchip RV1103/RV1106 boards. Two servos and a laser draw Lissajous curves.
| Lissajous laser projection | UART transmission capture |
|---|---|
![]() |
![]() |
Ubuntu-based development container for Bouffalo BL808 / Pine64 Ox64. Builds OpenBouffalo's Linux image and Buildroot SDK, with ncurses support for kernel menuconfig.
ESP32-family firmware experiments covering Wi-Fi, HTTP, timers, DAC output, motion sensors, LEDs and DMX512.
| Platform | Project | Contents |
|---|---|---|
| ESP32 / LOLIN32 · ESP-IDF | esp32_wifiAP_httpServer_signalGenerator | Wi-Fi access-point and HTTP-interface proof of concept, with AD9833 experiments, browser forms and oscilloscope captures. |
| ESP32 / TTGO T1 · ESP-IDF | test_esp32_timers | General-purpose and high-resolution timers, GPIO callback/task comparisons and timer-driven DAC sawtooth generation. |
| ESP32-S3-DevKitC-1 / ESP-WROVER-KIT · Arduino | PoC_PoV | LED persistence-of-vision prototype with MPU6050 motion measurements, bitmap-column playback and WebSocket sensor telemetry. |
| ESP32-C3 / LOLIN C3 Mini · Arduino | osc_to_dmx512 | Wi-Fi browser controls for DMX512 output, with pattern selection, zoom and movement settings. |
Contribution branch: board definition, RISC-V build integration and the correct bootloader flash offset for ESP32-S31. ESP-IDF build, upload and boot have been tested on hardware. Upstream integration is tracked separately.
Implementation · Upstream discussion
SDK fork: build automation and dependency documentation around Sipeed's BL808 Linux SDK. The added workflow installs the upstream toolchains, builds firmware and uploads artifacts.
Python driver for Matrix Orbital GLK19264-7T-1U LCD/keypad panels, with serial and direct USB transport, text and graphics, keypad input and GPO control. Includes monitoring demos and bitmap/GIF frame playback. Work in progress.
Panel interface · USB transport
| Interface | Implementation |
|---|---|
| Linux GPIO / PWM | C++ userspace interfaces through Linux sysfs, used by GPIO blink and PWM/servo experiments. |
| MPU6050 | I²C register access for accelerometer, gyroscope and temperature measurements, used by the persistence-of-vision prototype. |
| FPGA UART TX / RX | Paired VHDL/Verilog serial controllers with simulation testbenches. |
| FPGA I²C master | Byte engine with START/STOP, repeated START, ACK/NACK and clock-stretching support. |
| UDA1380 audio codec | Codec initialization over I²C and I²S playback logic, verified in simulation. |
| AD9833 wrapper | Prototype driver experiments around the MD_AD9833 library. |
OpenSCAD models for ADAU1701 DSP enclosures, stackable boxes, motor supports and galvanometer mirror mounts. GitHub Actions generates STL files and PNG previews from the model sources.
| Mirror support render | ADAU1701 DSP case | Assembled galvanometer |
|---|---|---|
![]() |
![]() |
![]() |
Hands-on, measured Linux scheduling experiments for real-time and offline workloads. A C++20 native engine executes real work—48 kHz mono PCM audio synthesis/filtering and 160×90 grayscale PGM frame generation/blurring—while a zero-dependency Python standard-library harness (schedlab) orchestrates runs and renders self-contained offline HTML reports (report.html).
- Policies, locks & resource controls: compares
SCHED_OTHER/ nice levels,SCHED_BATCH,SCHED_IDLE,SCHED_FIFO/SCHED_RR, andSCHED_DEADLINE(sched_setattradmission and runtime/deadline/period budgets); measures priority inversion againstPTHREAD_PRIO_INHERITmutexes, page faults with prefaulting andmlock, CPU affinity, and delegated cgroup v2 CPU weight and quota. - Threading & cross-system analysis: includes a runnable C++20
std::jthreadand bounded-queue audio pipeline with its publication and shutdown protocol, plusdoctor,replayandcomparecommands to evaluate results across kernel preemption modes (PREEMPT_DYNAMIC,PREEMPT_RT), boots and machines. - Portable & safe by default: invokes Linux per-thread scheduler syscalls directly so both glibc and musl behave identically; runs unprivileged by default with Gentoo/OpenRC as a first-class setup, explicit
--allow-rtopt-in, and independent native and Python watchdogs. CI validates GCC and Clang on x86-64 and arm64, static Alpine musl builds, and arm64/riscv64 cross-compilation.
Tutorial · Threading & C++20 pipeline · Kernels & hardware · Advanced experiments · CI matrix
Signed .gpkg.tar binary packages for Gentoo default/linux/amd64/23.0/desktop/plasma (OpenRC, ~amd64, -march=x86-64-v3), built inside fresh stage3 containers on GitHub Actions and layered above the official Gentoo x86-64-v3 binhost via binrepos.conf.
- Tiered build pipeline: builds
00-smoke,10-heavy(LLVM, Clang, QtWebEngine, WebKitGTK, VTK),20-desktop(Plasma, Qt, KDE apps, audio production, CAD),21-desktop-more,25-steam-runtime(32-bitabi_x86_32libraries for Steam) and30-kmod(kernel and VirtualBox modules), with compiler caching and automatic follow-up runs when a job reaches its time window. - Verified publication & maintenance: a standard-library Python publisher uploads category release assets before updating the
Packagesindex on thebinhostbranch, a clean-container consumer check verifies GPG signatures and binary installs, and a weekly workflow (check-workarounds.yml) tests whether profile workarounds can be retired.
Architecture · Usage guide · Steam 32-bit runtime · Build & publication workflow · Workaround checks
Scripts for rootless Gitea deployment, encrypted backups and restoration, using Podman, age and zstd. Includes scheduled backups, OpenRC/systemd integration and a backup/restore round trip in CI.
Setup & scripts · Restore verification
An executable C++11–26 language and standard-library reference, with compiler-version gates, GCC extensions (gccext_*), measured toolchain default changes (gccdef_*) and curated per-release highlights for GCC 13, 14, 15 and 16.
- Multi-compiler & multi-arch CI: CMake/CTest runs the suite across GCC 13–16 on both amd64 and arm64 (covering C++20 modules on GCC 15+ and C++26 contracts, reflection and library features on GCC 16), plus a Clang 23 cross-check on amd64 and arm64 compiled against the same upstream libstdc++ 16.
- Sanitizers & static analysis: repeats the test suite under UBSan+ASan+LSan and TSan on both GCC 15 and Clang 23, alongside deliberate-trip sanitizer demos and compile-time
-fanalyzerpath-analysis tests on GCC 16 that assert exact diagnostic output.
Feature index · Reference routes · GCC 13–16 release notes · Sanitizers · Compiler CI matrix
Open-source indoor and outdoor acoustics simulator and auralisation toolkit in the spirit of CATT-Acoustic and ODEON, with a Qt editor, command line, Python API and C++ core. Load a 3D model, draw a floor plan or build an outdoor terrain scene, place sources and listeners, compute impulse responses and listen to the result. Published on PyPI, with wheels for Linux, macOS and Windows on CPython 3.10–3.14:
pip install "acoustic-spaces[viz,gui]"- Indoor & outdoor scenes: OBJ, DXF, glTF, STL, IFC, Collada and SketchUp imports or floor-plan drawing, CATT-Acoustic and ODEON material libraries, doors between rooms, audience areas, directional/line/surface and coherent element-by-element array sources, and a leak finder for open models—plus outdoor scenes with buildings, barriers, map terrain, finite and extended-reacting ground impedance, wind/temperature gradients, turbulence, vegetation and moving sources with Doppler shift.
- Simulation & remote GPU packs: ray-traced early reflections with edge diffraction, pressure-based low-frequency summation, a stochastic late tail, a low-frequency wave solver, and an outdoor wide-angle parabolic equation (WAPE) solver on CPU or GPU (
wgpu). Computes ISO 3382-1/3382-2 parameters, STI, echo criteria and multi-level audience coverage maps;acoustic-spaces packbundles any scene into a self-contained.zipfor headless Vulkan GPU containers on remote servers or cloud jobs. - Spatial audio & binaural demos: mono, binaural (with downloadable HRTF sets), Ambisonics (AmbiX) and loudspeaker impulse responses, offline and real-time convolution, head tracking and keyframed multi-mover video walkthroughs. Includes four scripted binaural headphone demos—Beethoven's 8th symphony from 61 anechoic tracks in the concert hall, choir and organ in the church, a band with its PA system in the stadium, and a lakeside concert in wind vs. still air—with a YouTube playlist.
- Measurements & verification: sine-sweep measurement of real rooms, ISO 3382-1 JND comparison and material absorption fitting. A published validation report compares indoor and outdoor results against modal/UTD/FFP theory,
pyroomacoustics, the BRAS benchmark and Hannover outdoor propagation measurements.
PyPI · Getting started · Outdoor scenes · Demos · Remote GPU runs · Validation & known issues · Releases · Changelog
Beethoven's 8th symphony in the concert-hall example: 61 anechoic tracks, one per instrument, heard binaurally from the stalls. Select the image to watch the video, or browse the full demo playlist.
Acoustic simulation gallery — editor, visualisations and measurements
Select an image to open its full-size view.
| Qt editor & concert-hall results | Floor-plan editing |
|---|---|
![]() |
![]() |
| Church model & reflection paths | Animated sound particles |
|---|---|
![]() |
![]() |
| Speech-intelligibility overlay in the editor | Audience coverage map |
|---|---|
![]() |
![]() |
| Echogram & octave-band reverberation | Arrival directions |
|---|---|
![]() |
![]() |
| Source-directivity patterns | Diffraction around a corner |
|---|---|
![]() |
![]() |
| Low-frequency wave-model comparison | Measured-room response analysis |
|---|---|
![]() |
![]() |
Measured-response example: BRAS CR2, LS1→MP1, from the BRAS benchmark, CC BY-SA 4.0.
Contribution branch: binary-format parser fix across all five OpenSKP ports (Python, TypeScript, .NET, Dart and C++) for legacy (pre-2021) SketchUp .skp models containing CText labels anchored to entities. Reads the anchored entity reference and instance-path block after the text connection record so inline MFC path instances receive their store-map slots and outermost instances are preserved in the entity list. Discovered while validating acoustic-spaces against the 25 SketchUp 2015 models of the BRAS benchmark: the fix opens all four BRAS auditorium (CR4) models and restores the full root entity lists on the coupled-room (CR1) models across every port.
Contribution branch · Patch comparison · Upstream PR (iamahsanmehmood/openskp#473)
An open-source music studio and automatic backing band written in Rust across five workspace crates (lineup-core, lineup-audio, lineup-listen, lineup-video and lineup-app). Enter a song's chords on the chord sheet, choose a style and play it in any key and tempo, or write and arrange parts by hand. Runs on Linux, macOS and Windows.
- Backing band & practice: chord sheets, 171+ harmony styles, 107+ drum rhythms and 300+ demo songs drive piano, bass, drums, guitar, strings and organ—with intros, choruses, endings, A/B variations, swing, shots/pushes, an optional soloist, count-in, metronome, bar looping and part muting for live practice.
- Writing & harmony: a multi-track playlist, step sequencer, piano roll, style editor and mixer, with Roman-numeral chord naming and voice-leading suggestions, ear training, pitch-class sets by Forte number, twelve-tone rows (P/R/I/RI) and Kröpfl micromodes.
- Audio, MIDI & export: real-time synthesis and SoundFont playback (
rustysynth), live MIDI In/Out (midir), audio-to-chord beat and key analysis of imported recordings (lineup-listen), headless CLI note tracing (--trace), PDF lead sheets, and WAV, MIDI and H.264/MP3 MP4 video export. - Bilingual companion book & Rust course: Ferrous Lineup: Building a Music Studio in Rust (and its Spanish edition, Construyendo un estudio de música en Rust), available online and as downloadable PDFs, documenting both the studio workflow and the step-by-step Rust architecture.
Book (EN) · PDF (EN) · Libro (ES) · PDF (ES) · App tour · Build & run · Releases · Project layout
| Studio & harmony keys | Chord sheet |
|---|---|
![]() |
![]() |
| Project | What it does | Stack |
|---|---|---|
| WaveDiff | Audio A/B analysis: RMS, null-test residual and peak difference, through a Vamp plugin for hosts such as Sonic Visualiser, plus a Qt Quick interface and stdlib signal generator. | C++17 · Qt Quick · CMake / CTest |
| Bluetooth instrument control | Python/Qt control of a PSG9080 signal generator over Bluetooth serial, with logic-analyzer captures documenting the protocol. | Python · Qt · Bluetooth |
Local audio and WhatsApp voice-message transcription powered by Whisper (faster-whisper) through a Python CLI, Qt desktop application and zero-install browser interface. Accepts individual recordings (.opus, .m4a, .ogg, .mp3, .wav, .flac) or exported WhatsApp chat ZIPs/folders, matching voice notes to sender names and timestamps with optional word-level timestamps, keyword boosting and opt-in Hugging Face remote transcription.
Documentation · Browser application
A satirical sprint-management roguelike about backlog planning, interruptions, technical debt and burnout. Built with React 19, Vite and Tailwind CSS, deployed to GitHub Pages, and playable in English and Spanish. The goal is to survive ten sprints while keeping technical debt and burnout under control.
Statistics for the featured projects, with support forks counted separately from source repositories.






















