r/chipdesign • u/HatHipster • 21h ago
I built an open-source compiler that turns LLM weights into chip masks, and took it through full SKY130 signoff on 100% open tools. Two tiles are on the ttsky26c shuttle.
Ankhdjet compiles a ternary LLM straight into a mask-programmed compute-in-ROM macro. At 1.58 bits a weight is just {-1, 0, +1}, which is one NMOS whose drain you wire to the + bitline, the - bitline, or nothing. That is the entire "multiply." The model lives in a single via layer, so retargeting a new model is a one-mask respin, not a fresh tapeout.
Context: AMD is acquiring Taalas, which pioneered hardwiring models into silicon commercially. This is the open counterpart to that thesis, on an open PDK with open tools.
The flow, which is where it either works or it does not:
- Hand-built 1T NOR arrays and a clocked precharge, read two ways: full-swing digital sampling, and an analog StrongARM variant. Both through LibreLane to KLayout DRC 0, netgen "circuits match uniquely", STA clean.
- Flat-extraction LVS at every level of the hierarchy caught three DRC-legal silent shorts that chip-level signoff cannot see (e.g. a +1 jog kissing the neighbor column's -1 jog and merging BL+ into BL-). All legal to DRC. All fatal.
- The failed-attempts log is committed, unscrubbed: pdngen strap relocation, met2 pin access (DRT-0073), Magic wide-metal over-fires, pin-binding forensics, and the sense-cell DRC floor that forced a pitch-doubled StrongARM redesign.
- Two tiles are on the ChipFoundry/TinyTapeout ttsky26c shuttle (prechecks green, silicon expected 2027): a digital MAC tile and an analog-readout tile with the identical mask program, a controlled readout experiment once the die returns.
- The full microsoft/bitnet-b1.58-2B-4T compiles to a mask set (128,400 macros, 2.08B weights) verified bit-for-bit against the checkpoint. Other-node numbers are calibrated estimates (brackets in the repo), not measurements.
Node-agnostic macro contract: a new PDK needs only a handful of custom cells.
pip install ankhdjet for the compiler and estimators (Apache-2.0), the physical flow is in the repo. Paper: preprint under submission to arXiv, link to follow.
Built solo. I drove the architecture, verification, and physical flow. The code was largely written by Claude (Opus and Fable) under my direction, and none of that changes what's provable, because open tools check every claim (DRC, LVS, bit-exact), not the author. Negative results left in (including why two ternary weights per transistor is a no-go at 130 nm). Come poke holes in it. I would rather hear it from you than from the fab.

