eth: Update timestamp handling in testbenches

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2026-06-11 01:29:41 -07:00
parent 8427a6c12b
commit 923beaf58d
20 changed files with 42 additions and 78 deletions

View File

@@ -149,7 +149,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.tdata == test_data
assert frame_error == 0
if gbx_cfg is None:
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*1) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*2) < 0.01
assert tb.sink.empty()

View File

@@ -149,7 +149,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.tdata == test_data
assert frame_error == 0
if gbx_cfg is None:
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*0) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*1) < 0.01
assert tb.sink.empty()

View File

@@ -151,7 +151,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.check_fcs()
assert rx_frame.ctrl is None
if gbx_cfg is None:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*4) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*3) < 0.01
assert tb.sink.empty()

View File

@@ -151,7 +151,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.check_fcs()
assert rx_frame.ctrl is None
if gbx_cfg is None:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*3) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*2) < 0.01
assert tb.sink.empty()
@@ -224,7 +224,7 @@ async def run_test_alignment(dut, gbx_cfg=None, payload_data=None, ifg=12):
assert rx_frame.check_fcs()
assert rx_frame.ctrl is None
if gbx_cfg is None:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*3) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*2) < 0.01
start_lane.append(rx_frame.start_lane)

View File

@@ -149,7 +149,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.tdata == test_data
assert frame_error == 0
if gbx_cfg is None:
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*0) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*1) < 0.01
assert tb.sink.empty()

View File

@@ -149,7 +149,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.tdata == test_data
assert frame_error == 0
if gbx_cfg is None:
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*0) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - tb.clk_period*1) < 0.01
assert tb.sink.empty()

View File

@@ -150,7 +150,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.check_fcs()
assert rx_frame.error is None
if gbx_cfg is None:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*1) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*0) < 0.01
assert tb.sink.empty()

View File

@@ -150,7 +150,7 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
assert rx_frame.check_fcs()
assert rx_frame.error is None
if gbx_cfg is None:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*1) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - tb.clk_period*0) < 0.01
assert tb.sink.empty()

View File

@@ -152,7 +152,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12, enable_
assert rx_frame.tdata == test_data
assert frame_error == 0
assert abs(ptp_ts_ns - tx_frame_sfd_ns - (32 if enable_gen else 8)) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - 8) < 0.01
assert tb.sink.empty()

View File

@@ -147,7 +147,7 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12, enable_
assert rx_frame.get_payload() == test_data.ljust(60, b'\x00')
assert rx_frame.check_fcs()
assert rx_frame.error is None
assert abs(rx_frame_sfd_ns - ptp_ts_ns - (32 if enable_gen else 8)) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - (24 if enable_gen else 0)) < 0.01
assert tb.sink.empty()

View File

@@ -119,10 +119,6 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
tx_frame_sfd_ns = get_time_from_sim_steps(tx_frame.sim_time_sfd, "ns")
if tx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
tx_frame_sfd_ns -= 3.2
tb.log.info("RX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("TX frame SFD sim time: %f ns", tx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(ptp_ts_ns - tx_frame_sfd_ns))

View File

@@ -112,10 +112,6 @@ async def run_test(dut, payload_lengths=None, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= 3.2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
@@ -184,10 +180,6 @@ async def run_test_alignment(dut, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= 3.2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))

View File

@@ -173,7 +173,7 @@ async def run_test_rx(dut, payload_lengths=None, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.rx_ptp_locked.value):
await RisingEdge(dut.rx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.rx_clk)
test_frames = [payload_data(x) for x in payload_lengths()]
@@ -193,10 +193,6 @@ async def run_test_rx(dut, payload_lengths=None, payload_data=None, ifg=12):
tx_frame_sfd_ns = get_time_from_sim_steps(tx_frame.sim_time_sfd, "ns")
if tx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
tx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("RX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("TX frame SFD sim time: %f ns", tx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(ptp_ts_ns - tx_frame_sfd_ns))
@@ -231,7 +227,7 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.tx_ptp_locked.value):
await RisingEdge(dut.tx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.tx_clk)
test_frames = [payload_data(x) for x in payload_lengths()]
@@ -247,10 +243,6 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
@@ -290,7 +282,7 @@ async def run_test_tx_alignment(dut, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.tx_ptp_locked.value):
await RisingEdge(dut.tx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.tx_clk)
for length in range(60, 92):
@@ -312,10 +304,6 @@ async def run_test_tx_alignment(dut, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))

View File

@@ -127,7 +127,7 @@ async def run_test_rx(dut, payload_lengths=None, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.rx_ptp_locked.value):
await RisingEdge(dut.rx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.rx_clk)
test_frames = [payload_data(x) for x in payload_lengths()]
@@ -147,10 +147,6 @@ async def run_test_rx(dut, payload_lengths=None, payload_data=None, ifg=12):
tx_frame_sfd_ns = get_time_from_sim_steps(tx_frame.sim_time_sfd, "ns")
if tx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
tx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("RX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("TX frame SFD sim time: %f ns", tx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(ptp_ts_ns - tx_frame_sfd_ns))
@@ -184,7 +180,7 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.tx_ptp_locked.value):
await RisingEdge(dut.tx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.tx_clk)
test_frames = [payload_data(x) for x in payload_lengths()]
@@ -200,10 +196,6 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))
@@ -242,7 +234,7 @@ async def run_test_tx_alignment(dut, payload_data=None, ifg=12):
tb.log.info("Wait for PTP CDC lock")
while not int(dut.tx_ptp_locked.value):
await RisingEdge(dut.tx_clk)
for k in range(2000):
for k in range(4000):
await RisingEdge(dut.tx_clk)
for length in range(60, 92):
@@ -264,10 +256,6 @@ async def run_test_tx_alignment(dut, payload_data=None, ifg=12):
rx_frame_sfd_ns = get_time_from_sim_steps(rx_frame.sim_time_sfd, "ns")
if rx_frame.start_lane == 4:
# start in lane 4 reports 1 full cycle delay, so subtract half clock period
rx_frame_sfd_ns -= tb.clk_period/2
tb.log.info("TX frame PTP TS: %f ns", ptp_ts_ns)
tb.log.info("RX frame SFD sim time: %f ns", rx_frame_sfd_ns)
tb.log.info("Difference: %f ns", abs(rx_frame_sfd_ns - ptp_ts_ns))

View File

@@ -215,7 +215,7 @@ async def run_test_rx(dut, payload_lengths=None, payload_data=None, ifg=12, enab
assert rx_frame.tdata == test_data
assert frame_error == 0
assert abs(ptp_ts_ns - tx_frame_sfd_ns - (32 if enable_gen else 8)) < 0.01
assert abs(ptp_ts_ns - tx_frame_sfd_ns - 8) < 0.01
assert tb.axis_sink.empty()
@@ -263,7 +263,7 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12, enab
assert rx_frame.get_payload() == test_data
assert rx_frame.check_fcs()
assert rx_frame.error is None
assert abs(rx_frame_sfd_ns - ptp_ts_ns - (32 if enable_gen else 8)) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - (24 if enable_gen else 0)) < 0.01
assert tb.gmii_sink.empty()

View File

@@ -226,11 +226,11 @@ async def run_test_tx(dut, payload_lengths=None, payload_data=None, ifg=12, spee
assert rx_frame.check_fcs()
assert rx_frame.error is None
if speed == 10e6:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 800) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 400) < 0.01
elif speed == 100e6:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 80) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 40) < 0.01
else:
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 12) < 0.01
assert abs(rx_frame_sfd_ns - ptp_ts_ns - 4) < 0.01
assert tb.gmii_phy.tx.empty()

View File

@@ -176,9 +176,9 @@ class TB:
async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 3
else:
pipe_delay = 4
else:
pipe_delay = 5
tb = TB(dut, gbx_cfg)
@@ -244,9 +244,9 @@ async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 6
pipe_delay = 5
else:
pipe_delay = 7
pipe_delay = 6
tb = TB(dut, gbx_cfg)
@@ -307,9 +307,9 @@ async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx_alignment(dut, gbx_cfg=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 6
pipe_delay = 5
else:
pipe_delay = 7
pipe_delay = 6
dic_en = int(cocotb.top.DIC_EN.value)

View File

@@ -144,9 +144,9 @@ class TB:
async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 3
else:
pipe_delay = 4
else:
pipe_delay = 5
tb = TB(dut, gbx_cfg)
@@ -208,9 +208,9 @@ async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 6
pipe_delay = 5
else:
pipe_delay = 7
pipe_delay = 6
tb = TB(dut, gbx_cfg)
@@ -266,9 +266,9 @@ async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx_alignment(dut, gbx_cfg=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 6
pipe_delay = 5
else:
pipe_delay = 7
pipe_delay = 6
dic_en = int(cocotb.top.DIC_EN.value)

View File

@@ -175,9 +175,9 @@ class TB:
async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 16:
pipe_delay = 3
pipe_delay = 4
else:
pipe_delay = 3
pipe_delay = 4
tb = TB(dut, gbx_cfg)
@@ -243,9 +243,9 @@ async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 16:
pipe_delay = 4
pipe_delay = 3
else:
pipe_delay = 4
pipe_delay = 3
tb = TB(dut, gbx_cfg)

View File

@@ -143,9 +143,9 @@ class TB:
async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 64:
pipe_delay = 3
pipe_delay = 4
else:
pipe_delay = 3
pipe_delay = 4
tb = TB(dut, gbx_cfg)
@@ -207,9 +207,9 @@ async def run_test_rx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None
async def run_test_tx(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12):
if len(dut.serdes_tx_data) == 16:
pipe_delay = 4
pipe_delay = 3
else:
pipe_delay = 4
pipe_delay = 3
tb = TB(dut, gbx_cfg)