The straightforward available adjustment method is to perform a direct
update of the
system_timer using the Overwrite interface.
In this procedure, the user logic provides its current timer value at regular intervals. The
ctl_tx/rx_ptp_systemtimer_N are used to
provide the master clock value. A transition on
ctl_tx/rx_ptp_st_sync_N triggers the overwrite. Both of these signals are
latched on the master time-of-day clock,
The overwrite mechanism is very effective. An overwrite interval of 64 ns,
using the default settings for the
timer_increment, allows the MRMAC to maintain the target accuracy even with the clock at ±200 PPM.
ctl_tx/rx_ptp_systemtimer_Nvalue using the
ctl_tx/rx_st_offset_Ninput. This allows the system to account for any system latency (for example, latency due to re-sampling delays). It also allows you to move the reference plane, the point in the datapath that the timestamp represents.
When the master time-of-day clock domain
ts_tx/rx_clk_N and the
signals are asynchronous to the local clock, it is possible that the new system timer value
is retimed and sampled in the wrong clock cycle, leading to unwanted inaccuracy. To counter
this, an embedded DDR phase detector automatically adjusts the provided
system_timer value to account for whether the new timer value was
sampled on a rising or falling clock edge. This is the phase
adjust function depicted in the diagram.
If additional accuracy is required, the user logic can overwrite the system
timer at start-up and then continually monitor the
stat_tx/rx_ptp_systemtimer_N making frequency and phase adjustments to the
system timer as necessary to precisely match the master timer. Using this method, accuracy
can be improved significantly.