Time and Clock
Local Clock Adjust
Makes small adjustments to the local clock of the test module, which drives the TX rate of the test ports.
Corresponding low-level API class: M_CLOCKPPB`
# Local Clock Adjust
await module.timing.clock_local_adjust.set(ppb=10)
resp = await module.timing.clock_local_adjust.get()
resp.ppb
Clock Sync Status
Get module’s clock sync status.
Corresponding low-level API class: M_CLOCKSYNCSTATUS`
# Clock Sync Status
resp = await module.timing.clock_sync_status.get()
resp.m_clock_diff
resp.m_correction
resp.m_is_steady_state
resp.m_tune_is_increase
resp.m_tune_value
Clock Source
Control how the test module timestamp clock is running, either freely in the chassis or locked to an external system time. Running with free chassis time allows nano-second precision measurements of latencies, but only when the transmitting and receiving ports are in the same chassis. Running with locked external time enables inter-chassis latency measurements, but can introduce small time discontinuities as the test module time is adjusted.
Corresponding low-level API class: M_TIMESYNC`
# Clock Source
await module.timing.source.set(source=enums.TimingSource.CHASSIS)
await module.timing.source.set_chassis()
await module.timing.source.set(source=enums.TimingSource.EXTERNAL)
await module.timing.source.set_external()
await module.timing.source.set(source=enums.TimingSource.MODULE)
await module.timing.source.set_module()
resp = await module.timing.source.get()
resp.source
Clock PPM Sweep Configuration
Important
For Freya modules only
Start and stop deviation sweep the local clock of the test module, which drives the TX rate of the test ports.
The sweep is independent of the M_CLOCKPPB parameter, i.e. the sweep uses the deviation set by M_CLOCKPPB
as its zero point.
Corresponding low-level API class: M_CLOCKPPBSWEEP
# Clock PPM Sweep Configuration
FREYA_MODULES = (modules.MFreya800G4S1P_a, modules.MFreya800G4S1P_b, modules.MFreya800G4S1POSFP_a, modules.MFreya800G4S1POSFP_b)
if isinstance(module, FREYA_MODULES):
await module.clock_sweep.config.set(mode=enums.PPMSweepMode.OFF, ppb_step=50_000, step_delay=1_000_000, max_ppb=390_000, loops=0)
await module.clock_sweep.config.set(mode=enums.PPMSweepMode.TRIANGLE, ppb_step=50_000, step_delay=1_000_000, max_ppb=390_000, loops=0)
resp = await module.clock_sweep.config.get()
resp.mode
resp.ppb_step
resp.step_delay
resp.max_ppb
resp.loops
Clock PPM Sweep Status
Return the current status of the M_CLOCKPPBSWEEP
command.
Corresponding low-level API class: M_CLOCKSWEEPSTATUS
# Clock PPM Sweep Status
if isinstance(module, FREYA_MODULES):
resp = await module.clock_sweep.status.get()
resp.curr_step
resp.curr_sweep
resp.max_steps