Vai al contenuto

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

BoundaryCarriesOwnership rule
AXI frametdata, tkeep, tlast, tuserAccepted tlast closes one frame; arbiters never interleave frames.
Parsed framefixed header, byte count, ingress identity, adapter errorsParsing does not imply validity. CONTROL or DATA sees a frame only after closure and validation.
CONTROL requestone fully reassembled and typed transactionNo table changes before fragment, TLV, and command validation completes.
Issue group1, 2, or 4 contiguous sixteen-element tilesMetadata, lane masks, and data transfer atomically from one operation and input beat.
Arithmetic rangeoperation identity plus sixteen global element positionsContributor masks and numeric state belong to the selected issue slice until the range completes.
Result chunkimmutable output payload plus route metadataStorage remains owned until every armed packet job releases its reference.
Packet jobresolved egress, MAC, Result Path ID, and chunk referenceThe 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

UnitWidth or keyPurpose
Wire chunkformat-derived, up to 1474 payload bytesOne DATA or RES packet; Chunk Index is local to that direct stream.
AXI beatDATA_W, 512 bits by defaultPhysical streaming width; tkeep marks valid bytes.
TileTILE_ELEMENTS, 16 elements by defaultStable scheduling unit across FP32, FP16/BF16, and INT8.
Global rangeoperation key plus first elementPacket-format-independent accumulator identity.
Accumulator stateFP32 running sum or the configured Kulisch widthInternal 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_ORDERED applies Contributor IDs in ascending order.
  • Exact payload length determines output tkeep and tlast.
  • 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.