Skip to content
tomato

Tomato / Build & evidence

What exists today.

I designed a custom 32-bit computer, implemented it on FPGA, and wrote the software it runs. Now I’m turning that architecture into a complete discrete machine, board by board.

Tyrone Marhguy · Penn Computer Engineering · Independent project

01 / Running on FPGA

A complete FPGA computer with its own software.

Assembly-written Tomato OS booted on the complete FPGA implementation.

32-bit CPU + Tomato OS

The complete Nexys A7 FPGA computer boots the assembly-written Tomato OS v3.0 with fourteen menu entries, including Envelop, games, and system tools. The default CPU clock is 6.25 MHz; 90 MHz is only the nextpnr timing target.

The running-machine record

Three-source Dual-LUT ALU

The custom 32-bit ALU computes two independently programmed functions of A, B, and C, then adds them with carry: f(A,B,C) + g(A,B,C) + carry.

Inspect the datapath

ISA, assembler, and programs

Instruction tables and the assembler connect the architecture to executable software. The software stack is part of the machine I built.

Explore the software

02 / Messaging with Envelop

A first-class Tomato application, with honest boundaries.

Envelop running in the current Tomato OS image inside the desktop Virtual Tomato browser emulator
Current generated OS image · browser CPU emulator · simulated peripherals · bridge offline · not an FPGA result

Source-complete

Envelop firmware, setup data, and a bounded remote executor are linked into Tomato OS v3.0. Web/native clients, backend, and bridge software are available in the separate Envelop project.

Follow the message path

Hardware-dependent

A programmed FPGA, attached radio, current authenticated bridge lease, and completed Physical Tomato reply require live evidence. Available bridge software alone is not “online.”

Virtual Tomato

The functional browser emulator runs the generated OS image at ISA level. It is not RTL, FPGA, or the discrete ALU board, and its results remain explicitly labeled.

Play the virtual machine

03 / Physical hardware

An 8-bit discrete ALU slice, fabricated and soldered.

Half-soldered Tomato 07_alu board held next to its Digital simulation
Arrival & Assembly · 18 Aug 2026Half-soldered, next to Digital07_alu · first population · CELL 0 / CELL 1
Arrival & Assembly · 23 Aug 2026Soldering lights on the loop07_alu · bench · board cutaways
View
Bench · landscape
Clip
~45 s · 3s / 2s still

Tomato’s 8-bit Dual-LUT slice

Lot 07 is the fabricated and soldered 8-bit discrete slice of Tomato’s Dual-LUT ALU. Its bench hardware is real; it is not a complete discrete CPU.

See it on the homepage

The rest of the discrete computer

Register, memory, control, and peripheral board work continues. The complete discrete CPU is the build in progress; the FPGA computer is already running.

Follow the board catalog

04 / Simulation & formal verification

130 billion test vectors.
And a separate formal record.

Recorded ALU run

The verification record reports a 130-billion-vector 32-bit ALU Verilator run checked against a reference model. The reproducible harness is checked in; the full run log is not.

Methods and reproduction commands

65,536-pair compiler search

The counter FSM searches every LUT pair for fixed A, B, C, carry, and expected-output values. A hit verifies that one example, not a complete truth table or general function.

Inspect the compiler

ALU formal checks

Formal checks cover the stated ALU properties at 1, 8, and 32 bits. Their assumptions and scope are part of the evidence.

Inspect the sign-off flow

Whole-CPU evidence

Verilog simulation and software running on FPGA exercise the complete computer. Whole-CPU formal verification remains future work.

Read the verification FAQ

05 / Next in the build

Finish the physical machine.
Keep making it useful.

Discrete integration

Finish and connect the remaining boards, then test their timing and behavior together.

Software coverage

Grow the applications and instruction coverage that put the configurable ALU to work.

Architecture experiments

Pre-adder and post-adder shifting remain experiments. An LLVM backend is a future direction, not a finished deliverable.

The open design questions

An invitation to engineers

Where does the reasoning break?

I’m interested in detailed criticism of the Dual-LUT datapath, the verification assumptions, and the transition from FPGA to discrete hardware. A counterexample, a reproduced result, or a better timing argument can shape the next version.