SKIP TO CONTENT
ARRAY
01 · THE MACHINE
ONE PRIMITIVE · ONE EDGE PER BLOCK

A 16-bit
machine
that lives
on-chain.

ARRAY is a deterministic 16-bit processor composed from a single computational primitive. It advances one step per block, and every state transition is committed to the chain.

The contract does not emulate the processor. It executes the machine. Every cycle is a real state transition, and nothing is inferred between cycles.

No contract is deployed. Every figure on this page is read from the machine running in this browser, and the figures that describe a deployed instance are marked.

// DIE FLOORPLANREAD FROM THE NETLIST
REGISTER FILE16×16 FFREAD PORTS1,920 NANDABSTACK POINTER8 FF0x80MEMORY PORT242 NANDADRDATINSTRUCTION REG32 FFDECODER 5→32261 NANDARITHMETIC752 NANDADDLOGICSHIFTSELFLAGS4 FFZNCVCONTROL MATRIX241 NANDPROGRAM COUNTER12 FFPHASEONE PASSFETCHDECODEEXECUTESKIPWRITEBACKCOMMITNETLIST3,912 NANDADDERLOGIC UNITBARREL SHIFTERRESULT SELECTFLAG UNITREAD PORT AREAD PORT BREGISTER FILECOUNTER INCREMENTCOUNTER SOURCEOPCODE DECODERMEMORY PORTSTACK POINTERINSTRUCTION REGISTERCONTROL MATRIXONE PRIMITIVE312 FLIP-FLOPS3,912 NAND CELLSONE EDGE PER BLOCKARRAY-16 R0 · PLAN VIEW · CELLS ARE STATEFETCH
DETERMINISTICVERIFIABLEREPLAYABLEPERSISTENTNO OPERATOR REQUIRED
NAND CELLS3,912one primitive
FLIP-FLOPS312state elements
RAM4 KBbyte addressed
ROM2,048instruction words
INSTRUCTION SET325-bit opcode
BLOCK CLOCK1 STEPper block
SWITCHING177control assertions
01.2 · LIVE MACHINE
EXECUTING RIGHT NOW · IN THIS BROWSER
// LIVE MACHINE
LOCAL STATECYCLE12,482,186
REGISTER FILE · 16 × 16 FLIP-FLOPSA LIT CELL IS A SET BIT
···12···8···4···0
R0
0000
R1
0000
R2
0000
R3
0000
R4
0000
R5
0000
R6
0000
R7
0000
R8
0000
R9
0000
RA
0000
RB
0000
RC
0000
RD
0000
RE
0000
RF
0000
NETLIST ACTIVITY3/15 BLOCKS · 397 CELLS DRIVEN
  • ADDER144
  • LOGIC UNIT160
  • BARREL SHIFTER256
  • RESULT SELECT192
  • FLAG UNIT52
  • READ PORT A960
  • READ PORT B960
  • REGISTER FILE132
  • COUNTER INCREMENT72
  • COUNTER SOURCE96
  • OPCODE DECODER261
  • MEMORY PORT242
  • STACK POINTER80
  • INSTRUCTION REGISTER64
  • CONTROL MATRIX241

3,912 NAND · 312 FF · 177 CONTROL ASSERTIONS ACROSS THE SET

REGISTER READ0000 0000
DECODE 5→32LDI
ALU0000
REGISTER WRITE—
MEMORY PORTIDLE
CONTROL MATRIX4/15
FLAGS· · · ·
ZNCV
PC0x000
IR0x00000000
SP0x0080
FLAGSZNCV
REGISTER FILE · HEX
R00000
R10000
R20000
R30000
R40000
R50000
R60000
R70000
R80000
R90000
RA0000
RB0000
RC0000
RD0000
RE0000
RF0000
EXECUTINGLDI R2, #17
ROM ACCUMULATE · 15 W · 0x000
FETCH
DECODE
EXECUTE
WRITEBACK
COMMIT
CLOCK STOPPED · COMMITMENT D8A1F2147D2F…
■ / EXECUTION TRACEBLOCK 21,004,310 · NEWEST FIRST
#BLOCKPCOPOPERANDSRESULT
NO TRANSITIONS COMMITTED SINCE RESET
NO TRANSITIONS COMMITTED SINCE RESET
NO TRANSITIONS COMMITTED SINCE RESET
01.3 · WHAT IT DOES
MEASURED ON ARRAY-16 R0

Four things,
all of them
checkable.

A machine is not a claim about capability. It is a data path, a store, a set of instructions and a boundary. Each of the four statements below corresponds to something in the netlist, and each figure beside it was produced by running the machine.

Nothing here is rounded for effect. Where a figure is a range, it is because the machine takes a different number of phases depending on what the flags say.

01PHASES PER DECISION · 180 SAMPLES

IT DECIDES

The machine consumes an input and follows a deterministic execution path. A comparison writes the flags, and the branch that follows consumes them. The path taken is a function of the state, not of timing.

PORT INCMPIJMZ TAKENNOT TAKENFLAGS DECIDE · ONE PATH RETIRES
9–10PHASES PER DECISION · 180 SAMPLES
02VECTORS IN A FULL SWEEP

IT COMPUTES

A complete sixteen-bit arithmetic unit executes the fixed instruction set: one ripple carry adder, one bitwise logic unit, one four stage barrel shifter, and one result multiplexer. Subtraction is addition of the complement.

ADDER 144LOGIC 160SHIFT 2564→1 MUXRESULTONE RESULT PATH · FLAGS FROM THE CHAIN
1,048,576VECTORS IN A FULL SWEEP
03BITS · 256 FLIP-FLOPS

IT REMEMBERS

Sixteen registers and 4 KB of persistent store retain state across transitions, including a 64-word stack page for call depth. State survives a halt: a stopped machine is still readable.

16 × 16 FLIP-FLOPS4 KB STORE · 64 W STACKSTATE PERSISTS ACROSS TRANSITIONS
16 × 16BITS · 256 FLIP-FLOPS
04BYTE IN · BYTE OUT

IT DRIVES

The machine exposes an input and output boundary that lets programs interact with external state. There are no I/O instructions: both ports are mapped into the top of the store, so a load is a read and a store is a write.

HOST → 0x1000MACHINE → HOSTMAPPED INTOTHE STORE1 BYTE IN · 1 BYTE OUT · NO I/O OPCODES
1 / 1BYTE IN · BYTE OUT
02 · FABRICATION
3,912 NAND · 312 FF · 15 BLOCKS

From one primitive
to blockspace.

Every part of the machine is built from a single computational primitive. Nothing is assumed and nothing is hidden: the processor is constructed in layers, from boolean logic to a verifiable state machine, and each layer is countable in terms of the layer below it.

NAND is universal, so no second kind of gate is required anywhere above it. The cost of that decision is visible in the budget: two read ports account for 1,920 of the 3,912 cells, because a sixteen-to-one multiplexer is expensive when it is made of nothing but NAND.

VIEW THE BUILD PROCESS
01PRIMITIVEBoolean cell
One two-input cell. Universal, so nothing above it needs a second kind of gate.
1 NAND
02ARITHMETICAdder / logic / shifter
A ripple carry adder, a bitwise logic unit and a four stage barrel shifter, selected by one result multiplexer.
804 NAND · 4 FF
03REGISTERS16 × 16-bit
Sixteen words of addressable state with two read ports and one write port.
2,052 NAND · 256 FF
04MEMORY4 KB RAM
A byte addressed store with sixteen-bit access, a stack page and two mapped byte ports.
322 NAND · 8 FF
05CONTROLDecoder / matrix
A five to thirty-two decoder and a control matrix that asserts data path lines by phase.
734 NAND · 44 FF
06PROCESSORARRAY-16
One machine. Deterministic, replayable, and advanced by an external edge.
3,912 NAND · 312 FF
THE PRIMITIVE1 CELL · UNIVERSAL
ABY0 010 111 011 10

One two-input cell whose output is low only when both inputs are high. Every gate in the machine — inverter, conjunction, disjunction, exclusive disjunction, multiplexer, latch — is composed from it.

THE ADDER16 × 9 = 144 NAND
A BCSUM · 16 × 9 NAND = 144

Sixteen full adders in a ripple carry chain. The carry out of bit fifteen is the carry flag; overflow is that carry differing from the carry into bit fifteen. Both flags come off the chain, not out of a formula.

THE BUDGETSUM OF THE NETLIST
ARITHMETIC8044 FF
REGISTERS2,052256 FF
MEMORY3228 FF
CONTROL73444 FF
PROCESSOR3,912312 FF

The processor layer is the whole netlist, not a block of its own. Sequential elements are counted separately because a flip-flop is not a gate: it is a state element built from gates that holds a value between two edges of an external clock.

03 · INSTRUCTION SET
5-BIT FIELD · 32 DEFINED · 0 RESERVED

Five bits.
Thirty-two opcodes.

The opcode field is five bits wide, producing thirty-two possible instructions. All thirty-two are defined, so the set is closed: there is no reserved space, no extension mechanism, and no undefined opcode for a program to reach. The architecture is fixed. Programs are data.

Two omissions are deliberate. There is no SWAP, because three exclusive disjunctions exchange two registers without a temporary. There are no input or output instructions, because both ports are mapped into the store and a load already reads.

This is the ARRAY-16 R0 architecture specification. It is implemented by the machine in this page and by the independent model used in CHECK 02. It is not a deployed instruction set.

VIEW THE OPCODES
INSTRUCTION WORD32 BIT · 25 SIGNIFICANT
RSV31:257 BITOP24:205 BITRD19:164 BITRS15:124 BITIMM/ADDR11:012 BITMSB 310 LSB

A word is canonical when the seven reserved bits are zero and every field the instruction does not read is zero. Exactly one encoding exists for any instruction, which is what makes one machine’s transition comparable with another’s without a normalisation step. A non-canonical word raises a fault at fetch.

THE SET32 OPCODES
00000
NOP
00001
MOV
00010
LDI
00011
LOAD
00100
LDR
00101
STORE
00110
STR
00111
PUSH
01000
POP
01001
ADD
01010
ADDI
01011
SUB
01100
SUBI
01101
INC
01110
DEC
01111
NEG
10000
AND
10001
OR
10010
XOR
10011
NOT
10100
SHL
10101
SHR
10110
ASR
10111
CMP
11000
CMPI
11001
JMP
11010
JMZ
11011
JNZ
11100
JMN
11101
CALL
11110
RET
11111
HALT
TRANSFER
2
MEMORY
4
STACK
2
ARITHMETIC
7
LOGIC
4
SHIFT
3
COMPARE
2
CONTROL
8
OPCODE EXPLORERSELECT AN INSTRUCTION
CLASS
32 OF 32
OPCODEHEXMNEMONICOPERANDSFLAGSΦ
0000000——3
0000101Rd, Rs—4
0001002Rd, #imm—4
0001103Rd, [addr]—5
0010004Rd, [Rs]—5
0010105[addr], Rs—5
0011006[Rd], Rs—5
0011107Rs—5
0100008Rd—5
0100109Rd, RsZNCV5
010100ARd, #immZNCV5
010110BRd, RsZNCV5
011000CRd, #immZNCV5
011010DRdZNCV5
011100ERdZNCV5
011110FRdZNCV5
1000010Rd, RsZN5
1000111Rd, RsZN5
1001012Rd, RsZN5
1001113RdZN5
1010014Rd, #nZNC5
1010115Rd, #nZNC5
1011016Rd, #nZNC5
1011117Rd, RsZNCV5
1100018Rd, #immZNCV5
1100119addr—5
110101Aaddr—5
110111Baddr—5
111001Caddr—5
111011Daddr—5
111101E——5
111111F——3
INSTRUCTION · ARITHMETICOPCODE 01001

ADDRd, Rs

00912000 · ADD R1, R2

Adds the source register to the destination register.

ENCODING · EXAMPLE WORDRSV31:257 BITOP24:205 BITRD19:164 BITRS15:124 BITIMM/ADDR11:012 BITMSB 310 LSB0x00912000
FIELDS READ
  • RDR1
  • RSR2
  • IMM/ADDRzero
  • RSV 31:25must be zero
PHASES
  • FETCHRUNS
  • DECODERUNS
  • EXECUTERUNS
  • WRITEBACKRUNS
  • COMMITRUNS

5 PHASES

FLAGS WRITTEN
ZNCV

UNLISTED FLAGS RETAIN THEIR VALUE

CONTROL ASSERTIONS · 7/15
IR_LDPC_INCPC_LOADRARBIMM_SELALU_ENSH_ENFLG_WRREG_WRMEM_RDMEM_WRSP_DECSP_INCHALT_L
04 · VERIFICATION
5 CHECKS · RUN LOCALLY · NO AUDIT CLAIMED

Five checks,
and none of them
is the same check twice.

The arithmetic is checked against the same arithmetic built out of the primitive. The machine is checked against a second interpreter that shares no execution code with it. The encoding is checked by disassembling a word and reassembling the text. Randomised execution is checked for architectural validity at every phase. And the replay property the contract would depend on is checked by running the same program twice.

The fifth exists because a machine that agrees with itself is not evidence. It compares the sequence of state commitments produced by two independently constructed machines running the same program with the same inputs, digit for digit.

No third party has audited anything. Every figure below is produced by code in this page: a full CHECK 01 sweep runs 1,048,576 vectors through the machine and compares each one against the gate level model.

READ THE VERIFICATION
VERIFICATION RUNNER0 PASS · 0 FAIL · 5 NOT RUN
CHECK 01
IDLE

THE ARITHMETIC

Every arithmetic, logic and shift instruction produces the same result and the same four flags as the same operation built out of the primitive.

METHOD
Deterministic vectors are driven through the machine one instruction at a time. The expected value is computed by the gate level model in gates.ts, which composes NAND cells into a ripple carry adder, a logic unit and a four stage barrel shifter.
A PASS DOES NOT ESTABLISH
A sampled sweep covers the operand space it visits. The full sweep is exhaustive over its own vector schedule, not over all 2³² operand pairs.
0VECTORS · OF 4,096

QUICK 4,096 · FULL 1,048,576 VECTORS

CHECK 02
IDLE

AN INDEPENDENT MODEL

A second interpreter, sharing no execution code with the machine, reaches identical architectural state after every retired instruction.

METHOD
Both models execute the reference programs and a set of generated programs. After each retirement the program counter, instruction register, stack pointer, register file, flags and the whole store are compared.
A PASS DOES NOT ESTABLISH
Agreement between two models is not a proof of correctness. It is a proof that a single mistake would have to occur twice, in two different implementations, in the same way.
0RETIREMENTS · OF 20,000

QUICK 20,000 · FULL 400,000 RETIREMENTS

CHECK 03
IDLE

THE SHIPPED PATH

The encoding is canonical and the text path is closed: an instruction word disassembles to text that reassembles to the identical word.

METHOD
Words are constructed across the opcode, destination, source and immediate fields, decoded, disassembled, and passed back through the assembler used by the editor. Reserved bits are checked to reject non canonical words.
A PASS DOES NOT ESTABLISH
This checks the representation, not the semantics. A closed encoding with a wrong opcode assignment would still pass.
0WORDS · OF 8,192

QUICK 8,192 · FULL 131,072 WORDS

CHECK 04
IDLE

LIVENESS

Randomised execution never reaches an undefined architectural state. It either runs, halts, or raises one of the declared faults.

METHOD
Generated programs are executed for a phase budget. Every phase is checked for register width, stack pointer range, program counter range, phase list validity and monotonic cycle count.
A PASS DOES NOT ESTABLISH
Randomised execution samples the state space. It does not enumerate it.
0PHASES · OF 60,000

QUICK 60,000 · FULL 1,200,000 PHASES

CHECK 05
IDLE

THE COMMITMENT

A machine replayed from its program and its inputs produces the identical sequence of state commitments. This is the property the contract requires.

METHOD
A machine is run and its per cycle commitments recorded. A second machine is constructed from the same program and driven with the same inputs, and the two commitment sequences are compared digit for digit.
A PASS DOES NOT ESTABLISH
No contract is deployed. This check verifies the replay property that an on-chain execution would depend on, on this machine, in this browser.
0COMMITMENTS · OF 8,000

QUICK 8,000 · FULL 120,000 COMMITMENTS

05 · FACTORY
ARRAY-16 R0 · 6 REFERENCE PROGRAMS

Mint your own
processor.

Every machine is an instance of the ARRAY-16 architecture with its own program memory and its own persistent execution state. The architecture is not a parameter: two instances differ only in what is in ROM and how far they have executed.

An instance identity is derived, not allocated. It is a digest of the name and the encoded program, so the same inputs always produce the same machine id, and a genesis commitment is taken from the machine with that program installed at cycle zero.

Records are written to this browser’s local storage. No transaction is sent and no contract is called, because no ARRAY contract is deployed.

OPEN THE FACTORY
// FABRICATION INTERFACELOCAL STORAGE · NO CONTRACT
MACHINE NAME
PROGRAM

Reads a word from RAM, adds a constant, writes it back, and repeats. The canonical resident program.

ARCHITECTUREARRAY-16 R0

FIXED · NOT CONFIGURABLE

MEMORY4 KB · 2,048 W

FIXED IN R0

EXECUTION MODE

The clock keeps supplying edges until the program halts or faults.

RECORD PREVIEWDERIVED, NOT WRITTEN
MACHINE ID0x374F5D6FE8C810FC
NAMEARRAY-16 / 001
ARCHITECTUREARRAY-16 R0
ROM2,048 WORDS
RAM4 KB
PROGRAMACCUMULATE
PROGRAM WORDS15
PROGRAM DIGEST4413E4F0D181F802
GENESIS COMMITMENTD8A1F2147D2F8227
EXECUTION MODECONTINUOUS
OWNERUNASSIGNED
PROVENANCELOCAL STORAGE

The identity is a digest of the name and the encoded program, so the same inputs always produce the same machine id. A deployed factory would write this record and the program words to a contract; this one writes them to your browser.

INSTANCES0 IN LOCAL STORAGE
MACHINE IDNAMEPROGRAMWORDSMODECREATED
NO INSTANCES. INITIALIZE ONE ABOVE.
// WALLETDEVELOPMENT
STATUSIDLE
NETWORKNOT CONNECTED
CHAIN ID—
ADDRESS—
MACHINES OWNED0
EXECUTION BALANCE—
INSTANCE0x9C41A7D3…
ARCHITECTUREARRAY-16 R0
LOCAL CYCLE0

No ARRAY contract is deployed. Execution balance is undefined because nothing is charged for a transition that happens in your browser.

06 · EXPLORER
INSTANCE 0x9C41A7D3E0… · SIMULATED HISTORY

One row
per block.

A committed transition is a block, an instruction, and the commitment that followed it. The explorer lists them in order and lets you inspect the architectural state at any one of them.

That state is not stored anywhere. It is recomputed by replaying the program from cycle zero to the selected cycle, which is why the commitment is worth keeping: it is the only thing a verifier needs to know the replay arrived at the same place.

Block numbers are those of a simulated instance and are marked as such wherever they appear. The transitions themselves are produced by the machine.

OPEN THE EXPLORER
// COMMITTED TRANSITIONS
INSTANCE 0x9C41A7D3…BLOCK ORIGIN 21,004,310
PROGRAM
CYCLES 1 … 24
BLOCKCYCLEPCOPOPERANDSRESULTCOMMITMENT
21,004,31112,482,1870x000LDIR2, #17R2 ← 0x0011E3CA559F33AB8CA7…
21,004,31212,482,1880x001LDIR5, #0R5 ← 0x0000366186BAF182A65C…
21,004,31312,482,1890x002LDIR1, #0R1 ← 0x00009BD974B7B6A5D135…
21,004,31412,482,1900x003STORE[0x020], R1[020] ← 0x00002A26DAC8CF5D1CBA…
21,004,31512,482,1910x004LOADR1, [0x020]R1 ← 0x000006D5379822C914B3…
21,004,31612,482,1920x005ADDR1, R2R1 ← 0x001137625B2A005E5A49…
21,004,31712,482,1930x006STORE[0x020], R1[020] ← 0x00113816D955D8A9E231…
21,004,31812,482,1940x007MOVR3, R1R3 ← 0x0011AC9713D0FD2B6B17…
21,004,31912,482,1950x008INCR5R5 ← 0x0001164D7806008B14DF…
21,004,32012,482,1960x009CMPIR5, #8FLAGS · N · ·5247ECD78A2E6574…
21,004,32112,482,1970x00AJNZ0x004PC ← 0x0044E169C58431A432D…
21,004,32212,482,1980x004LOADR1, [0x020]R1 ← 0x00116924C6CC0A207842…
21,004,32312,482,1990x005ADDR1, R2R1 ← 0x0022F2145DBEDBB17F78…
21,004,32412,482,2000x006STORE[0x020], R1[020] ← 0x0022906179B9709B8BE1…
21,004,32512,482,2010x007MOVR3, R1R3 ← 0x002279066DDED770002B…
21,004,32612,482,2020x008INCR5R5 ← 0x0002FB011B7A64BE755F…
21,004,32712,482,2030x009CMPIR5, #8FLAGS · N · ·DDF234DB65EC4A86…
21,004,32812,482,2040x00AJNZ0x004PC ← 0x004821B6064D57FB9ED…
21,004,32912,482,2050x004LOADR1, [0x020]R1 ← 0x0022D0633D70D6AD8F14…
21,004,33012,482,2060x005ADDR1, R2R1 ← 0x0033BBA051503D260B5A…
21,004,33112,482,2070x006STORE[0x020], R1[020] ← 0x003321B53B10425FF2C0…
21,004,33212,482,2080x007MOVR3, R1R3 ← 0x00335AC0C48515F93CAA…
21,004,33312,482,2090x008INCR5R5 ← 0x0003562DB77307881652…
21,004,33412,482,2100x009CMPIR5, #8FLAGS · N · ·7FCA345247B72865…
STATE AT BLOCKREPLAYED
BLOCK21,004,311
CYCLE12,482,187
INSTRUCTIONLDI R2, #17
PC0x001
IR0x00220011
SP0x0080
HALTEDNO
COMMITMENT

E3CA559F33AB8CA7

REGISTER FILE
R00000
R10000
R20011
R30000
R40000
R50000
R60000
R70000
R80000
R90000
RA0000
RB0000
RC0000
RD0000
RE0000
RF0000

This state was not read from a record. The program was replayed from cycle zero to cycle 1 to produce it, on ARRAY-16 R0.

07 · THE INSTRUMENT
32 OPCODES · 2,048 WORDS OF ROM

Write to it.
Step it.

The editor below assembles with the same assembler the reference programs use, and runs on the same machine every other panel on this page is watching. Errors are reported with their line and their reason; a program that assembles will execute.

STEP retires exactly one instruction. RUN supplies edges at the selected rate. RESET returns the machine to cycle zero with a cleared store, which is the only way back: there is no undo, because a state transition is not reversible.

LAUNCH THE APP
// PROGRAM
ASSEMBLED · NOT LOADED
CODE15 LINES · 9 WORDS
36 BYTES
BYTECODEDIGEST 6DDCC5534BB8…
ADDRWORDDISASSEMBLY
0000021002ALDI R1, #42
00100220011LDI R2, #17
00200912000ADD R1, R2
00300501020STORE [0x020], R1
00400330020LOAD R3, [0x020]
0050183003BCMPI R3, #59
00601A00008JMZ 0x008
007002400FFLDI R4, #255
00801F00000HALT
SYMBOLS
done = 0x008 · 1 REF
STATEIDLE
PC0x000
IR0x00000000
SP0x0080
CYCLE12,482,186
FLAGSZNCV
FETCH
DECODE
EXECUTE
WRITEBACK
COMMIT
REGISTER FILE16 × 16 · CYCLE 0
R00000
R10000
R20000
R30000
R40000
R50000
R60000
R70000
R80000
R90000
RA0000
RB0000
RC0000
RD0000
RE0000
RF0000
TRACENEWEST FIRST
#BLOCKPCOPOPERANDSRESULT
NO TRANSITIONS COMMITTED SINCE RESET
NO TRANSITIONS COMMITTED SINCE RESET
NO TRANSITIONS COMMITTED SINCE RESET
08 · THE CLOCK
ONE EDGE PER BLOCK · NO OPERATOR REQUIRED

The clock is
external to
the processor.

A processor does not contain time. It contains a state and a rule for producing the next one, and something outside it decides when that happens. In a package on a desk that something is an oscillator. Here it is the chain: the block supplies the edge, and the machine supplies the step.

The consequence is that block resolution is clock resolution. The machine has no notion of being fast or slow, and no operator needs to keep it running. A halted machine is not offline — it is a machine whose sequencer has stopped and whose state is still readable.

Phases are internal. One instruction retires per edge, and the number of phases inside that instruction depends on what it does: 3 for a transfer that resolves in decode, 5 for one that visits the arithmetic unit and writes back.

BLOCK n+0STEPCYCLE+0BLOCK n+1STEPCYCLE+1BLOCK n+2STEPCYCLE+2BLOCK n+3STEPCYCLE+3BLOCK n+4STEPCYCLE+4BLOCK n+5STEPCYCLE+5THE CLOCK IS EXTERNAL · THE CHAIN SUPPLIES THE EDGE · PHASES ARE INTERNAL
TRANSITIONS PER BLOCK1one committed step
PHASES PER INSTRUCTION3–5derived from control assertions
GATE EVALUATIONS92per instruction, reference model
SIMULATED INSTANCE ORIGIN21,004,310SIMULATION
WHAT THE CONTRACT STORES

The state required to reproduce execution, not a description of it: the register file, the store, the pointer, the flags and the counter. A commitment to that state is enough to detect any divergence.

WHAT THE CONTRACT VERIFIES

That the successor state offered for a block is the one the architecture defines for the current state. An execution is valid only if the resulting architectural state matches the canonical transition.

WHAT NOBODY HAS TO DO

Keep it alive. There is no operator, no keeper and no scheduler. If a block is produced, an edge exists; if no block is produced, the machine is exactly where it was.

10 · ON-CHAIN ARCHITECTURE
TEXT → WORD → TRANSITION → BLOCK

Eight layers
between a program
and a block.

Each layer below consumes a defined representation and produces the next one. No layer infers anything about the layer above it, and none of them can be skipped: text becomes a canonical word, a word becomes a transition, and a transition becomes a commitment that a block carries.

The trace is not an explanation of execution. It is the execution, written down in the order it happened.

  1. 00 ↓USERWrites a program in the assembler's syntax. Nothing about the machine is hidden behind a runtime.
  2. 01 ↓PROGRAMText. Labels, directives and instructions drawn from the fixed instruction set.
  3. 02 ↓ASSEMBLERTwo passes: labels resolve to instruction addresses, then each line encodes into one word.
  4. 03 ↓BYTECODECanonical 32-bit words. Reserved bits are zero, unused fields are zero, and there is exactly one encoding per instruction.
  5. 04 ↓MACHINEFetch, decode, execute, writeback, commit. The phase list is derived from the decoded instruction.
  6. 05 ↓STATE TRANSITIONA defined architectural state in, a deterministic successor out. Nothing is inferred between cycles.
  7. 06 ↓CONTRACTHolds the state required to reproduce execution, not a description of it. It verifies the successor and keeps the commitment.
  8. 07 ■BLOCKOne edge. One committed transition. Block resolution is the machine's clock resolution.
09 · THE NAME
ONE CELL, REPEATED

Why
ARRAY.

Names in this field usually describe what a system promises. ARRAY describes what the machine is made of.

There is one cell. 9 of it make a full adder, 16 full adders make the adder, and 3,912 make the whole processor. Sixteen registers are 256 instances of the same flip-flop, addressed by index. The store is 4,096 instances of the same byte. The trace is an array of transitions, one per block. Nothing in the machine is a special case, because there is only one kind of part.

That makes the name checkable, which is the only kind of claim this project makes: every figure on the datasheet is a count of something repeated. If any part of the machine needed a second kind of cell, the name would be wrong.

ONE CELL, COUNTED UPEVERY TIER IS A MULTIPLE
1PRIMITIVE9FULL ADDER144THE ADDER3,912THE NETLISTONE NAND CELL9 CELLS · SUM AND CARRY16 × 9 · ONE PER BIT OF THE WORD3,912 = 27 × 144 + 24THE MACHINE IS NOT MADE OF ADDERS. IT IS MADE OF CELLS.
WHAT THE WORD IS DOING
ARRAY · THE ARRANGEMENT
A regular arrangement of identical elements, addressed by index rather than by name. The register file is one. The store is one. So is the netlist.
ARRAY · THE FABRIC
A gate array is a field of undifferentiated cells that acquires a function from how it is wired, not from what the cells are. This machine is that, with NAND as the cell.
WHAT IT IS NOT
A metaphor for scale, speed, or a roadmap. Nothing in the name refers to throughput, because throughput is a property of the chain, not of the machine.
THE TEST
Read the datasheet from the bottom. Every figure above the primitive should be a multiple of it: 144 is 16 × 9, and 256 is 16 × 16. If one of them is not, the name has failed its own claim.