

A hardware user interface for the XVA1 virtual analog synthesizer, inspired by the Hydrasynth's layout. The XVA1 (and its FM sibling the XFM2) is built on an Artix-7 FPGA but has no built-in UI — this project adds one.
- Size
- 284 × 128.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 65
- Nets
- 172
- Pads
- 450
- Tracks, vias
- 622, 3
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 5 (file 20171130)
- Created
- 15 Feb 2021
- Updated
- 5 Jun 2026
Overview
Xva1-ui is an open-source printed circuit board by MacMannes, from the MacMannes/XVA1-User-Interface repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 284 × 128.5 mm with 65 parts on 172 nets, routed with 622 tracks and 3 vias.
It is built around the CMOD A7-35T, TCA9548APW and MCP23017-E/SS, with the 24LC1025-I/P among its other parts. Its parts include 23 switches, 15 resistors, 9 ICs, 6 connectors and 1 diode.
Main components
4CMOD A7-35T
Breadboardable Artix-7 FPGA ModuleDigilentUncategorisedTCA9548APW
TSSOP-24-40℃~+85℃ 1.65V~5.5V 2uA 400Kbps 80uA I2C、SMBus Power-up/reset configuration TSSOP-24 Interface - Specialized ROHSTexas InstrumentsSignal Switches, Multiplexers, DecodersMCP23017-E/SS
SSOP-28(5.3x10.2x0.65)-40℃~+125℃ 1.7MHz 1.8V~5.5V 16 1uA 600mV 8 8mA I2C Interrupt Output Reset function、Cascading and address extension SSOP-28 I/O Expanders ROHSMicrochip TechnologyI/O Expanders24LC1025-I/P
PDIP-8-40℃~+85℃ 1,000,000 cycles 2.5V~5.5V 200 Years 400kHz 5ms Hardware write protection function、Noise suppression function I2C PDIP-8 EEPROM ROHSMicrochip TechnologyEEPROM
README
README.mdXVA1 User Interface
A hardware user interface for the XVA1 virtual analog synthesizer, inspired by the Hydrasynth's layout. The XVA1 (and its FM sibling the XFM2) is built on an Artix-7 FPGA but has no built-in UI — this project adds one.

Overview
The UI board provides:
- 1 main rotary encoder — patch selection and menu navigation
- 8 parameter rotary encoders — control up to 8 synth parameters at once
- 4 OLED displays (128×64) — show parameter names and values for each encoder pair
- 1 TFT display (240×240) — main display showing patch name, section, and subsection
- 8 shortcut buttons with LEDs — jump directly to parameter sections (Oscillators, Filters, Envelopes, LFOs, etc.). Hold SHIFT + buttons 1–4 to access sections 9–12
- Up/Down buttons with LEDs — scroll through parameter pages within a section
The design goal was minimal menu-diving: select a section with one button press, then tweak up to eight parameters directly with the encoders.
Hardware
- MCU: Seeed XIAO ESP32-S3 (240 MHz, dual-core)
- IO expansion: 2× MCP23017 (the 8 parameter encoders connect via I2C)
- Display mux: TCA9548A I2C multiplexer for the 4 OLED displays
- Synth connection: UART at 500,000 baud (D6 TX, D7 RX)
- PCB size: 285 mm × 130 mm
- Buttons: PB86-B1 (with LED) / PB86-B0 (without LED), available from AliExpress
KiCad schematics are in the Hardware/ directory.

Build History
The project started in early 2021 on a breadboard with a Seeeduino XIAO (SAMD21), then moved to an ESP32 devboard when memory became a bottleneck, and eventually settled on the Seeed XIAO ESP32-S3 as a drop-in replacement with the same footprint. The first PCB prototype was ordered from JLCPCB and had a few minor errors (MIDI DIN pin swap, resistor silkscreen mix-up) that were corrected in subsequent revisions.
Software
UI Board Firmware
Firmware source is in Software/XVA1UserInterface/ and built with PlatformIO.
# Run from Software/XVA1UserInterface/
platformio run # compile
platformio run -t upload # compile and flash
platformio run -t monitor # open serial monitor (115200 baud)
./upload_and_monitor.sh # flash then monitorSee AGENTS.md for a full architecture breakdown and development notes.
Use in Neovim
In order to use this project in Neovim, you will have to create the file compile_commands.json
file by running the following command:
pio run -t compiledbSynth Management
To manage the XVA1 (or XFM/XFM2) synthesizer's own firmware and programs, use xload-macos — a macOS tool for managing flash memory on XFM/XFM2/XVA1 synthesizers.
Project Structure
Hardware/ KiCad schematics and datasheets
Docs/ Photos of front and back of the board
Software/
XVA1UserInterface/ PlatformIO project (all firmware lives here)Status
Working prototype. Most parameters are implemented and editable. Patch saving is not yet implemented. The PCB design has gone through two revisions; the current version uses the XIAO ESP32-S3.
License
See LICENSE.md.
Parts
65| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 470 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15 |
| 10 | SW_Push_LED | xva1-ui:SW_PUSH_LED-12mm | SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22 |
| 9 | Rotary Encoder | Rotary_Encoder:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm_CircularMountingHoles | SW0, SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8 |
| 4 | SSD1306 | xva1-ui:SSD1306 | DS1, DS2, DS3, DS4 |
| 4 | SW_Push | Button_Switch_THT:SW_PUSH-12mm | SW9, SW10, SW11, SW12 |
| 3 | Conn_01x02 | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J4, J5, J6 |
| 3 | DIN-5_180degree | xva1-ui:MIDI_CONNECTOR_PCB | J1, J2, J3 |
| 3 | MCP23017 | Package_DIP:DIP-28_W7.62mm | U2, U3, U4 |
| 2 | 33 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R4 |
| 1 | 10 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5 |
| 1 | 1N4148 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D1 |
| 1 | 220 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 24LC1025-I/P | Package_DIP:DIP-8_W7.62mm | U8 |
| 1 | 4N36 | Package_DIP:DIP-6_W7.62mm | U9 |
| 1 | CMOD-A7 | xva1-ui:CMOD-A7-DIP-48_W15.24mm | U6 |
| 1 | Seeeduino XIAO | xva1-ui:Seeduino_XIAO_Through-Hole | U1 |
| 1 | TCA9548A | xva1-ui:TCA9548A_BREAKOUT | U5 |
| 1 | TFT_ST7789 | xva1-ui:TFT_IPS-240_240 | DS0 |
| 1 | UDA1334 | xva1-ui:UDA1334 | U7 |
The 59 most common of 65 parts.
Questions
How big is the Xva1-ui PCB?
It measures 284 × 128.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Xva1-ui use?
65 parts, built around the CMOD A7-35T, TCA9548APW, MCP23017-E/SS and 24LC1025-I/P. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Xva1-ui KiCad files?
From the MacMannes/XVA1-User-Interface repository on GitHub, at the commit this page was made from: the board is Hardware/xva1-ui/xva1-ui.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Xva1-ui design in my own project?
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers265.4 × 95.3 mm

- 4 layers111.8 × 80.8 mm

- 4 layers79 × 142 mm

Guitarray control board
IIP-Group/polymap
Repository for the PolyMap Hardware and PolyMap Studio VST Plugin (prototype version).
757 parts4CERN-OHL-P-2.0 - 2 layers173.2 × 167.4 mm

- 6 layers140.8 × 81.3 mm

- 4 layers56.6 × 57.7 mm

MelexisToFcamera4layer
lnsru/melexisToFcamera4layer
Time of Flight camera using MLX75023 and MLX75123, 4 layers pcb done with KiCad
106 parts2MIT - 2 layers65 × 56 mm

Cmoda7 hat
SR-Madsen/AdvancedProgrammableElectronics
Repository used for storing projects from Vivado for the Advanced Programmable Electronics course on the 3rd semester of the Master in Electronics at the University of Southern Denmark.
42 parts - 2 layers135 × 203 mm

SP kicad
Trainmaster2/midi-genie
MIDI Genie ========== The MIDI Genie is an auxiliary APU for the Nintendo Entertainment System. The MIDI Genie is an add-on device that translates the audio output into MIDI.
15 partsGPL-3.0