From 51969a7cf774b0fa3c2f2e5b606451f1cd6817e2 Mon Sep 17 00:00:00 2001
From: zhe <zhe@inf.ethz.ch>
Date: Mon, 23 Mar 2020 15:45:07 +0100
Subject: [PATCH] ooo desn't hang

---
 hls/toe/rx_engine/rx_engine.cpp | 17 +++++++++++++----
 hls/toe/toe_internals.hpp       |  8 ++++----
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/hls/toe/rx_engine/rx_engine.cpp b/hls/toe/rx_engine/rx_engine.cpp
index 9d16f75..88b9198 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 78a14a5..d12dee3 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) {}
 };
 
-- 
GitLab