DriftingOscillatorBase¶
Package: inet.clock.base
simple module DriftingOscillatorBase
Base module for oscillators whose effective tick rate may drift relative to a nominal tick length. This module provides the mapping used by clocks without generating one event per tick.
Summary
Defines a computation origin o (o ≤ now) and a nominal tick length L.
- Actual tick spacing may differ from L due to drift/compensation; the
current tick length is managed internally and may change over time.
- Mapping operations follow IOscillator semantics:
N(Δt): number of ticks in (0, Δt] from the origin, I(n) : minimal Δt ≥ 0 such that N(Δt) ≥ n.
- When rate-related state changes, the origin and phase are updated so that
the first tick not earlier than the change time remains consistent (no double or missed ticks).
Inheritance diagram¶
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
simple module |
Oscillator with constant fractional frequency offset (drift). |
|
simple module |
Oscillator with time-varying drift driven by a bounded random walk. |
Extends¶
Name |
Type |
Description |
|---|---|---|
simple module |
Base module for oscillators. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“%c (%n + %d)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
emitNumTicksSignal |
bool |
false |
Enables emitting a signal at each oscillator tick, can be useful for validating the behavior of the more efficient implementation without events |
oscillatorTickEventSchedulingPriority |
int |
0 |
Specifies the scheduling priority of the tick event |
nominalTickLength |
double |
Specifies the elapsed time between oscillator ticks |
|
tickOffset |
double |
0s |
Shifts ticks to the past, must be in the range of [0, current tick length) |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
DriftingOscillatorBase |
|
display |
i=block/tunnel |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
driftRateChanged |
double |
||
numTicksChanged |
unsigned long |
||
postOscillatorStateChanged |
|||
preOscillatorStateChanged |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
driftRateChanged |
Oscillator drift rate |
vector |
ppm |
sample-hold |
||
numTicksChanged |
number of ticks |
vector |
sample-hold |
Source code¶
//
// Base module for oscillators whose effective tick rate may drift relative to a
// nominal tick length. This module provides the mapping used by clocks without
// generating one event per tick.
//
// Summary
// -------
// - Defines a computation origin o (o ≤ now) and a nominal tick length L.
// - Actual tick spacing may differ from L due to drift/compensation; the
// current tick length is managed internally and may change over time.
// - Mapping operations follow ~IOscillator semantics:
// N(Δt): number of ticks in (0, Δt] from the origin,
// I(n) : minimal Δt ≥ 0 such that N(Δt) ≥ n.
// - When rate-related state changes, the origin and phase are updated so that
// the first tick not earlier than the change time remains consistent (no
// double or missed ticks).
//
simple DriftingOscillatorBase extends OscillatorBase
{
parameters:
displayStringTextFormat = default("%c (%n + %d)"); // Determines the text that is written on top of the submodule
double nominalTickLength @unit(s); // Specifies the elapsed time between oscillator ticks
double tickOffset @unit(s) = default(0s); // Shifts ticks to the past, must be in the range of [0, current tick length)
@signal[preOscillatorStateChanged];
@signal[postOscillatorStateChanged];
@class(DriftingOscillatorBase);
}