@@ -69,7 +69,9 @@ entity TX_MAC_LITE is
6969 -- Maximum number of Transactions waiting for space insertion
7070 -- Ignored when IPG_GENERATE_EN==false
7171 TRANS_FIFO_SIZE : natural := 128 ;
72- -- Low-latency mode: do not discard errornous frames
72+ -- Low-latency mode: buffering is disabled, therefore erroneous frames are not discarded
73+ -- Also, frames may be corrupted when the MAC is disabled/enabled during ongoing traffic
74+ -- Use with care and only if you know what you are doing
7375 LL_MODE : boolean := false ;
7476 -- FPGA device name.
7577 DEVICE : string := " STRATIX10" ;
@@ -423,9 +425,10 @@ begin
423425 fl_mfb_frame_len_arr <= slv_array_deser(fl_mfb_frame_len,MD_REGIONS,LEN_WIDTH);
424426
425427 fl_mfb_discard_g : for r in 0 to MD_REGIONS- 1 generate
426- fl_mfb_undersize(r) <= '1' when (unsigned (fl_mfb_frame_len_arr(r)) < FRAME_LEN_MIN) else '0' ;
428+ fl_mfb_undersize(r) <= '1' when (unsigned (fl_mfb_frame_len_arr(r)) < FRAME_LEN_MIN) and ( not LL_MODE) else '0' ;
427429 fl_mfb_discard(r) <= fl_mfb_undersize(r) or ctrl_ld_discard or ctrl_off_discard;
428- fl_mfb_discard_vld(r) <= fl_mfb_discard(r) and fl_mfb_eof(r) and fl_mfb_src_rdy;
430+ fl_mfb_discard_vld(r) <= fl_mfb_discard(r) and fl_mfb_src_rdy and fl_mfb_eof(r) when (not LL_MODE) else
431+ fl_mfb_discard(r) and fl_mfb_src_rdy;
429432 end generate ;
430433
431434 fl_mfb_dst_rdy <= fd_mfb_dst_rdy and crc_mfb_dst_rdy;
@@ -680,7 +683,7 @@ begin
680683 sp_mfb_sof <= fd_mfb_sof;
681684 sp_mfb_eof <= fd_mfb_eof;
682685 fd_mfb_dst_rdy <= sp_mfb_dst_rdy;
683- sp_mfb_src_rdy <= fd_mfb_src_rdy;
686+ sp_mfb_src_rdy <= fd_mfb_src_rdy and ( not ( or fd_mfb_discard)) ;
684687 end generate ;
685688 end generate ;
686689
0 commit comments