Vai al contenuto

3.4 RTL modules

This chapter moves from integration boundaries to the state-owning blocks of the implemented collective node. Each page explains responsibility, interfaces, state, and backpressure. A compact header appears only when the module has a useful initiation interval, a clearly identifiable registered pipeline, or architecturally significant memory.

II means initiation interval and is measured in clock cycles without backpressure stalls. Pipeline depth counts the registered stages in the named internal path; it is not an end to end latency for stateful modules. Memory identifies RTL storage or an explicit memory interface; exact BRAM, LUTRAM, and URAM utilization depends on parameters, target device, and synthesis results.

The key numeric abstraction is a global element range. DATA and RES can use different format-derived Chunk Indices, while accumulation remains independent of packetization. Read the chunking model before following the collective datapath.

3.4.1 Datapath contracts

Datapath contracts defines the transfer, ownership, identity, and width rules shared by the components below.

3.4.2 Components

Implemented boundaries

The pages below correspond to synthesizable modules in repo/prism-hdl/rtl.f. Small converters, FIFOs, arbiters, and table internals remain implementation details rather than separate architecture pages.

  1. prism_open_nic_250mhz: adapts the core to the OpenNIC 250 MHz plugin.
  2. prism_collective_core: composes the reusable control and collective paths.
  3. prism_ingress_port: buffers, parses, looks up, and validates one ingress stream.
  4. prism_control_reassembler: reconstructs complete CONTROL transactions.
  5. prism_control_executor: dispatches requests and owns table access.
  6. prism_data_depacketizer: converts DATA frames into lane-aligned issue groups.
  7. prism_issue_backend: executes groups as parallel sixteen-element tiles.
  8. prism_input_conversion_stage: converts wire elements into the selected arithmetic representation.
  9. prism_range_scheduler: collects contributors and publishes completed ranges.
  10. prism_result_chunk_store: assembles and retains immutable result chunks.
  11. prism_result_router: expands a chunk into destination-specific packet jobs.
  12. prism_result_packetizer: serializes one packet job as an Ethernet RES frame.