On 2021-12-08 18:57, EGR Email wrote:
The offset is computed based on the assumption that the radios can properly timestamp received messages and transmit messages accurate to the clock tick using schedule transmissions.  This is done using by performing scheduled RX bursts by filling the stream_cmd_t struct with a receive time spec before issuing the rx_streamer::issue_stream_cmd() to the rx_streamer, and similarly by filling the tx_metadata struct with a time spec before using the tx_streamer::send() command. From my testing this appears to properly schedule TX and RX bursts within one clock tick (which I believe is the intended function of these commands).

Because the synchronization bursts are happening via scheduled/timed commands from the FPGA, the latencies of the network layer and OS will have no effect on synchronization as the timing of the critical section is happening entirely within the FPGAs.  The host PC is only scheduling the synchronization bursts at some time in the future and performing the processing on the bursts after they’ve occurred.

I am fairly confident this technique is working and the time bias offset is being computed correctly and with sufficient accuracy to align the clocks to a fraction of a clock cycle. Thus, the issue remains adding a delta to the local clock of the device with a deterministic latency to correct for the computed bias; This seems reasonable to achieve if it can be done on the FPGA, even if the implementation may be somewhat involved.  Fundamentally it’s a fetch, add, and write back.

Primarily, I’m concerned with if it is possible to instruct the FPGA to do this via pre-existing API calls, or if I will need to implement my own RFNoC block to perform it (again I’m not too familiar with RFNoC, but this seems like it should be possible, if the time register can be accessed directly).

Unfortunately, our desired applications wouldn’t allow for a White Rabbit implementation, this would be an alternative to White Rabbit as it will be infeasible to run fiber between the devices.

Thanks,
Jason

There's no "Clock, adjust thyself" primitive in the FPGA already. So it would have to be added.

Normally, the TOD (time of day) clock is set either "right now" to the value provided, or a holding register is loaded with the provided value, and then when triggered by a 1PPS
  even, the TOD clock is loaded from the "holding" register.
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to