Chip Order  by Kai Kim Labs

Custom chips on Tiny Tapeout · sky130

Describe the chip in Python. Get back a tapeout ready repo.

You write a cycle-level Python model of what the chip should do. An AI agent writes the Verilog. You only get it back after it matches your model bit for bit, catches injected faults, and passes the official Tiny Tapeout layout flow.

Pilot: the first 10 orders are free. Next shuttle closes 2026-11-30.

Order: 4 channel PWMtt_um_joonsense_pwm4
  1. Verilator lint -Wall, errors block delivery0 warnings
  2. RTL vs your model every clock, 3 seeds, reset mid run8,997 / 8,997
  3. Synthesized netlist vs model Yosys gates, same test8,997 / 8,997
  4. Mutation test broken copies of the RTL must fail5 / 5 caught
  5. sky130 fit calibrated on 11 real layouts1x1 tile
  6. Tiny Tapeout gds · precheck · gate level DRC 0 · LVS 0 · antenna 0+11.33 ns @ 50 MHz
10designs through the official Tiny Tapeout flow, all DRC 0 and LVS 0
80multiply accumulates per clock in the largest one, a digit classifier
~10 sfrom Verilog to a full verdict on a laptop, before any layout run
€70per 1x1 tile, paid to Tiny Tapeout if you fabricate. Our part is free in the pilot

Your model is the contract.

A chip that matches a vague spec is a guess. A chip that matches your Python model on every clock is not. Write the model here, run it on random inputs, and look at the waveform before you order. This runs the same loop as the cocotb test that ships in your repo, in your browser, nothing uploaded.

Python loads on the first run (about 7 MB, once).
The waveform shows up here: inputs you drove, outputs your model says the chip must produce.
cycle 096 shown

The contract: Model.reset(), and Model.cycle(ui_in, uio_in) returns (uo_out, uio_out, uio_oe) as seen just before the next rising edge, then advances one clock. Optional stimulus(rng, cycles) yields (ui_in, uio_in[, rst_n]) so the test drives your protocol, not noise.

Nothing ships on the agent's word.

The agent only writes Verilog. Your model and the test are fixed, and it cannot touch them. Every failure goes back to the agent with the first mismatching clock, the inputs, what your model expected and what the chip did.

01

You write the spec and model

Plain English for the pins and protocol, Python for the exact behaviour, including latency. Ambiguity gets settled here, not in silicon.

Catches a model that breaks its own contract before any Verilog exists.

02

The agent writes RTL

Verilog-2005 for one tt_um_* module with the Tiny Tapeout pins. Lint errors, mismatches and size problems go back to it, up to a fixed number of attempts.

Catches lint errors, latches, wrong widths via Verilator -Wall.

03

Cycle exact simulation

The cocotb test that ships in your repo drives your stimulus every clock and compares every output pin with your model, over three seeds with a reset in the middle.

Catches off by one clock, wrong reset, X on outputs.

04

Same test on the gates

Yosys synthesizes the RTL and the netlist runs the same test. Then sky130 area and 50 MHz timing are predicted with a model fitted to 11 real layouts.

Catches simulation and synthesis disagreeing, designs too big for the tile.

05

The test is tested

Copies of the RTL with one operator flipped run through the test. Each one should fail. Survivors are listed in your report: either harmless or a gap in your stimulus.

Catches a test that passes anything.

06

Official layout flow

Your repo runs the Tiny Tapeout gds, precheck and gate level workflows in GitHub Actions: placement, routing, DRC, LVS, antenna, timing at slow corner.

Catches anything that would get a shuttle submission rejected.

Orders, with receipts.

Each delivery is a public repository you can clone, re-run and submit. The badges are live GitHub Actions results, not screenshots.

Hand written RTL, verified by the flow

4 channel PWM controller

Four 8 bit PWM outputs on a shared counter, duty registers loaded over the bidirectional pins.

gdstest
Cycles matched8,997 RTL · 8,997 gates
Mutants caught5 / 5
Layout1x1 · 20.8% · DRC 0 · LVS 0
Setup slack, slow corner+11.33 ns at 50 MHz
Agent written RTL · first attempt

Quadrature encoder decoder

Rotary encoder input through a two flop synchronizer, 8 bit position count, sticky error on illegal jumps. The latency is part of the contract.

Agent attempts1 (53 s, spec to verdict)

Order a design.

Orders are GitHub issues, so the spec, the model, every agent attempt and the final report stay public and linkable. Need it private? Say so in the issue and we will move to a private repository.

Pilot

Free

First 10 orders. You pay Tiny Tapeout directly only if you fabricate.

  • RTL written and verified against your model
  • A Tiny Tapeout repository with green gds, precheck and gate level runs
  • Verification report: cycles, mutants, area, timing, every attempt
  • Apache 2.0, the repository is yours
Open an order

What makes a good order

  1. Fits Tiny Tapeout I/O: 8 inputs, 8 outputs, 8 bidirectional pins, one clock.
  2. Digital and synchronous. No analog, no RAM macros, no second clock domain.
  3. Fits a few tiles: think counters, controllers, protocol engines, small DSP and ML datapaths.
  4. A model that runs in the box above without errors, with a stimulus that exercises your protocol.

Not sure it fits? Open the order anyway. A failed order costs you nothing and the report says exactly where it stopped.

Questions

Is this a real chip?

It is a design that passes the same layout and checks Tiny Tapeout requires for a shuttle. It becomes silicon when you submit the repository and buy a tile at app.tinytapeout.com. None of the example designs has been fabricated yet, and we say so in every report.

Why a Python model instead of just a spec?

Because English leaves the timing open. "Outputs the count" does not say which clock. A cycle-level model does, and it turns into a test the agent cannot argue with.

What if the agent can't do it?

You get the report anyway: each attempt, the stage it failed at, and the first mismatching clock. Often that points at the model, not the RTL.

Which agent?

Claude, run as a tool-less code generator. It only produces Verilog text. Simulation, synthesis, mutation testing and layout are done by Icarus, Verilator, Yosys, OpenSTA and the Tiny Tapeout LibreLane flow.

Can I bring my own Verilog?

Yes. Attach it to the order and it goes through the same checks without the agent. That alone is a useful second opinion before a shuttle deadline.

Who is behind this?

Kai Kim (@KaiKimLabs). The same flow designed an 8 MAC per clock accelerator and a digit classifier in one tile. Write up: kaikimlabs.com.