The Fuzzball local clock consists of a collection of hardware
and software registers, together with a set of algorithms, which implement a logical clock that functions as a disciplined oscillator
and synchronizes to an external source. Following is a description of its components and manner of operation. Note that all arithmetic
is two's complement integer and all shifts "<<" and ">>" are arithmetic (sign-fill for right shifts and zero-fill for left
shifts). Also note that x << n is equivalent to x >> -n.
The principal components of the local clock are shown in Figure 3, in which the fraction points shown are relative to whole
milliseconds. The 48-bit Clock register and 32-bit Prescaler function as a disciplined oscillator which increments in milliseconds
relative to midnight at the fraction point. The 32-bit Clock-Adjust register is used to adjust the oscillator phase in gradual steps
to avoid discontinuities in the indicated time scale. Its contents are designated x in the following. The 32-bit Skew-Compensation
register is used to trim the oscillator frequency by adding small phase increments at periodic adjustment intervals and can compensate
for frequency errors as much as .01% or ±100 ppm. Its contents are designated y in the following. The 16-bit
Watchdog counter and 32-bit Compliance register are used to determine validity, as well as establish the PLL bandwidth and poll
interval (see Appendix G). The contents of the Compliance register are designated z in the following. The
32-bit PPS-Adjust register is used to hold a precision time adjustment when a source of 1-pps pulses is available, while the 8-bit PPS
counter is used to verify presence of these pulses. The two-bit Flags register contains the two leap bits described elsewhere
(leap).
All registers except the Prescaler register are ordinarily implemented in memory. In typical clock interface designs such as the DEC
KWV11-C, the Prescaler register is implemented as a 16-bit buffered counter driven by a quartz-controlled oscillator at some multiple
of 1000 Hz. A counter overflow is signalled by an interrupt, which results in an increment of the Clock register at the bit
corresponding to the overflow. The time of day is determined by reading the Prescaler register, which does not disturb the counting
process, and adding its value to that of the Clock register with fraction points aligned as shown and with unimplemented low-order
bits set to zero. In other interface designs, such as the LSI-11 event-line mechanism, each tick of the clock is signalled by an
interrupt at intervals of 16-2/3 ms or 20
ms, depending on interface and mains frequency. When this occurs the appropriate increment in fractional milliseconds is added to the
Clock register.
The various parameters used are summarized in Table 6, in which certain parameters have been rescaled from those given in Appendix G due to the units here being in milliseconds. When the system is initialized, all registers and counters
are cleared and the leap bits set to 112 (unsynchronized). At adjustment intervals of CLOCK.ADJ seconds CLOCK.ADJ is subtracted from
the PPS counter, but only if the previous contents of the PPS counter are greater than zero. Also, CLOCK.ADJ is added to the Watchdog
counter, but the latter is clamped not to exceed NTP.MAXAGE divided by CLOCK.ADJ (one full day). In addition, if the Watchdog counter
reaches this value, the leap bits are set to 112 (unsynchronized).
In some system configurations a precise source of timing information is available in the form of a train of timing pulses spaced at
one-second intervals. Usually, this is in addition to a source of timecode information, such as a radio clock or even NTP itself, to
number the seconds, minutes, hours and days. In typical clock interface designs such as the DEC KWV11-C, a special input is provided
which can trigger an interrupt as each pulse is received. When this happens the PPS counter is set to CLOCK.PPS and the current time
offset is determined in the usual way. Then, the PPS-Adjust register is set to the time offset scaled to milliseconds. Finally, if the
PPS-Adjust register is greater than or equal to 500, 1000 is subtracted from its contents. As described below, the PPS-Adjust register
and PPS counters can be used in conjunction with an ordinary timecode to produce an extremely accurate local clock.
|
|