diff --git a/hls/toe/rx_engine/rx_engine.cpp b/hls/toe/rx_engine/rx_engine.cpp index 9d16f75f90d4a3250d094dc5db1034ad847d622b..88b91985ca34d71edb3d33eae77ab5ee8934738d 100755 --- a/hls/toe/rx_engine/rx_engine.cpp +++ b/hls/toe/rx_engine/rx_engine.cpp @@ -1121,7 +1121,7 @@ void rxTcpFSM( stream<rxFsmMetaData>& fsmMetaDataFifo, ap_uint<32> newRecvd = 0; ap_uint<32> newHead = 0; - ap_uint<WINDOW_BITS> newOffset = 0; + ap_uint<32> newOffset = 0; // ### No gap, packet comes in order if (!rxSar.gap && (fsm_meta.meta.seqNumb == rxSar.recvd) && (free_space > fsm_meta.meta.length)) { @@ -1159,7 +1159,7 @@ void rxTcpFSM( stream<rxFsmMetaData>& fsmMetaDataFifo, std::cout<<" free_space:"<<free_space<<std::endl; //increment head pointer, set offset to ooo sequence number newHead = fsm_meta.meta.seqNumb+fsm_meta.meta.length; - newOffset = fsm_meta.meta.seqNumb(WINDOW_BITS-1, 0); + newOffset = fsm_meta.meta.seqNumb; //update head and offset pointer, set gap to true rxEng2rxSar_upd_req.write(rxSarRecvd(fsm_meta.sessionID, rxSar.recvd, newHead, newOffset, true)); //notification for matching the mem write status in notificationDelayer @@ -1203,7 +1203,7 @@ void rxTcpFSM( stream<rxFsmMetaData>& fsmMetaDataFifo, std::cout<<" gap:"<<rxSar.gap; std::cout<<" free_space:"<<free_space<<std::endl; //fill the gap - if ((fsm_meta.meta.seqNumb + fsm_meta.meta.length)(WINDOW_BITS-1, 0) == rxSar.offset) + if ((fsm_meta.meta.seqNumb + fsm_meta.meta.length) == rxSar.offset) { newRecvd = rxSar.head; rxEng2rxSar_upd_req.write(rxSarRecvd(fsm_meta.sessionID, newRecvd, rxSar.head, rxSar.offset, false)); @@ -1214,7 +1214,7 @@ void rxTcpFSM( stream<rxFsmMetaData>& fsmMetaDataFifo, dropDataFifoOut.write(false); } //gap can not be filled - else if ((fsm_meta.meta.seqNumb + fsm_meta.meta.length)(WINDOW_BITS-1, 0) < rxSar.offset) + else if ((fsm_meta.meta.seqNumb + fsm_meta.meta.length) < rxSar.offset) { newRecvd = fsm_meta.meta.seqNumb + fsm_meta.meta.length; rxEng2rxSar_upd_req.write(rxSarRecvd(fsm_meta.sessionID, newRecvd, rxSar.head, rxSar.offset, rxSar.gap)); @@ -1229,6 +1229,15 @@ void rxTcpFSM( stream<rxFsmMetaData>& fsmMetaDataFifo, else { dropDataFifoOut.write(true); + std::cout<<"RX_DROP"; + std::cout<<std::dec<<" session id:"<<fsm_meta.sessionID; + std::cout<<" seqNum:"<<fsm_meta.meta.seqNumb; + std::cout<<" recvd:"<<rxSar.recvd; + std::cout<<" head:"<<rxSar.head; + std::cout<<" offset:"<<rxSar.offset; + std::cout<<" length:"<<fsm_meta.meta.length; + std::cout<<" gap:"<<rxSar.gap; + std::cout<<" free_space:"<<free_space<<std::endl; } } diff --git a/hls/toe/toe_internals.hpp b/hls/toe/toe_internals.hpp index 78a14a520e87f5b6628fa9bde3be48ba6cfaf14b..d12dee381942f908fa1416ff53c8f31e9cabfdbc 100755 --- a/hls/toe/toe_internals.hpp +++ b/hls/toe/toe_internals.hpp @@ -119,7 +119,7 @@ struct rxSarEntry ap_uint<4> win_shift; #endif ap_uint<32> head; - ap_uint<16> offset; + ap_uint<32> offset; bool gap; }; @@ -148,7 +148,7 @@ struct rxSarRecvd ap_uint<1> write; ap_uint<1> init; ap_uint<32> head; - ap_uint<WINDOW_BITS> offset; + ap_uint<32> offset; bool gap; rxSarRecvd() {} rxSarRecvd(ap_uint<16> id) @@ -158,9 +158,9 @@ struct rxSarRecvd // rxSarRecvd(ap_uint<16> id, ap_uint<32> recvd, ap_uint<4> win_shift) // :sessionID(id), recvd(recvd), win_shift(win_shift), write(1), init(1) {} - rxSarRecvd(ap_uint<16> id, ap_uint<32> recvd, ap_uint<32> head, ap_uint<WINDOW_BITS>offset, bool gap) + rxSarRecvd(ap_uint<16> id, ap_uint<32> recvd, ap_uint<32> head, ap_uint<32>offset, bool gap) :sessionID(id), recvd(recvd), head(head), offset(offset), gap(gap), write(1), init(0) {} - rxSarRecvd(ap_uint<16> id, ap_uint<32> recvd, ap_uint<32> head, ap_uint<WINDOW_BITS>offset, bool gap, ap_uint<4> win_shift) + rxSarRecvd(ap_uint<16> id, ap_uint<32> recvd, ap_uint<32> head, ap_uint<32>offset, bool gap, ap_uint<4> win_shift) :sessionID(id), recvd(recvd), head(head), offset(offset), gap(gap), win_shift(win_shift), write(1), init(1) {} };