3.4.1 Datapath contracts¶
PRISM has one wire ABI and several internal transfer units. Ethernet fields and packet headers are fixed by the protocol; beats, tiles, ranges, and accumulator state are implementation contracts derived from the build profile.
Transfer rule¶
Every internal stream uses decoupled valid/ready. A transfer occurs only on valid && ready; while stalled, the producer holds payload and metadata stable. State changes only after the owning transfer is accepted.
Data boundaries¶
| Boundary | Carries | Ownership rule |
|---|---|---|
| AXI frame | tdata, tkeep, tlast, tuser | Accepted tlast closes one frame; arbiters never interleave frames. |
| Parsed frame | fixed header, byte count, ingress identity, adapter errors | Parsing does not imply validity. CONTROL or DATA sees a frame only after closure and validation. |
| CONTROL request | one fully reassembled and typed transaction | No table changes before fragment, TLV, and command validation completes. |
| Issue group | 1, 2, or 4 contiguous sixteen-element tiles | Metadata, lane masks, and data transfer atomically from one operation and input beat. |
| Arithmetic range | operation identity plus sixteen global element positions | Contributor masks and numeric state belong to the selected issue slice until the range completes. |
| Result chunk | immutable output payload plus route metadata | Storage remains owned until every armed packet job releases its reference. |
| Packet job | resolved egress, MAC, Result Path ID, and chunk reference | The packetizer serializes an existing route decision; it does not choose destinations. |
The control executor owns session, group, and operation state. The range scheduler owns contributor and accumulator state. The chunk store owns result payloads. Keeping these ownership boundaries separate prevents egress timing from changing control or arithmetic state.
Width and identity¶
| Unit | Width or key | Purpose |
|---|---|---|
| Wire chunk | format-derived, up to 1474 payload bytes | One DATA or RES packet; Chunk Index is local to that direct stream. |
| AXI beat | DATA_W, 512 bits by default | Physical streaming width; tkeep marks valid bytes. |
| Tile | TILE_ELEMENTS, 16 elements by default | Stable scheduling unit across FP32, FP16/BF16, and INT8. |
| Global range | operation key plus first element | Packet-format-independent accumulator identity. |
| Accumulator state | FP32 running sum or the configured Kulisch width | Internal numeric representation; never a second wire format. |
Format conversion can change chunk boundaries, so Chunk Index does not identify accumulator state. The derived global first element does. FP32 and Kulisch share the same issue slices; all Kulisch operations use one configured width.
Safety invariants¶
- Full storage propagates backpressure; accepted work is never silently dropped.
- Duplicate contributors do not update a range twice.
- Same-range updates serialize; independent ranges and banks may proceed.
FP32_ORDEREDapplies Contributor IDs in ascending order.- Exact payload length determines output
tkeepandtlast. - Reset clears tentative ownership and emits no partial frame.
PROGRESS, replay, switch-to-switch partials, and transparent forwarding remain target protocol behavior rather than current RTL interfaces.