The problem with using delay lines to adjust the PPS output for sawtooth correction is that many (most?) GPS receivers that report sawtooth corrections send the sawtooth message AFTER the 1PPS pulse. Those receivers expect you will use the sawtooth values to correct a "paper" 1PPS during data post-processing and correct it after-the-fact. Receivers that send the sawtooth message after the 1PPS are rather useless for doing real time hardware corrections.
Also, most receiver documentation does not bother to tell you if the sawtooth message comes out before or after the 1PPS. They also don't mention whether you use positive or negative numbers for antenna cable delay compensation.
Not how I'm looking at doing it. The delay line, if used, would be just an adjunct to achieving lock sooner, not the method of applying the sawtooth correction to the incoming PPS pulses.
The advantage of running a PLL control loop in software is that you can do the sawtooth correction a little bit later in time than you would have to do it in an analogue PLL. After all, you're going to be feeding it into a filter with a time constant of 10s, possibly hundreds, of seconds, so a few milliseconds delay in changing the input correction to that filter is really neither here or there.
What I've got so far is the basics of a classic analogue PLL with a type II phase/frequency detector. The counter, divider and phase detector for this will be implemented in an FPGA. Where there would be an analogue low pass filter in the analogue PLL instead the 'up' or 'down' pulses from the phase detector go to a time to digital converter, thence to an MCU, the MCU drives a DAC, which drives the OCXO. So basically, the low pass filter is replaced with some digital shenanigans. The time to digital converter gives me the timing of the physical PPS pulse relative to the OXCO clock. The sawtooth correction also goes to the MCU and can be added or subtracted from the figure obtained from the time to digital convertor. Thus the correction amount that goes into the loop filter is sawtooth corrected but delayed by a few milliseconds from where it would have arrived. That, if I've got my maths right, may lead to a small steady state error that can be compensated for. Done this way the sawtooth correction can be used in real time, rather than as an 'after the fact' paper correction.
The reason for using an FPGA, rather than just an MCU timer, is so that the counter can be synchronously zeroed at startup by a single PPS pulse, but then left to free run and generate a pukka hardware local 1 PPS signal. That reset gets me closer to phase lock immediately, without having to wait (potentially a very long time) for the PLL loop to pull the 1 Hz clock derived from the 10 MHz clock around into lock. I've an OCXO that's guaranteed to be less than 400 ppb away from 10 MHz, in fact is 150 odd ppb fast when free running, can be steered by +/- 400 ppb and so I ought to be able to achieve a comparatively short lock time. One LSB on my DAC is about 195ps/s phase shift and the sawtooth correction from the Trimble Resolution-T has a 100 ps granularity.
That initial synchronous zeroing includes the physical sawtooth error associated with the GPS local clock (selecting a 12 odd MHz clock edge, which amounts to +/-15ns). So I'd like to be able to generate a second resynchronising pulse at approximately the right time (rather than on the next clock edge) to injection lock the local oscillator and that pulse is what would need a variable, non-clock derived, delay . That said, I suspect that what I would gain in improved lock time is small compared to the effort it would entail, whereas reducing the jitter from sawtooth errors is definitely worthwhile as it contributes to phase noise in the local, disciplined clock.
Bear in mind what I've got at the moment isn't a completed design. The verilog for the FPGA is mostly written, the analogue side of the time to digital converter is designed and simulated (but needs my current 'orrible input level shifter design replaced with something more elegant). Next step is to write the verilog for the digital part of the time to digital convertor (including the cycle by cycle recalibration) and breadboard the whole hairy mess with an MCU.