diff --git a/src/eth/tb/basex.py b/src/eth/tb/basex.py index ab4566d..9225998 100644 --- a/src/eth/tb/basex.py +++ b/src/eth/tb/basex.py @@ -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: diff --git a/src/eth/tb/taxi_axis_basex_rx_16/test_taxi_axis_basex_rx_16.py b/src/eth/tb/taxi_axis_basex_rx_16/test_taxi_axis_basex_rx_16.py index d76a250..c7763f2 100644 --- a/src/eth/tb/taxi_axis_basex_rx_16/test_taxi_axis_basex_rx_16.py +++ b/src/eth/tb/taxi_axis_basex_rx_16/test_taxi_axis_basex_rx_16.py @@ -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() diff --git a/src/eth/tb/taxi_axis_basex_rx_8/test_taxi_axis_basex_rx_8.py b/src/eth/tb/taxi_axis_basex_rx_8/test_taxi_axis_basex_rx_8.py index 6ac17ce..64edf4e 100644 --- a/src/eth/tb/taxi_axis_basex_rx_8/test_taxi_axis_basex_rx_8.py +++ b/src/eth/tb/taxi_axis_basex_rx_8/test_taxi_axis_basex_rx_8.py @@ -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() diff --git a/src/eth/tb/taxi_gmii_basex_dec/test_taxi_gmii_basex_dec.py b/src/eth/tb/taxi_gmii_basex_dec/test_taxi_gmii_basex_dec.py index 8fec9a2..70219eb 100644 --- a/src/eth/tb/taxi_gmii_basex_dec/test_taxi_gmii_basex_dec.py +++ b/src/eth/tb/taxi_gmii_basex_dec/test_taxi_gmii_basex_dec.py @@ -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)