# Component implementation registry.
# Maps impl names (used in topology.yaml) to Python class paths.
# Format: impl_name: module.path:ClassName
#
# Naming convention:
#   builtin.<name>  — built-in implementations
#   custom.<name>   — user-defined implementations
#
# ── Adding custom components ──────────────────────────────────────────
#
# 1. Create your implementation in:
#      src/kernbench/components/custom/<your_component>.py
#
#    Your class must inherit from ComponentBase (or PeEngineBase for PE engines).
#
# 2. Register it below under "Custom" with a unique impl name:
#      custom.my_pe_cpu: kernbench.components.custom.my_pe_cpu:MyPeCpuComponent
#
# 3. Reference it in topology.yaml:
#      pe_cpu: { kind: pe_cpu, impl: custom.my_pe_cpu, attrs: { ... } }
#
# 4. Add unit tests in:
#      tests/custom/test_<your_component>.py
#
# External packages also work — use the full module path:
#      custom.fast_gemm: my_team.accel.fast_gemm:FastGemmComponent
# ──────────────────────────────────────────────────────────────────────

components:
  # Infrastructure
  builtin.forwarding:  kernbench.components.builtin.forwarding:TransitComponent
  builtin.switch:      kernbench.components.builtin.forwarding:TransitComponent
  builtin.noc:         kernbench.components.builtin.forwarding:TransitComponent
  builtin.ucie:        kernbench.components.builtin.forwarding:TransitComponent

  # IO / Host interface
  builtin.pcie_ep:     kernbench.components.builtin.pcie_ep:PcieEpComponent
  builtin.io_cpu:      kernbench.components.builtin.io_cpu:IoCpuComponent

  # Cube-level
  builtin.m_cpu:       kernbench.components.builtin.m_cpu:MCpuComponent
  builtin.hbm_ctrl:    kernbench.components.builtin.hbm_ctrl:HbmCtrlComponent
  builtin.sram:        kernbench.components.builtin.sram:SramComponent

  # PE-level
  builtin.pe_cpu:         kernbench.components.builtin.pe_cpu:PeCpuComponent
  builtin.pe_scheduler:   kernbench.components.builtin.pe_scheduler:PeSchedulerComponent
  builtin.pe_dma:         kernbench.components.builtin.pe_dma:PeDmaComponent
  builtin.pe_gemm:        kernbench.components.builtin.pe_gemm:PeGemmComponent
  builtin.pe_math:        kernbench.components.builtin.pe_math:PeMathComponent
  builtin.pe_fetch_store: kernbench.components.builtin.pe_fetch_store:PeFetchStoreComponent
  builtin.pe_mmu:         kernbench.components.builtin.pe_mmu:PeMmuComponent
  builtin.pe_tcm:         kernbench.components.builtin.pe_tcm:PeTcmComponent
  builtin.pe_ipcq:        kernbench.components.builtin.pe_ipcq:PeIpcqComponent

  # Custom — add your implementations here
