Skip to content

Commit 0ac15c6

Browse files
committed
Split out and pipeline relative timestamp LSB increment in PTP TD leaf clock
Signed-off-by: Alex Forencich <[email protected]>
1 parent eb0f01f commit 0ac15c6

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

rtl/ptp_td_leaf.v

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,17 @@ reg [PERIOD_NS_W+FNS_W-1:0] period_ns_reg = 0, period_ns_next = 0;
284284
reg [9+CMP_FNS_W-1:0] dst_ns_capt_reg = 0;
285285
reg [9+CMP_FNS_W-1:0] src_ns_sync_reg = 0;
286286

287+
reg [FNS_W-1:0] ts_fns_lsb_reg = 0, ts_fns_lsb_next = 0;
287288
reg [FNS_W-1:0] ts_fns_reg = 0, ts_fns_next = 0;
288289

290+
reg [8:0] ts_rel_ns_lsb_reg = 0, ts_rel_ns_lsb_next = 0;
289291
reg [TS_NS_W-1:0] ts_rel_ns_reg = 0, ts_rel_ns_next = 0;
290-
reg ts_tod_step_reg = 1'b0, ts_tod_step_next;
292+
reg ts_rel_step_reg = 1'b0, ts_rel_step_next;
291293

292294
reg [TS_TOD_S_W-1:0] ts_tod_s_reg = 0, ts_tod_s_next = 0;
293295
reg [TS_TOD_NS_W-1:0] ts_tod_ns_reg = 0, ts_tod_ns_next = 0;
294296
reg [8:0] ts_tod_offset_ns_reg = 0, ts_tod_offset_ns_next = 0;
295-
reg ts_rel_step_reg = 1'b0, ts_rel_step_next;
297+
reg ts_tod_step_reg = 1'b0, ts_tod_step_next;
296298

297299
reg pps_reg = 1'b0, pps_next;
298300
reg pps_str_reg = 1'b0, pps_str_next;
@@ -641,8 +643,10 @@ assign locked = ptp_locked_reg && freq_locked_reg && dst_sync_locked_reg;
641643
always @* begin
642644
period_ns_next = period_ns_reg;
643645

646+
ts_fns_lsb_next = ts_fns_lsb_reg;
644647
ts_fns_next = ts_fns_reg;
645648

649+
ts_rel_ns_lsb_next = ts_rel_ns_lsb_reg;
646650
ts_rel_ns_next = ts_rel_ns_reg;
647651
ts_rel_step_next = 1'b0;
648652

@@ -738,13 +742,18 @@ always @* begin
738742

739743
// PTP clock
740744

741-
// shared fractional ns
742-
ts_fns_next = ts_fns_reg + period_ns_reg;
745+
// shared fractional ns and relative timestamp least significant bits
746+
{ts_rel_ns_lsb_next, ts_fns_lsb_next} = ({ts_rel_ns_lsb_reg, ts_fns_lsb_reg} + period_ns_reg);
747+
ts_fns_next = ts_fns_lsb_reg;
743748

744749
// relative timestamp
745-
ts_rel_ns_next = ({ts_rel_ns_reg, ts_fns_reg} + period_ns_reg) >> FNS_W;
750+
ts_rel_ns_next[8:0] = ts_rel_ns_lsb_reg;
746751

747752
if (TS_REL_EN) begin
753+
if (!ts_rel_ns_next[8] && ts_rel_ns_reg[8]) begin
754+
ts_rel_ns_next[TS_REL_NS_W-1:9] = ts_rel_ns_reg[TS_REL_NS_W-1:9] + 1;
755+
end
756+
748757
if (dst_update_reg && !dst_sync_reg && dst_rel_shadow_valid_reg && (dst_load_cnt_reg == 0)) begin
749758
// check timestamp MSBs
750759
if (dst_rel_step_shadow_reg || ts_rel_load_ts_reg) begin
@@ -774,9 +783,9 @@ always @* begin
774783
end
775784
end
776785

786+
// absolute time-of-day timestamp
777787
if (TS_TOD_EN) begin
778-
// absolute time-of-day timestamp
779-
ts_tod_ns_next[8:0] = ts_rel_ns_next[8:0] + ts_tod_offset_ns_reg;
788+
ts_tod_ns_next[8:0] = ts_rel_ns_lsb_reg + ts_tod_offset_ns_reg;
780789

781790
if (ts_tod_ns_reg[TS_TOD_NS_W-1]) begin
782791
pps_str_next = 1'b0;
@@ -929,8 +938,10 @@ end
929938
always @(posedge clk) begin
930939
period_ns_reg <= period_ns_next;
931940

941+
ts_fns_lsb_reg <= ts_fns_lsb_next;
932942
ts_fns_reg <= ts_fns_next;
933943

944+
ts_rel_ns_lsb_reg <= ts_rel_ns_lsb_next;
934945
ts_rel_ns_reg <= ts_rel_ns_next;
935946
ts_rel_step_reg <= ts_rel_step_next;
936947

@@ -975,7 +986,9 @@ always @(posedge clk) begin
975986

976987
if (rst) begin
977988
period_ns_reg <= 0;
989+
ts_fns_lsb_reg <= 0;
978990
ts_fns_reg <= 0;
991+
ts_rel_ns_lsb_reg <= 0;
979992
ts_rel_ns_reg <= 0;
980993
ts_rel_step_reg <= 1'b0;
981994
ts_tod_s_reg <= 0;

0 commit comments

Comments
 (0)