feat: migrate token format from 2-bit type field to 1-bit SM/CM split
Complete token format migration for OR1 dataflow CPU:
Type definitions:
- MemOp enum expanded to 13 members (READ-WRITE_IMM), CfgOp deleted
- Token hierarchy rewritten: SysToken/CfgToken/IOToken/LoadInstToken/RouteSetToken
deleted, IRAMWriteToken added as CMToken subclass
- SMCell gains is_wide field for widened presence metadata
Emulator core:
- PE handles IRAMWriteToken (writes instructions to IRAM at token.offset)
- SM gains T0/T1 memory tier split (configurable tier_boundary, default 256)
- T0: shared raw storage across all SMs, no presence tracking
- T1: per-SM I-structure cells with presence tracking and deferred reads
- EXEC opcode reads Token objects from T0 and injects via send()
- Network routing simplified to 1-bit SM/CM dispatch
Assembler and tools:
- asm/opcodes.py: CfgOp removed, 5 new MemOp mnemonics added
- asm/codegen.py: emits IRAMWriteToken instead of LoadInstToken/RouteSetToken
- dfgraph/categories.py: CfgOp branch removed
Test suite:
- 669 tests pass (29 new dedicated test files for T0/T1, EXEC, bootstrap)
- Full end-to-end bootstrap verified through SimPy event system
- Regression guards for deleted types (AST-based codebase scan)
- MemOp tier grouping value assertions
Documentation:
- CLAUDE.md, asm/CLAUDE.md, dfgraph/CLAUDE.md updated