asic / field notes 001

Software engineer → chip designer

From code
to pins.

A guided entry into Jane Street’s protocol emulator challenge. Start with what you know: state machines, instruction sets, and queues. Add one new constraint: time is part of the output.

Start the 15-minute guide ↓Then build one tiny circuit.

00 / The brief, decoded

A programmable instrument
for talking to hardware.

Original: Benjamin Devlin & Anish Singhani, Jane Street, September 10, 2026 ↗. This is an independent learning companion, not a Jane Street publication. Rules checked November 1, 2026; the original remains authoritative.

Build an open-source ASIC that can learn new wire protocols through firmware after manufacture. Begin with UART, SPI and I²C; RP2040 PIO and TI PRU are suggested precedents. FPGA prototyping is encouraged if available. The article welcomes distinctive functionality and verification approaches, including AI-assisted work.

Submit by
January 18, 2027
Current allocation
6 × 4 tiles
Process / template
IHP 130 nm CMOS5L
Selected designs
Funded fabrication + boards

8×4 is tentative, not the present limit. March 2027 is the target shuttle, subject to foundry scheduling. The article recommends teams. USB low-speed, 10 Mbit Ethernet, JTAG, SWD, PS/2 and CAN are extension ideas. Check its sign-up and submission updates directly. There is no promised hiring outcome.

Our starting decision: a guided overview first, followed immediately by a register-and-counter exercise. A broad electronics course would postpone the useful feedback. You need enough circuit intuition to challenge AI’s output, then measurements to guide architecture. Transistor physics can deepen alongside the work.

01 / The mental shift

You describe a machine.
Then the machine runs.

In software, x = a + b usually asks an existing processor to perform an operation. In a hardware description, an expression can describe an adder that physically exists and continuously responds to its inputs. Two independent adders can operate at the same time. More parallel work often means more circuit area.

Combinational logic

Output = f(input)

Gates, adders and multiplexers (hardware selectors). No stored history. A changed input propagates to the output after a physical delay.

Sequential logic

Next state = f(state, input)

Flip-flops hold bits. In a synchronous design, registers capture their next values at a clock edge. Between edges, logic computes what comes next.

Experiment 01Concurrent register updates
always @(posedge clk) begin
  a <= b;
  b <= a;
end
REGISTER a0
REGISTER b1

Initial state: a = 0, b = 1.

Predict before clicking. Both right-hand sides use the values before the edge; nonblocking assignments update both registers. This swaps bits. The illustration supplies an initial state; the snippet itself contains no reset.

RTL means register-transfer level: describe stored state and the logic between registers. Verilog/SystemVerilog are hardware description languages; Hardcaml generates RTL from OCaml. A source loop may replicate hardware during elaboration; it does not automatically imply a CPU executing repeated instructions. Some constructs are for simulation only. Practice clocked versus combinational blocks →

The physics you need immediately

A digital bit is an interpretation of a voltage range, referenced to ground. CMOS uses complementary transistor networks to implement logic. Real wires and transistor inputs have resistance and capacitance: edges take time and consume energy. A floating input has no assured logical value. A short between active high and low drivers can cause excessive current.

You do not need semiconductor device equations to write your first RTL. You do need the target’s voltage limits, timing constraints, reset behavior, and I/O drive rules before connecting hardware. A logic-level UART is not automatically compatible with RS-232 voltages. The transistor-level introduction can wait until the first waveform makes sense.

Tiny Tapeout: semiconductor exploration with SiliWiz →

02 / One byte on a wire

“Send A” is a timed
sequence of voltages.

UART sends serial bits without a shared clock wire. Both ends agree on the bit rate and frame format. In common 8N1, the idle line is high, a low start bit begins the frame, eight data bits follow least-significant bit first, and a high stop bit ends it. N means no parity bit. UART introduction, Analog Devices →

Experiment 02Idealized UART transmitter · 8N1

The plot uses equal visual widths per bit; the values below it show real time. Dashed markers are nominal data-bit sampling centers. No noise, clock mismatch, receiver synchronization, or electrical loading is simulated.

At a hypothetical 24 MHz engine clock, one cycle takes 41.67 ns. Dividing by 208 produces about 115,384.6 bits/s, +0.16% from 115,200. That is a divider calculation, not a promise of timing closure or a receiver tolerance budget. Start-bit detection latency and the other endpoint’s clock error also matter.

Why a tiny processor?

A normal OS can interrupt your pin-toggling loop. Caches, scheduling and peripheral-bus delays complicate exact timing. A dedicated engine can make instructions such as “write this pin, then wait N cycles” predictable. Its firmware is a program; its execution hardware is the circuit you design.

Three protocols, three kinds of difficulty

ProtocolHow it coordinatesWhat your engine needs
UARTAgreed bit duration; separate transmit/receive lines and a ground reference.Timed output, input sampling, framing; RX must handle asynchronous arrival.
SPIA controller supplies a clock; chip select identifies the target. Data can travel both ways.Clock/data sequencing, configurable sample edge and idle polarity, precise setup/hold.
I²CShared data and clock lines; devices pull low or release. Pull-up resistors provide high.Output-enable control, reading the actual bus, ACK/NACK and clock-stretch handling within the supported mode.

SPI: Analog Devices · I²C: NXP specification, §3

Experiment 03Why “release” is different from “write 1”
VDD → pull-up resistor → shared lineHIGH

Either device pulling low makes the line low. It rises only when both release. This is an idealized open-drain model; real rise time depends on resistance and capacitance. A clock-stretching target can keep SCL low even after the controller releases it.

Drivers, firmware, and the physical interface

A host-side driver moves commands and data between an application and device registers or queues. The chip’s firmware is the instruction stream running on its small engine. The electrical interface is a third concern: pin voltages, pull-ups, drive current and any external transceiver. A clever instruction set cannot make an incompatible electrical interface safe.

For CAN or Ethernet, distinguish protocol logic from the physical-layer interface. External analog circuitry or a transceiver may be necessary; determine permitted board support and pin compatibility before promising a protocol. Begin with the simpler digital interfaces.

03 / A candidate architecture

A small instruction set.
A very explicit contract.

This is a teaching sketch, not an implemented or measured competition entry. It separates the host’s irregular timing from the pin engine’s controlled timing.

HOSTLoad program
Queue bytes
BUFFERTX / RX
FIFOs
ENGINEPC · decoder
shift · timer
I/OSample · drive
enable
Instruction memory → engine   /   clock + reset → all state
PC = program counter. FIFO = first-in, first-out queue. Each box represents hardware; arrows represent data or control paths.

Give every instruction a precise transition rule: which registers change, when a pin changes, how many clock edges elapse, and what stalls it. Define what happens if a FIFO is empty or full. Blocking in the middle of a frame can break the protocol even if every transmitted bit is logically correct.

// Illustrative ISA notation, not executable RTL.
DRIVE TX, 0, HOLD=208   // start bit: exactly 208 cycles total
SHIFT_OUT TX, HOLD=208 // emit next low bit, shift, hold
...                    // eight data bits in all
DRIVE TX, 1, HOLD=208   // stop bit

Our hypothetical HOLD includes the instruction’s emission cycle. Other semantics are possible; specifying the choice prevents off-by-one errors. A synchronous instruction memory may add fetch latency. You must account for that in the architecture instead of assuming each instruction takes one cycle.

Study RP2040 PIO for one concrete approach: short programs, shift registers, small queues and deterministic I/O. TI PRU is another reference with a different balance of general computation and direct I/O. Learn the tradeoffs before choosing how yours differs. Raspberry Pi PIO overview →

A promising research direction, not a winning claim

A compiler that turns timing requirements into small programs, plus an independently checked pin-trace contract, could make the device easier to trust and use. First demonstrate that one engine handles multiple protocols and fits. Then compare this idea against existing PIO tools and quantify any advantage.

04 / Getting to silicon

The compiler has a
physical backend.

ASIC means application-specific integrated circuit: its manufactured logic and interconnect are fixed. Firmware can remain changeable if you design writable program memory and a loader. An FPGA contains configurable logic and routing, so it is useful for prototyping, but passing on an FPGA does not establish that the ASIC will meet its own timing or electrical requirements.

  1. Specification → RTLWrite the behavior, interfaces, reset and cycle semantics. Simulate the hardware description.
  2. Synthesis → netlistMap the description to gates and storage cells from a technology library. Inspect area and inferred memories.
  3. Place, clock, routePosition cells, distribute the clock and connect wires. Wire lengths now affect delay.
  4. Checks → GDS → fabricationCheck timing, layout design rules and connectivity. GDS describes layout geometry for manufacturing; tapeout is the handoff.

Yosys synthesis overview · Tiny Tapeout: RTL to layout, with video · Competition-linked CMOS5L template

Allocation illustration · not a floorplan

Area is a design budget.

Using the article’s approximate 200 × 150 µm tile dimensions: 24 × 200 × 150 = 720,000 µm² = 0.72 mm² nominally. That is not all usable logic area. Routing, clock distribution and physical constraints consume capacity.

For scale, a hypothetical 256 × 16 instruction store holds 4,096 bits. Implementing it as flip-flops also needs selection and write logic. An SRAM macro can be denser but brings fixed dimensions, ports and timing. Verify availability and integration for the exact flow. Inspect a Tiny Tapeout SRAM example →

Timing closure and metastability, without hand-waving

A register launches data after a clock edge. Logic and wires delay it. The next register needs the input stable before its capture edge (setup) and briefly afterward (hold). A simplified setup constraint is clock period ≥ clock-to-Q + logic/wire delay + setup time + clock uncertainty. Hold is a separate minimum-delay check; lowering clock frequency does not generally fix it.

An external pin can change near a sampling edge. The first receiving flip-flop may become metastable and take unusually long to settle. A synchronizer reduces the probability that this propagates, with added latency; it does not eliminate the phenomenon. Multi-bit transfers need an appropriate handshake or asynchronous FIFO, not simply independent synchronizers on each bit. Input latency becomes part of the pin engine’s timing contract.

Use AI aggressively. Make evidence independent.

AI can draft RTL, explain waveforms, write an assembler and propose tests. The valuable skill is deciding what must be true and checking it through a different route. An implementation and a test copied from the same mistaken assumption can agree perfectly.

  • Behavior: send programs and bytes through the real simulator/CLI; independently decode pin traces. Include reset mid-frame, empty/full queues, unexpected input and back-to-back transactions.
  • Formal properties: prove a specific claim under explicit assumptions—for example, no active-high drive in open-drain mode. A bounded proof is limited to its horizon unless a complete proof is established.
  • Physical feasibility: keep synthesis and routed timing reports for the exact source and constraints. Passing simulation does not prove timing closure.
  • Hardware acceptance: when available, use an FPGA and a real peer device with captured traces; later validate fabricated silicon. Label simulation, FPGA results and silicon results separately.

For a strong engineering portfolio, keep short design decisions, reproducible commands, failing examples, measured tradeoffs and a demo that another person can run. That gives reviewers evidence of your judgment as well as AI’s output.

05 / Start here today

One session.
One explainable result.

Spend about 60–90 minutes. The target is to explain every register and clock edge in a tiny design. No hardware purchase is needed for this first session.

  1. Read and predict · 15 minutes

    Use the three experiments above. Explain why the registers swap, why UART 8N1 needs ten bit periods per byte, and why an I²C device releases a line.

  2. Practice HDL · 30 minutes

    On HDLBits, do a wire, a mux, a D flip-flop, a resettable flip-flop and a counter. Skip repetitive elementary Boolean exercises once comfortable. Predict behavior before using the checker.

  3. Write the first contract · 15 minutes

    Specify a transmitter: clock rate, baud divider, 8N1 format, idle level, reset behavior and what a send request means while busy. For a 24 MHz / 208-cycle example, one ten-bit frame occupies 2,080 engine cycles. Choose whether requests queue or are rejected; don’t leave it implicit.

  4. Next build · one UART transmitter

    Implement and simulate that contract, then decode its waveform independently. Only after this works should the fixed state machine become programmable. Synthesize early enough to let area and timing influence the instruction set.

Checkpoint: can you answer these without AI?
  1. What changes in the register experiment if both registers start at zero?
  2. Why is 115,200 baud only 11,520 data bytes/second for uninterrupted 8N1?
  3. What happens if your engine waits for host data halfway through a UART byte?
  4. Why doesn’t successful RTL simulation prove your circuit can run at 24 MHz?
Check your reasoning

Both registers remain zero. Each byte takes ten bit periods, so divide by ten. A mid-frame stall lengthens a bit and can corrupt the receiver’s interpretation. RTL simulation normally omits the actual routed delays and electrical behavior, so physical implementation and timing checks are separate evidence.

The smallest useful reading list

Use these in order. Time boxes are suggested study time, not video runtimes.

Defer full CPU courses, transistor fabrication detail, USB/Ethernet and clever multi-engine designs. Return to them when a measured design need appears. Hardcaml is worth evaluating after you can read basic RTL; there is no need to choose the final implementation language today.

asic / back to the first edge ↑

Original explanations and teaching diagrams · November 1, 2026
Browser experiments are educational models, not verification of an ASIC.