eth: Improve truncated preamble tests for 1000BASE-X/SGMII

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2026-07-11 11:26:23 -07:00
parent be9197a231
commit caaa2c3281
4 changed files with 16 additions and 10 deletions

View File

@@ -139,6 +139,7 @@ class BaseXSerdesSource():
self.enable_dic = True
self.ifg = 12
self.truncate_preamble = False
self.bit_offset = 0
@@ -434,6 +435,11 @@ class BaseXSerdesSource():
# /S/
d_val = XgmiiCtrl.START # /K27.7/
k_val = True
if self.truncate_preamble:
if self.gmii_rep_count:
rep_cnt = self.gmii_rep_count
else:
frame_offset += 1
elif frame_offset >= len(frame.data):
# /T/
d_val = XgmiiCtrl.TERM # /K29.7/
@@ -483,7 +489,7 @@ class BaseXSerdesSource():
if rep_cnt > 0:
rep_cnt -= 1
elif self.gmii_rep_count and odd:
elif self.gmii_rep_count and (odd or frame is not None):
rep_cnt = self.gmii_rep_count
# if self.slip is not None and self.slip.value:

View File

@@ -109,11 +109,12 @@ class TB:
self.stats[stat] += int(getattr(self.dut, stat).value)
async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12, pre_len=8):
async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12, pre_trunc=False):
tb = TB(dut, gbx_cfg)
tb.source.ifg = ifg
tb.source.truncate_preamble = pre_trunc
tb.dut.cfg_rx_max_pkt_len.value = 9218-1
tb.dut.cfg_rx_enable.value = 1
@@ -127,7 +128,6 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
for test_data in test_frames:
test_frame = GmiiFrame.from_payload(test_data, tx_complete=tx_frames.append)
test_frame.data = test_frame.data[8-pre_len:]
await tb.source.send(test_frame)
total_bytes += len(test_data)+4
total_pkts += 1
@@ -320,7 +320,7 @@ if getattr(cocotb, 'top', None) is not None:
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
# factory.add_option("ifg", list(range(0, 13)))
factory.add_option("pre_len", [8, 7])
factory.add_option("pre_trunc", [False, True])
factory.add_option("gbx_cfg", gbx_cfgs)
factory.generate_tests()

View File

@@ -124,11 +124,12 @@ class TB:
self.stats[stat] += int(getattr(self.dut, stat).value)
async def run_test(dut, gbx_cfg=None, sgmii_speed=None, payload_lengths=None, payload_data=None, ifg=12, pre_len=8):
async def run_test(dut, gbx_cfg=None, sgmii_speed=None, payload_lengths=None, payload_data=None, ifg=12, pre_trunc=False):
tb = TB(dut, gbx_cfg, sgmii_speed)
tb.source.ifg = ifg
tb.source.truncate_preamble = pre_trunc
tb.dut.cfg_rx_max_pkt_len.value = 9218-1
tb.dut.cfg_rx_enable.value = 1
@@ -142,7 +143,6 @@ async def run_test(dut, gbx_cfg=None, sgmii_speed=None, payload_lengths=None, pa
for test_data in test_frames:
test_frame = GmiiFrame.from_payload(test_data, tx_complete=tx_frames.append)
test_frame.data = test_frame.data[8-pre_len:]
await tb.source.send(test_frame)
total_bytes += max(len(test_data), 60)+4
total_pkts += 1
@@ -335,7 +335,7 @@ if getattr(cocotb, 'top', None) is not None:
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("ifg", [0, 1, 11, 12])
factory.add_option("pre_len", [8, 7])
factory.add_option("pre_trunc", [False, True])
factory.add_option("sgmii_speed", [None, 1, 2])
factory.add_option("gbx_cfg", gbx_cfgs)
factory.generate_tests()

View File

@@ -73,11 +73,12 @@ class TB:
await RisingEdge(self.dut.clk)
async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12, pre_len=8):
async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, ifg=12, pre_trunc=8):
tb = TB(dut, gbx_cfg)
tb.source.ifg = ifg
tb.source.truncate_preamble = pre_trunc
await tb.reset()
@@ -85,7 +86,6 @@ async def run_test(dut, gbx_cfg=None, payload_lengths=None, payload_data=None, i
for test_data in test_frames:
test_frame = GmiiFrame.from_payload(test_data)
test_frame.data = test_frame.data[8-pre_len:]
await tb.source.send(test_frame)
for test_data in test_frames:
@@ -147,7 +147,7 @@ if getattr(cocotb, 'top', None) is not None:
factory.add_option("payload_lengths", [size_list])
factory.add_option("payload_data", [incrementing_payload])
factory.add_option("ifg", list(range(0, 13)))
factory.add_option("pre_len", [8, 7])
factory.add_option("pre_trunc", [False, True])
factory.generate_tests()
factory = TestFactory(run_test_an)