After a list of frames is transmitted, all BDs are marked as not ready and the MAC is disabled (r_TxEn=0), a frame is transmitted when the TX BDs are reinitialised (ready=1). This is because the "TxEn_needed" signal stays '1' when r_TxEn is set to '0'.
I suggest to modify the process the following way (add " | ~r_TxEn" in the second "else if"):
always @ (posedge WB_CLK_I or posedge Reset) begin if(Reset) TxEn_needed <=#Tp 1'b0; else if(~TxBDReady & r_TxEn & WbEn & ~WbEn_q) TxEn_needed <=#Tp 1'b1; else if((TxPointerRead & TxEn & TxEn_q) | ~r_TxEn) TxEn_needed <=#Tp 1'b0; end
What do you think about this?
best regards
Christoph Glattfelder
Zurich University of Applied Sciences Winterthur, Switzerland