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 | |
|---|---|
| void | setPipePriority(std::size_t pipe, std::initializer_list< SourceEnum > priority) First source in priority is highest. |
| void | setOverflow(SourceEnum source, std::size_t from_pipe, std::size_t to_pipe) Overflow: if source loses on from_pipe, try to_pipe. |
| 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. |
| void | setBankConflictPriority(BankConflictPriority priority) Select which pipe wins when two accepted winners conflict on bank. |
| void | setBankConflictFn(bool(*)(uint64_t, uint64_t) fn) Bank conflict predicate: returns true if two addresses conflict. |
| const Result & | result() const |
| void | clearRequests() |
| const Result & | arbitrate() Returns a const ref valid until the next clearRequests(). |
| void | addRequest(std::size_t pipe, Request req) Submit request for a specific pipe. |
| void | addPassRule(SourceEnum higher, SourceEnum lower) Pass rule: lower may proceed despite conflict with higher. |
| void | addIdleFillSource(SourceEnum source) Register a source that can idle-fill empty pipes after arbitration. |
| void | addIdleFillRequest(Request req) Submit idle-fill request (any empty pipe after main arbitration). |
| void | addDynamicOverride(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