@@ -58,7 +58,13 @@ module axis_xgmii_tx_64 #
58
58
/*
59
59
* Configuration
60
60
*/
61
- input wire [7 :0 ] ifg_delay
61
+ input wire [7 :0 ] ifg_delay,
62
+
63
+ /*
64
+ * Status
65
+ */
66
+ output wire start_packet_0,
67
+ output wire start_packet_4
62
68
);
63
69
64
70
localparam MIN_FL_NOCRC = MIN_FRAME_LENGTH- 4 ;
@@ -132,11 +138,17 @@ wire [31:0] crc_next7;
132
138
reg [63 :0 ] xgmii_txd_reg = {8 {XGMII_IDLE}}, xgmii_txd_next;
133
139
reg [7 :0 ] xgmii_txc_reg = 8'b11111111 , xgmii_txc_next;
134
140
141
+ reg start_packet_0_reg = 1'b0 , start_packet_0_next;
142
+ reg start_packet_4_reg = 1'b0 , start_packet_4_next;
143
+
135
144
assign s_axis_tready = s_axis_tready_reg;
136
145
137
146
assign xgmii_txd = xgmii_txd_reg;
138
147
assign xgmii_txc = xgmii_txc_reg;
139
148
149
+ assign start_packet_0 = start_packet_0_reg;
150
+ assign start_packet_4 = start_packet_4_reg;
151
+
140
152
lfsr #(
141
153
.LFSR_WIDTH(32 ),
142
154
.LFSR_POLY(32'h4c11db7 ),
@@ -390,6 +402,9 @@ always @* begin
390
402
xgmii_txd_next = {8 {XGMII_IDLE}};
391
403
xgmii_txc_next = 8'b11111111 ;
392
404
405
+ start_packet_0_next = 1'b0 ;
406
+ start_packet_4_next = 1'b0 ;
407
+
393
408
case (state_reg)
394
409
STATE_IDLE: begin
395
410
// idle state - wait for data
@@ -409,9 +424,11 @@ always @* begin
409
424
if (ifg_count_reg > 8'd0 ) begin
410
425
// need to send more idles - swap lanes
411
426
swap_lanes = 1'b1 ;
427
+ start_packet_4_next = 1'b1 ;
412
428
end else begin
413
429
// no more idles - unswap
414
430
unswap_lanes = 1'b1 ;
431
+ start_packet_0_next = 1'b1 ;
415
432
end
416
433
xgmii_txd_next = {ETH_SFD, {6 {ETH_PRE}}, XGMII_START};
417
434
xgmii_txc_next = 8'b00000001 ;
@@ -635,6 +652,9 @@ always @(posedge clk) begin
635
652
xgmii_txd_reg <= {8 {XGMII_IDLE}};
636
653
xgmii_txc_reg <= 8'b11111111 ;
637
654
655
+ start_packet_0_reg <= 1'b0 ;
656
+ start_packet_4_reg <= 1'b0 ;
657
+
638
658
crc_state <= 32'hFFFFFFFF ;
639
659
640
660
lanes_swapped <= 1'b0 ;
@@ -648,6 +668,9 @@ always @(posedge clk) begin
648
668
649
669
s_axis_tready_reg <= s_axis_tready_next;
650
670
671
+ start_packet_0_reg <= start_packet_0_next;
672
+ start_packet_4_reg <= start_packet_4_next;
673
+
651
674
if (swap_lanes || (lanes_swapped && ! unswap_lanes)) begin
652
675
lanes_swapped <= 1'b1 ;
653
676
xgmii_txd_reg <= {xgmii_txd_next[31 :0 ], swap_txd};
0 commit comments