Skip to main content

chronon::sender::TickableUnit

More...

#include <TickableUnit.hpp>

Inherits from chronon::sender::Unit

Inherited by chronon::sender::PhasedTickableUnit< Derived >, chronon::sender::factory::AutoRegisteredUnit< Derived >

Public Functions

Name
virtual~TickableUnit() =default
virtual voidtick() =0
Per-cycle behavior. Must complete synchronously.
virtual boolisCompleted() const
Return true to signal the simulation can stop.
voidexecuteTickAlwaysActive()
Hot path for units that have not opted into activity scheduling.
voidexecuteTick()
Inlined hot path executed millions of times per second.
voidadvanceIdleTick(uint64_t delta)
Batched inactive-cycle advance used when an entire cluster is idle.
TickableUnit(std::string name)

Protected Functions

Name
template <ValidPhase P>
void
tickPhase()
voidrequestTermination(TerminationReason reason, int32_t exit_code =0, std::string_view message ="")
voidrequestTermination(TerminationReason reason, int32_t exit_code, uint64_t cycle, std::string_view message)
voidrequestExitSyscall(int32_t exit_code)
voidrequestError(std::string_view message)

Friends

Name
classTickSimulation

Additional inherited members

Public Functions inherited from chronon::sender::Unit

Name
virtual~Unit() =default
voidwakeAt(uint64_t cycle)
Wake the unit no later than cycle. Safe for cross-thread producers.
boolusesActivityScheduling() const
voiduseFastCycleCounter()
Default mode. Eliminates atomic overhead (~80% of tight-loop time).
voiduseAtomicCycleCounter()
tree::TreeNode *treeNode() const
uint32_ttickInterval() const
UnitStatestate() const
voidsleepUntil(uint64_t cycle)
voidsleepForever()
Disable the tick body until an external wakeAt() or port arrival wakes it.
boolshouldRunTickAt(uint64_t cycle) const
voidsetTreeNode(tree::TreeNode * node)
Triggers registration of all pending ports to PortDirectory.
voidsetTickInterval(uint32_t interval)
voidregisterPort(PortBase * port)
const std::vector< PortBase * > &ports() const
Unit &operator=(const Unit & ) =delete
Unit &operator=(Unit && ) =delete
uint64_tnextRunnableCycleAtOrAfter(uint64_t cycle) const
uint64_tnextActiveCycle() const
const std::string &name() const
uint64_tlocalCycle() const
virtual voidinitialize()
Called after all connections are made, before run() starts.
uint32_tid() const
std::stringfullPath() const
Returns the tree path if a TreeNode is set, else the unit name.
virtual voidfinalize()
Called after run() completes or simulation is stopped.
voidenableActivityScheduling()
uint8_tcrashNameLen() const
const char *crashName() const
voidaddPendingPortRegistration(std::function< void(const std::string &)> registration)
boolacceptsPortWakeups() const
Unit(std::string name)
Unit(const Unit & ) =delete
Unit(Unit && ) =delete

Protected Functions inherited from chronon::sender::Unit

Name
voidsetLocalCycle(uint64_t cycle)
voidsetId(uint32_t id)
uint64_tlocalCycleAtomic() const
voidfinishActiveTick_()
voidbeginActiveTick_()
voidadvanceLocalCycle(uint64_t delta =1)
Fast path: ~0.3ns increment. Slow path (atomic): ~15ns.

Public Attributes inherited from chronon::sender::Unit

Name
uint64_tNEVER_ACTIVE

Detailed Description

class chronon::sender::TickableUnit;

State-machine based simulation unit.

tick() is called every cycle; state lives in member variables. Avoids coroutine overhead and integrates with stdexec parallel execution.

class FetchUnit : public TickableUnit {
OutPort<Instruction> out{this, "out"};
uint64_t pc_ = 0;
void tick() override {
if (out.canSend()) out.send(Instruction{pc_++});
}
};

Public Functions Documentation

function ~TickableUnit

virtual ~TickableUnit() =default

function tick

virtual void tick() =0

Per-cycle behavior. Must complete synchronously.

Reimplemented by: chronon::PhasedTickableUnit::tick, chronon::sender::PhasedTickableUnit::tick

function isCompleted

inline virtual bool isCompleted() const

Return true to signal the simulation can stop.

function executeTickAlwaysActive

inline void executeTickAlwaysActive()

Hot path for units that have not opted into activity scheduling.

function executeTick

inline void executeTick()

Inlined hot path executed millions of times per second.

function advanceIdleTick

inline void advanceIdleTick(
uint64_t delta
)

Batched inactive-cycle advance used when an entire cluster is idle.

function TickableUnit

inline explicit TickableUnit(
std::string name
)

Protected Functions Documentation

function tickPhase

template <ValidPhase P>
inline void tickPhase()

Phase-templated tick for compile-time pipeline slot selection.

Override instead of tick() when using StageReg. Phase0/Phase1 dispatch is based on cycle parity. Default delegates to tick().

template<ValidPhase P>
void tickPhase() {
if (reg_.valid<P>()) process(reg_.get<P>());
reg_.set<P>(new_data);
}

function requestTermination

inline void requestTermination(
TerminationReason reason,
int32_t exit_code =0,
std::string_view message =""
)

Request simulation termination. First request wins; the simulation stops at the next scheduler boundary, and parallel lookahead workers are signaled through the shared stop token.

function requestTermination

inline void requestTermination(
TerminationReason reason,
int32_t exit_code,
uint64_t cycle,
std::string_view message
)

Overload taking an explicit cycle (avoids cross-thread localCycle() reads in MMIO callbacks).

function requestExitSyscall

inline void requestExitSyscall(
int32_t exit_code
)

function requestError

inline void requestError(
std::string_view message
)

Friends

friend TickSimulation

friend class TickSimulation(
TickSimulation
);

Updated on 2026-07-06 at 09:03:33 +0000