Skip to content

Commit 3155340

Browse files
committed
Fix MAC RX PTP timestamp in sideband
Signed-off-by: Alex Forencich <[email protected]>
1 parent 3b47f8d commit 3155340

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

rtl/axis_xgmii_rx_32.v

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ reg [DATA_WIDTH-1:0] m_axis_tdata_reg = {DATA_WIDTH{1'b0}}, m_axis_tdata_next;
120120
reg [KEEP_WIDTH-1:0] m_axis_tkeep_reg = {KEEP_WIDTH{1'b0}}, m_axis_tkeep_next;
121121
reg m_axis_tvalid_reg = 1'b0, m_axis_tvalid_next;
122122
reg m_axis_tlast_reg = 1'b0, m_axis_tlast_next;
123-
reg m_axis_tuser_reg = 1'b0, m_axis_tuser_next;
123+
reg [USER_WIDTH-1:0] m_axis_tuser_reg = {USER_WIDTH{1'b0}}, m_axis_tuser_next;
124124

125125
reg start_packet_reg = 1'b0, start_packet_next;
126126
reg error_bad_frame_reg = 1'b0, error_bad_frame_next;
@@ -149,7 +149,7 @@ assign m_axis_tdata = m_axis_tdata_reg;
149149
assign m_axis_tkeep = m_axis_tkeep_reg;
150150
assign m_axis_tvalid = m_axis_tvalid_reg;
151151
assign m_axis_tlast = m_axis_tlast_reg;
152-
assign m_axis_tuser = PTP_TS_ENABLE ? {ptp_ts_reg, m_axis_tuser_reg} : m_axis_tuser_reg;
152+
assign m_axis_tuser = m_axis_tuser_reg;
153153

154154
assign start_packet = start_packet_reg;
155155
assign error_bad_frame = error_bad_frame_reg;
@@ -272,7 +272,8 @@ always @* begin
272272
m_axis_tkeep_next = {KEEP_WIDTH{1'b1}};
273273
m_axis_tvalid_next = 1'b0;
274274
m_axis_tlast_next = 1'b0;
275-
m_axis_tuser_next = 1'b0;
275+
m_axis_tuser_next = m_axis_tuser_reg;
276+
m_axis_tuser_next[0] = 1'b0;
276277

277278
start_packet_next = 1'b0;
278279
error_bad_frame_next = 1'b0;
@@ -285,6 +286,10 @@ always @* begin
285286
// idle state - wait for packet
286287
reset_crc = 1'b1;
287288

289+
if (PTP_TS_ENABLE) begin
290+
m_axis_tuser_next[1 +: PTP_TS_WIDTH] = ptp_ts_reg;
291+
end
292+
288293
if (xgmii_rxc_d2[0] && xgmii_rxd_d2[7:0] == XGMII_START) begin
289294
// start condition
290295
if (control_masked) begin
@@ -293,7 +298,7 @@ always @* begin
293298
m_axis_tkeep_next = 4'h1;
294299
m_axis_tvalid_next = 1'b1;
295300
m_axis_tlast_next = 1'b1;
296-
m_axis_tuser_next = 1'b1;
301+
m_axis_tuser_next[0] = 1'b1;
297302
error_bad_frame_next = 1'b1;
298303
state_next = STATE_IDLE;
299304
end else begin
@@ -316,14 +321,14 @@ always @* begin
316321
m_axis_tkeep_next = {KEEP_WIDTH{1'b1}};
317322
m_axis_tvalid_next = 1'b1;
318323
m_axis_tlast_next = 1'b0;
319-
m_axis_tuser_next = 1'b0;
324+
m_axis_tuser_next[0] = 1'b0;
320325

321326
last_cycle_tkeep_next = tkeep_mask;
322327

323328
if (control_masked) begin
324329
// control or error characters in packet
325330
m_axis_tlast_next = 1'b1;
326-
m_axis_tuser_next = 1'b1;
331+
m_axis_tuser_next[0] = 1'b1;
327332
error_bad_frame_next = 1'b1;
328333
reset_crc = 1'b1;
329334
state_next = STATE_IDLE;
@@ -336,7 +341,7 @@ always @* begin
336341
if (detect_term[0] && crc_valid3_save) begin
337342
// CRC valid
338343
end else begin
339-
m_axis_tuser_next = 1'b1;
344+
m_axis_tuser_next[0] = 1'b1;
340345
error_bad_frame_next = 1'b1;
341346
error_bad_fcs_next = 1'b1;
342347
end
@@ -355,7 +360,7 @@ always @* begin
355360
m_axis_tkeep_next = last_cycle_tkeep_reg;
356361
m_axis_tvalid_next = 1'b1;
357362
m_axis_tlast_next = 1'b1;
358-
m_axis_tuser_next = 1'b0;
363+
m_axis_tuser_next[0] = 1'b0;
359364

360365
reset_crc = 1'b1;
361366

@@ -364,7 +369,7 @@ always @* begin
364369
(detect_term_save[3] && crc_valid2_save)) begin
365370
// CRC valid
366371
end else begin
367-
m_axis_tuser_next = 1'b1;
372+
m_axis_tuser_next[0] = 1'b1;
368373
error_bad_frame_next = 1'b1;
369374
error_bad_fcs_next = 1'b1;
370375
end

rtl/axis_xgmii_rx_64.v

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ reg [DATA_WIDTH-1:0] m_axis_tdata_reg = {DATA_WIDTH{1'b0}}, m_axis_tdata_next;
125125
reg [KEEP_WIDTH-1:0] m_axis_tkeep_reg = {KEEP_WIDTH{1'b0}}, m_axis_tkeep_next;
126126
reg m_axis_tvalid_reg = 1'b0, m_axis_tvalid_next;
127127
reg m_axis_tlast_reg = 1'b0, m_axis_tlast_next;
128-
reg m_axis_tuser_reg = 1'b0, m_axis_tuser_next;
128+
reg [USER_WIDTH-1:0] m_axis_tuser_reg = {USER_WIDTH{1'b0}}, m_axis_tuser_next;
129129

130130
reg [1:0] start_packet_reg = 2'b00;
131131
reg error_bad_frame_reg = 1'b0, error_bad_frame_next;
@@ -154,7 +154,7 @@ assign m_axis_tdata = m_axis_tdata_reg;
154154
assign m_axis_tkeep = m_axis_tkeep_reg;
155155
assign m_axis_tvalid = m_axis_tvalid_reg;
156156
assign m_axis_tlast = m_axis_tlast_reg;
157-
assign m_axis_tuser = PTP_TS_ENABLE ? {ptp_ts_reg, m_axis_tuser_reg} : m_axis_tuser_reg;
157+
assign m_axis_tuser = m_axis_tuser_reg;
158158

159159
assign start_packet = start_packet_reg;
160160
assign error_bad_frame = error_bad_frame_reg;
@@ -308,7 +308,8 @@ always @* begin
308308
m_axis_tkeep_next = {KEEP_WIDTH{1'b1}};
309309
m_axis_tvalid_next = 1'b0;
310310
m_axis_tlast_next = 1'b0;
311-
m_axis_tuser_next = 1'b0;
311+
m_axis_tuser_next = m_axis_tuser_reg;
312+
m_axis_tuser_next[0] = 1'b0;
312313

313314
error_bad_frame_next = 1'b0;
314315
error_bad_fcs_next = 1'b0;
@@ -320,13 +321,18 @@ always @* begin
320321

321322
if (xgmii_rxc_d1[0] && xgmii_rxd_d1[7:0] == XGMII_START) begin
322323
// start condition
324+
325+
if (PTP_TS_ENABLE) begin
326+
m_axis_tuser_next[1 +: PTP_TS_WIDTH] = ptp_ts_reg;
327+
end
328+
323329
if (control_masked) begin
324330
// control or error characters in first data word
325331
m_axis_tdata_next = {DATA_WIDTH{1'b0}};
326332
m_axis_tkeep_next = 8'h01;
327333
m_axis_tvalid_next = 1'b1;
328334
m_axis_tlast_next = 1'b1;
329-
m_axis_tuser_next = 1'b1;
335+
m_axis_tuser_next[0] = 1'b1;
330336
error_bad_frame_next = 1'b1;
331337
state_next = STATE_IDLE;
332338
end else begin
@@ -343,14 +349,14 @@ always @* begin
343349
m_axis_tkeep_next = {KEEP_WIDTH{1'b1}};
344350
m_axis_tvalid_next = 1'b1;
345351
m_axis_tlast_next = 1'b0;
346-
m_axis_tuser_next = 1'b0;
352+
m_axis_tuser_next[0] = 1'b0;
347353

348354
last_cycle_tkeep_next = {4'b0000, tkeep_mask[7:4]};
349355

350356
if (control_masked) begin
351357
// control or error characters in packet
352358
m_axis_tlast_next = 1'b1;
353-
m_axis_tuser_next = 1'b1;
359+
m_axis_tuser_next[0] = 1'b1;
354360
error_bad_frame_next = 1'b1;
355361
reset_crc = 1'b1;
356362
state_next = STATE_IDLE;
@@ -367,7 +373,7 @@ always @* begin
367373
(detect_term[4] && crc_valid3)) begin
368374
// CRC valid
369375
end else begin
370-
m_axis_tuser_next = 1'b1;
376+
m_axis_tuser_next[0] = 1'b1;
371377
error_bad_frame_next = 1'b1;
372378
error_bad_fcs_next = 1'b1;
373379
end
@@ -387,7 +393,7 @@ always @* begin
387393
m_axis_tkeep_next = last_cycle_tkeep_reg;
388394
m_axis_tvalid_next = 1'b1;
389395
m_axis_tlast_next = 1'b1;
390-
m_axis_tuser_next = 1'b0;
396+
m_axis_tuser_next[0] = 1'b0;
391397

392398
reset_crc = 1'b1;
393399

@@ -396,7 +402,7 @@ always @* begin
396402
(detect_term_save[7] && crc_valid2)) begin
397403
// CRC valid
398404
end else begin
399-
m_axis_tuser_next = 1'b1;
405+
m_axis_tuser_next[0] = 1'b1;
400406
error_bad_frame_next = 1'b1;
401407
error_bad_fcs_next = 1'b1;
402408
end
@@ -409,7 +415,7 @@ always @* begin
409415
m_axis_tkeep_next = 8'h01;
410416
m_axis_tvalid_next = 1'b1;
411417
m_axis_tlast_next = 1'b1;
412-
m_axis_tuser_next = 1'b1;
418+
m_axis_tuser_next[0] = 1'b1;
413419
error_bad_frame_next = 1'b1;
414420
state_next = STATE_IDLE;
415421
end else begin

0 commit comments

Comments
 (0)