Skip to main content

chronon::sender::PriorityArbiter

Declarative N-pipe priority arbiter with overflow, bank-conflict, and idle-fill. More...

#include <PriorityArbiter.hpp>

Public Types

Name
using ArbResult< SourceEnum, NumPipes, MaxLosers >Result
using ArbRequest< SourceEnum >Request

Public Functions

Name
voidsetPipePriority(std::size_t pipe, std::initializer_list< SourceEnum > priority)
First source in priority is highest.
voidsetOverflow(SourceEnum source, std::size_t from_pipe, std::size_t to_pipe)
Overflow: if source loses on from_pipe, try to_pipe.
voidsetOccupied(std::size_t pipe, uint64_t addr, SourceEnum source)
Pre-occupy a pipe; no winner is assigned but addr still participates in conflict checks.
voidsetBankConflictPriority(BankConflictPriority priority)
Select which pipe wins when two accepted winners conflict on bank.
voidsetBankConflictFn(bool(*)(uint64_t, uint64_t) fn)
Bank conflict predicate: returns true if two addresses conflict.
const Result &result() const
voidclearRequests()
const Result &arbitrate()
Returns a const ref valid until the next clearRequests().
voidaddRequest(std::size_t pipe, Request req)
Submit request for a specific pipe.
voidaddPassRule(SourceEnum higher, SourceEnum lower)
Pass rule: lower may proceed despite conflict with higher.
voidaddIdleFillSource(SourceEnum source)
Register a source that can idle-fill empty pipes after arbitration.
voidaddIdleFillRequest(Request req)
Submit idle-fill request (any empty pipe after main arbitration).
voidaddDynamicOverride(SourceEnum promoted, SourceEnum demoted, const bool * cond)
Dynamic override: when *cond is true, promoted beats demoted.

Detailed Description

template <typename SourceEnum ,
std::size_t NumPipes,
std::size_t MaxSourcesPerPipe =8,
std::size_t MaxLosers =16,
std::size_t MaxOverflows =8,
std::size_t MaxPassRules =4,
std::size_t MaxDynOverrides =4,
std::size_t MaxIdleFillSources =4,
std::size_t MaxIdleFillRequests =8>
class chronon::sender::PriorityArbiter;

Declarative N-pipe priority arbiter with overflow, bank-conflict, and idle-fill.

Replaces hand-unrolled priority chains with a configured data structure. Configuration (setPipePriority / setOverflow / setBankConflictFn / addPassRule / addDynamicOverride / addIdleFillSource) is done once; per-tick callers use clearRequests / addRequest / arbitrate.

Public Types Documentation

using Result

using chronon::sender::PriorityArbiter< SourceEnum, NumPipes, MaxSourcesPerPipe, MaxLosers, MaxOverflows, MaxPassRules, MaxDynOverrides, MaxIdleFillSources, MaxIdleFillRequests >::Result = ArbResult<SourceEnum, NumPipes, MaxLosers>;

using Request

using chronon::sender::PriorityArbiter< SourceEnum, NumPipes, MaxSourcesPerPipe, MaxLosers, MaxOverflows, MaxPassRules, MaxDynOverrides, MaxIdleFillSources, MaxIdleFillRequests >::Request = ArbRequest<SourceEnum>;

Public Functions Documentation

function setPipePriority

inline void setPipePriority(
std::size_t pipe,
std::initializer_list< SourceEnum > priority
)

First source in priority is highest.

function setOverflow

inline void setOverflow(
SourceEnum source,
std::size_t from_pipe,
std::size_t to_pipe
)

Overflow: if source loses on from_pipe, try to_pipe.

function setOccupied

inline void setOccupied(
std::size_t pipe,
uint64_t addr,
SourceEnum source
)

Pre-occupy a pipe; no winner is assigned but addr still participates in conflict checks.

function setBankConflictPriority

inline void setBankConflictPriority(
BankConflictPriority priority
)

Select which pipe wins when two accepted winners conflict on bank.

function setBankConflictFn

inline void setBankConflictFn(
bool(*)(uint64_t, uint64_t) fn
)

Bank conflict predicate: returns true if two addresses conflict.

function result

inline const Result & result() const

function clearRequests

inline void clearRequests()

function arbitrate

inline const Result & arbitrate()

Returns a const ref valid until the next clearRequests().

function addRequest

inline void addRequest(
std::size_t pipe,
Request req
)

Submit request for a specific pipe.

function addPassRule

inline void addPassRule(
SourceEnum higher,
SourceEnum lower
)

Pass rule: lower may proceed despite conflict with higher.

function addIdleFillSource

inline void addIdleFillSource(
SourceEnum source
)

Register a source that can idle-fill empty pipes after arbitration.

function addIdleFillRequest

inline void addIdleFillRequest(
Request req
)

Submit idle-fill request (any empty pipe after main arbitration).

function addDynamicOverride

inline void addDynamicOverride(
SourceEnum promoted,
SourceEnum demoted,
const bool * cond
)

Dynamic override: when *cond is true, promoted beats demoted.


Updated on 2026-05-26 at 05:42:32 +0000