LOOM is a fabric compiler that maps a software execution graph onto a hardware architecture graph expressed in Fabric MLIR.
LOOM inherits the legacy design's overall compiler shape, but introduces three major architectural changes:
function_unitbecomes an explicit level insidespatial_peandtemporal_pe.- A configurable hardware DAG is allowed inside
function_unitthroughfabric.mux, making tech-mapping a hardware-software co-design step. spatial_swsupports decomposable routing, so switch configuration may operate at sub-lane granularity instead of only logical-port granularity.
LOOM uses the following stage boundaries:
- Frontend and SCF-level analysis
- DFG-domain exploration and candidate selection
- DFG construction
- ADG construction and flattening
- Tech-mapping, placement, routing, and config generation
- Visualization and optional simulation
- Host or gem5 integration for end-to-end execution
The authoritative documents for these stage families are:
- CLI: spec-cli.md
- Exploration: spec-dse.md
- Fabric hardware: spec-fabric.md
- Mapper: spec-mapper.md
- Visualization: spec-viz.md
- Host interface: spec-host-accel-interface.md
The normative LOOM flow is:
- Lower input software into SCF-level MLIR.
- Enumerate
dfg_domaincandidates and prune unfit candidates quickly. - Lower the selected candidate into DFG form (
handshake.funcplus LOOM dataflow). - Build or load an ADG in Fabric MLIR.
- Flatten the ADG into mapper-visible resources while preserving the information needed to reconstruct PE mux/demux routing and switch routes.
- Run tech-mapping, placement, and routing.
- Generate configuration artifacts, reports, and visualization.
- Optionally run standalone simulation or host-driven execution.
- LOOM does not use the legacy design's pragma system as the primary control surface. Acceleration domain selection is handled by exploration and cost modeling.
spatial_peports andfunction_unitports are not positional peers. The PE-level mux/demux fabric is the authority for how data reaches a selected FU.spatial_swroute selection is a mux model: each output chooses one input at the relevant granularity. Multiple inputs may not drive the same output in one configuration.fabric.muxconfiguration is selected during tech-mapping and is not rewritten during placement or routing.
This document is the top-level overview only. It does not redefine:
- Fabric operation semantics
- Mapper hard constraints
- Visualization interaction details
- Host execution protocol
Those are specified in the linked documents.