60 #define THIS_NAME "TAF"
62 #define TRACE_OFF 0x0000
63 #define TRACE_ESF 1 << 1
64 #define TRACE_RXP 1 << 2
65 #define TRACE_TXP 1 << 3
66 #define TRACE_ALL 0xFFFF
67 #define DEBUG_LEVEL (TRACE_OFF)
90 stream<TcpAppData> &siRXp_Data,
91 stream<TcpSessId> &siRXp_SessId,
92 stream<TcpDatLen> &siRXp_DatLen,
93 stream<TcpAppData> &soTXp_Data,
94 stream<TcpSessId> &soTXp_SessId,
95 stream<TcpDatLen> &soTXp_DatLen)
98 #pragma HLS INLINE off
99 #pragma HLS PIPELINE II=1 enable_flush
104 static enum FsmStates { ESF_META=0, ESF_STREAM } \
105 esf_fsmState = ESF_META;
106 #pragma HLS reset variable=esf_fsmState
107 static Ly4Len esf_byteCnt;
108 #pragma HLS reset variable=esf_byteCnt
117 if ( !siRXp_Data.empty() and !soTXp_Data.full() ) {
119 soTXp_Data.write(appData);
120 esf_byteCnt += appData.
getLen();
129 if ( !siRXp_SessId.empty() and !soTXp_SessId.full() and
130 !siRXp_DatLen.empty() and !soTXp_DatLen.full() ) {
133 soTXp_SessId.write(sessId);
134 soTXp_DatLen.write(datLen);
154 #
if defined TAF_USE_NON_FIFO_IO
155 ap_uint<2> piSHL_MmioEchoCtrl,
157 stream<TcpAppData> &siEPt_Data,
158 stream<TcpSessId> &siEPt_SessId,
159 stream<TcpDatLen> &siEPt_DatLen,
160 stream<TcpAppData> &siESf_Data,
161 stream<TcpSessId> &siESf_SessId,
162 stream<TcpDatLen> &siESf_DatLen,
163 stream<TcpAppData> &soTSIF_Data,
164 stream<TcpSessId> &soTSIF_SessId,
165 stream<TcpDatLen> &soTSIF_DatLen)
168 #pragma HLS INLINE off
169 #pragma HLS PIPELINE II=1 enable_flush
174 static enum FsmStates { TXP_START_OF_STREAM=0, TXP_CONTINUATION_OF_STREAM } \
175 txp_fsmState=TXP_START_OF_STREAM;
176 #pragma HLS RESET variable=txp_fsmState
178 #pragma HLS RESET variable=txp_EchoCtrl
181 static ap_uint<16> txp_msgGapSize;
187 #if defined TAF_USE_NON_FIFO_IO
188 switch (txp_fsmState ) {
189 case TXP_START_OF_STREAM:
190 switch(piSHL_MmioEchoCtrl) {
193 if ( !siEPt_SessId.empty() and !soTSIF_SessId.full() and
194 !siEPt_DatLen.empty() and !soTSIF_DatLen.full() ) {
197 siEPt_SessId.read(sessId);
198 siEPt_DatLen.read(datLen);
199 soTSIF_SessId.write(sessId);
200 soTSIF_DatLen.write(datLen);
201 txp_fsmState = TXP_CONTINUATION_OF_STREAM;
206 if ( !siESf_SessId.empty() and !soTSIF_SessId.full() and
207 !siESf_DatLen.empty() and !soTSIF_DatLen.full() ) {
210 siESf_SessId.read(sessId);
211 siESf_DatLen.read(datLen);
212 soTSIF_SessId.write(sessId);
213 soTSIF_DatLen.write(datLen);
214 txp_fsmState = TXP_CONTINUATION_OF_STREAM;
220 if ( !siEPt_SessId.empty() ) {
223 else if ( !siESf_SessId.empty() ) {
227 if ( !siEPt_DatLen.empty() ) {
230 else if ( !siESf_DatLen.empty() ) {
233 txp_fsmState = TXP_CONTINUATION_OF_STREAM;
237 case TXP_CONTINUATION_OF_STREAM:
238 switch(piSHL_MmioEchoCtrl) {
241 if (!siEPt_Data.empty() and !soTSIF_Data.full()) {
242 siEPt_Data.read(appData);
243 soTSIF_Data.write(appData);
246 txp_fsmState = TXP_START_OF_STREAM;
252 if ( !siESf_Data.empty() and !soTSIF_Data.full()) {
253 siESf_Data.read(appData);
254 soTSIF_Data.write(appData);
257 txp_fsmState = TXP_START_OF_STREAM;
264 if ( !siEPt_Data.empty() ) {
265 siEPt_Data.read(appData);
267 else if ( !siESf_Data.empty() ) {
268 siESf_Data.read(appData);
271 txp_fsmState = TXP_START_OF_STREAM;
277 switch (txp_fsmState ) {
278 case TXP_START_OF_STREAM:
279 if (!siEPt_SessId.empty() and !siEPt_DatLen.empty() and
280 !soTSIF_SessId.full() and !soTSIF_DatLen.full()) {
281 soTSIF_SessId.write(siEPt_SessId.read());
282 soTSIF_DatLen.write(siEPt_DatLen.read());
284 txp_fsmState = TXP_CONTINUATION_OF_STREAM;
286 else if (!siESf_SessId.empty() and !siESf_DatLen.empty() and
287 !soTSIF_SessId.full() and !soTSIF_DatLen.full()) {
288 soTSIF_SessId.write(siESf_SessId.read());
289 soTSIF_DatLen.write(siESf_DatLen.read());
291 txp_fsmState = TXP_CONTINUATION_OF_STREAM;
294 case TXP_CONTINUATION_OF_STREAM:
296 if(!siEPt_Data.empty() and !soTSIF_Data.full()) {
297 siEPt_Data.read(appData);
298 soTSIF_Data.write(appData);
300 txp_fsmState = TXP_START_OF_STREAM;
306 if(!siESf_Data.empty() and !soTSIF_Data.full()) {
307 siESf_Data.read(appData);
308 soTSIF_Data.write(appData);
310 txp_fsmState = TXP_START_OF_STREAM;
341 #
if defined TAF_USE_NON_FIFO_IO
342 ap_uint<2> piSHL_MmioEchoCtrl,
344 stream<TcpAppData> &siTSIF_Data,
345 stream<TcpSessId> &siTSIF_SessId,
346 stream<TcpDatLen> &siTSIF_DatLen,
347 stream<TcpAppData> &soEPt_Data,
348 stream<TcpSessId> &soEPt_SessId,
349 stream<TcpDatLen> &soEPt_DatLen,
350 stream<TcpAppData> &soESf_Data,
351 stream<TcpSessId> &soESf_SessId,
352 stream<TcpDatLen> &soESf_DatLen)
355 #pragma HLS INLINE off
356 #pragma HLS PIPELINE II=1 enable_flush
361 static enum FsmStates { RXP_START_OF_STREAM=0, RXP_CONTINUATION_OF_STREAM } \
362 rxp_fsmState=RXP_START_OF_STREAM;
363 #pragma HLS reset variable=rxp_fsmState
365 #pragma HLS RESET variable=rxp_EchoCtrl
372 #if defined TAF_USE_NON_FIFO_IO
373 switch(piSHL_MmioEchoCtrl) {
375 switch (rxp_fsmState ) {
376 case RXP_START_OF_STREAM:
378 if ( !siTSIF_SessId.empty() and !soEPt_SessId.full() and
379 !siTSIF_DatLen.empty() and !soEPt_DatLen.full() ) {
380 siTSIF_SessId.read(sessId);
381 siTSIF_DatLen.read(datLen);
382 soEPt_SessId.write(sessId);
383 soEPt_DatLen.write(datLen);
384 rxp_fsmState = RXP_CONTINUATION_OF_STREAM;
387 case RXP_CONTINUATION_OF_STREAM:
389 if (!siTSIF_Data.empty() and !soEPt_Data.full()) {
390 siTSIF_Data.read(appData);
391 soEPt_Data.write(appData);
394 rxp_fsmState = RXP_START_OF_STREAM;
401 switch (rxp_fsmState ) {
402 case RXP_START_OF_STREAM:
404 if ( !siTSIF_SessId.empty() and !soESf_SessId.full() and
405 !siTSIF_DatLen.empty() and !soEPt_DatLen.full()) {
406 soESf_SessId.write(siTSIF_SessId.read());
407 soESf_DatLen.write(siTSIF_DatLen.read());
408 rxp_fsmState = RXP_CONTINUATION_OF_STREAM;
411 case RXP_CONTINUATION_OF_STREAM:
413 if ( !siTSIF_Data.empty() and !soESf_Data.full()) {
414 siTSIF_Data.read(appData);
415 soESf_Data.write(appData);
418 rxp_fsmState = RXP_START_OF_STREAM;
426 switch (rxp_fsmState ) {
427 case RXP_START_OF_STREAM:
429 if ( !siTSIF_SessId.empty() and !siTSIF_DatLen.empty()) {
430 siTSIF_SessId.read();
431 siTSIF_DatLen.read();
432 rxp_fsmState = RXP_CONTINUATION_OF_STREAM;
435 case RXP_CONTINUATION_OF_STREAM:
437 if ( !siTSIF_Data.empty() ) {
441 rxp_fsmState = RXP_START_OF_STREAM;
519 switch (rxp_fsmState ) {
520 case RXP_START_OF_STREAM:
521 if (!siTSIF_SessId.empty() and !siTSIF_DatLen.empty() and
522 !soEPt_SessId.full() and !soEPt_DatLen.full() and
523 !soESf_SessId.full() and !soESf_DatLen.full()) {
524 siTSIF_SessId.read(sessId);
525 siTSIF_DatLen.read(datLen);
526 if (sessId.get_bit(0)) {
527 soEPt_SessId.write(sessId);
528 soEPt_DatLen.write(datLen);
531 printInfo(myName,
"SessId=%d --> Forwarding segment in ECHO_PATH_THRU mode.\n", sessId.to_ushort());
536 soESf_SessId.write(sessId);
537 soESf_DatLen.write(datLen);
540 printInfo(myName,
"SessId=%d --> Forwarding segment in ECHO_STORE_FWD mode.\n", sessId.to_ushort());
543 rxp_fsmState = RXP_CONTINUATION_OF_STREAM;
546 case RXP_CONTINUATION_OF_STREAM:
547 if (!siTSIF_Data.empty()) {
549 siTSIF_Data.read(appData);
550 soEPt_Data.write(appData);
552 rxp_fsmState = RXP_START_OF_STREAM;
555 else if ((rxp_EchoCtrl ==
ECHO_STORE_FWD) and !soESf_Data.full()) {
556 siTSIF_Data.read(appData);
557 soESf_Data.write(appData);
559 rxp_fsmState = RXP_START_OF_STREAM;
586 #
if defined TAF_USE_NON_FIFO_IO
587 ap_uint<2> piSHL_MmioEchoCtrl,
592 stream<TcpAppData> &siTSIF_Data,
593 stream<TcpSessId> &siTSIF_SessId,
594 stream<TcpDatLen> &siTSIF_DataLen,
598 stream<TcpAppData> &soTSIF_Data,
599 stream<TcpSessId> &soTSIF_SessId,
600 stream<TcpDatLen> &soTSIF_DatLen)
606 #pragma HLS INTERFACE ap_ctrl_none port=return
608 #if defined TAF_USE_NON_FIFO_IO
609 #pragma HLS STABLE variable=piSHL_MmioEchoCtrl
617 static stream<TcpAppData> ssRXpToTXp_Data (
"ssRXpToTXp_Data");
618 #pragma HLS STREAM variable=ssRXpToTXp_Data depth=1024
619 static stream<TcpSessId> ssRXpToTXp_SessId (
"ssRXpToTXp_SessId");
620 #pragma HLS STREAM variable=ssRXpToTXp_SessId depth=64
621 static stream<TcpDatLen> ssRXpToTXp_DatLen (
"ssRXpToTXp_DatLen");
622 #pragma HLS STREAM variable=ssRXpToTXp_DatLen depth=64
624 static stream<TcpAppData> ssRXpToESf_Data (
"ssRXpToESf_Data");
625 #pragma HLS STREAM variable=ssRXpToESf_Data depth=2048
626 static stream<TcpSessId> ssRXpToESf_SessId (
"ssRXpToESf_SessId");
627 #pragma HLS STREAM variable=ssRXpToESf_SessId depth=32
628 static stream<TcpDatLen> ssRXpToESf_DatLen (
"ssRXpToESf_DatLen");
629 #pragma HLS STREAM variable=ssRXpToESf_DatLen depth=32
632 static stream<TcpAppData> ssESfToTXp_Data (
"ssESfToTXp_Data");
633 #pragma HLS STREAM variable=ssESfToTXp_Data depth=1024
634 static stream<TcpSessId> ssESfToTXp_SessId (
"ssESfToTXp_SessId");
635 #pragma HLS STREAM variable=ssESfToTXp_SessId depth=32
636 static stream<TcpDatLen> ssESfToTXp_DatLen (
"ssESfToTXp_DatLen");
637 #pragma HLS STREAM variable=ssESfToTXp_DatLen depth=32
657 #
if defined TAF_USE_NON_FIFO_IO
679 #
if defined TAF_USE_NON_FIFO_IO
#define printInfo(callerName, format,...)
A macro to print an information message.
#define concat3(firstCharConst, secondCharConst, thirdCharConst)
void pTcpTxPath(stream< TcpAppData > &siEPt_Data, stream< TcpSessId > &siEPt_SessId, stream< TcpDatLen > &siEPt_DatLen, stream< TcpAppData > &siESf_Data, stream< TcpSessId > &siESf_SessId, stream< TcpDatLen > &siESf_DatLen, stream< TcpAppData > &soTSIF_Data, stream< TcpSessId > &soTSIF_SessId, stream< TcpDatLen > &soTSIF_DatLen)
Transmit Path - From THIS to TSIF.
void pTcpRxPath(stream< TcpAppData > &siTSIF_Data, stream< TcpSessId > &siTSIF_SessId, stream< TcpDatLen > &siTSIF_DatLen, stream< TcpAppData > &soEPt_Data, stream< TcpSessId > &soEPt_SessId, stream< TcpDatLen > &soEPt_DatLen, stream< TcpAppData > &soESf_Data, stream< TcpSessId > &soESf_SessId, stream< TcpDatLen > &soESf_DatLen)
TCP Receive Path (RXp) - From SHELL->ROLE/TSIF to THIS.
void tcp_app_flash(stream< TcpAppData > &siTSIF_Data, stream< TcpSessId > &siTSIF_SessId, stream< TcpDatLen > &siTSIF_DataLen, stream< TcpAppData > &soTSIF_Data, stream< TcpSessId > &soTSIF_SessId, stream< TcpDatLen > &soTSIF_DatLen)
Main process of the TCP Application Flash (TAF)
void pTcpEchoStoreAndForward(stream< TcpAppData > &siRXp_Data, stream< TcpSessId > &siRXp_SessId, stream< TcpDatLen > &siRXp_DatLen, stream< TcpAppData > &soTXp_Data, stream< TcpSessId > &soTXp_SessId, stream< TcpDatLen > &soTXp_DatLen)
Echo Store and Forward (ESf)
: TCP Application Flash (TAF)