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.
01You 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.
02The 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.
03Cycle 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.
04Same 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.
05The 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.
06Official 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.