From a367a0c70e40745deb4d56d40afc26c4b87fb89e Mon Sep 17 00:00:00 2001
From: David Sidler <david.sidler@inf.ethz.ch>
Date: Sun, 8 Sep 2019 18:59:43 +0200
Subject: [PATCH] improving parametrization of tcp stack

---
 hdl/common/network_stack.sv | 341 ------------------------------------
 hdl/common/tcp_stack.sv     | 175 ++++++++++++++----
 2 files changed, 140 insertions(+), 376 deletions(-)

diff --git a/hdl/common/network_stack.sv b/hdl/common/network_stack.sv
index ad233ac..d26b0f6 100755
--- a/hdl/common/network_stack.sv
+++ b/hdl/common/network_stack.sv
@@ -30,9 +30,6 @@
 `define IP_VERSION4
 `define POINTER_CHASING
 
-`define UDP
-
-
 `include "davos_types.svh"
 
 module network_stack #(
@@ -312,255 +309,8 @@ tcp_stack #(
      .session_count_valid(session_count_valid),
      .session_count_data(session_count_data)
 );
- 
- //TODO
-/*logic[15:0] regSessionCount_V;
-logic       regSessionCount_V_ap_vld;
-
-generate
-if (RX_DDR_BYPASS_EN == 1) begin
-//RX Buffer bypass data streams
-wire axis_rxbuffer2app_tvalid;
-wire axis_rxbuffer2app_tready;
-wire[63:0] axis_rxbuffer2app_tdata;
-wire[7:0] axis_rxbuffer2app_tkeep;
-wire axis_rxbuffer2app_tlast;
-
-wire axis_tcp2rxbuffer_tvalid;
-wire axis_tcp2rxbuffer_tready;
-wire[63:0] axis_tcp2rxbuffer_tdata;
-wire[7:0] axis_tcp2rxbuffer_tkeep;
-wire axis_tcp2rxbuffer_tlast;
-
-wire[31:0] rx_buffer_data_count;
-end
-else begin
-assign s_axis_read_sts[ddrPortNetworkRx].ready = 1'b1;
-end
-endgenerate
-assign s_axis_read_sts[ddrPortNetworkTx].ready = 1'b1;
 
 
-//hack for now //TODO
-wire[71:0] axis_write_cmd_data [1:0];
-wire[71:0] axis_read_cmd_data [1:0];
-generate
-if (RX_DDR_BYPASS_EN == 0) begin
-assign m_axis_write_cmd[ddrPortNetworkRx].address = axis_write_cmd_data[ddrPortNetworkRx][63:32];
-assign m_axis_write_cmd[ddrPortNetworkRx].length = axis_write_cmd_data[ddrPortNetworkRx][22:0];
-assign m_axis_read_cmd[ddrPortNetworkRx].address = axis_read_cmd_data[ddrPortNetworkRx][63:32];
-assign m_axis_read_cmd[ddrPortNetworkRx].length = axis_read_cmd_data[ddrPortNetworkRx][22:0];
-end
-endgenerate
-assign m_axis_write_cmd[ddrPortNetworkTx].address = axis_write_cmd_data[ddrPortNetworkTx][63:32];
-assign m_axis_write_cmd[ddrPortNetworkTx].length = axis_write_cmd_data[ddrPortNetworkTx][22:0];
-assign m_axis_read_cmd[ddrPortNetworkTx].address = axis_read_cmd_data[ddrPortNetworkTx][63:32];
-assign m_axis_read_cmd[ddrPortNetworkTx].length = axis_read_cmd_data[ddrPortNetworkTx][22:0];
-
-
-
-/*toe_ip toe_inst (
- // Data output
- .m_axis_tcp_data_TVALID(axis_toe_to_toe_slice.valid), // output AXI_M_Stream_TVALID
- .m_axis_tcp_data_TREADY(axis_toe_to_toe_slice.ready), // input AXI_M_Stream_TREADY
- .m_axis_tcp_data_TDATA(axis_toe_to_toe_slice.data), // output [63 : 0] AXI_M_Stream_TDATA
- .m_axis_tcp_data_TKEEP(axis_toe_to_toe_slice.keep), // output [7 : 0] AXI_M_Stream_TSTRB
- .m_axis_tcp_data_TLAST(axis_toe_to_toe_slice.last), // output [0 : 0] AXI_M_Stream_TLAST
- // Data input
- .s_axis_tcp_data_TVALID(axis_toe_slice_to_toe.valid), // input AXI_S_Stream_TVALID
- .s_axis_tcp_data_TREADY(axis_toe_slice_to_toe.ready), // output AXI_S_Stream_TREADY
- .s_axis_tcp_data_TDATA(axis_toe_slice_to_toe.data), // input [63 : 0] AXI_S_Stream_TDATA
- .s_axis_tcp_data_TKEEP(axis_toe_slice_to_toe.keep), // input [7 : 0] AXI_S_Stream_TKEEP
- .s_axis_tcp_data_TLAST(axis_toe_slice_to_toe.last), // input [0 : 0] AXI_S_Stream_TLAST
- `ifndef RX_DDR_BYPASS
- // rx read commands
- .m_axis_rxread_cmd_TVALID(m_axis_read_cmd[ddrPortNetworkRx].valid),
- .m_axis_rxread_cmd_TREADY(m_axis_read_cmd[ddrPortNetworkRx].ready),
- .m_axis_rxread_cmd_TDATA(axis_read_cmd_data[ddrPortNetworkRx]),
- // rx write commands
- .m_axis_rxwrite_cmd_TVALID(m_axis_write_cmd[ddrPortNetworkRx].valid),
- .m_axis_rxwrite_cmd_TREADY(m_axis_write_cmd[ddrPortNetworkRx].ready),
- .m_axis_rxwrite_cmd_TDATA(axis_write_cmd_data[ddrPortNetworkRx]),
- // rx write status
- .s_axis_rxwrite_sts_TVALID(s_axis_write_sts[ddrPortNetworkRx].valid),
- .s_axis_rxwrite_sts_TREADY(s_axis_write_sts[ddrPortNetworkRx].ready),
- .s_axis_rxwrite_sts_TDATA(s_axis_write_sts[ddrPortNetworkRx].data),
- // rx buffer read path
- .s_axis_rxread_data_TVALID(axis_rxread_data.valid),
- .s_axis_rxread_data_TREADY(axis_rxread_data.ready),
- .s_axis_rxread_data_TDATA(axis_rxread_data.data),
- .s_axis_rxread_data_TKEEP(axis_rxread_data.keep),
- .s_axis_rxread_data_TLAST(axis_rxread_data.last),
- // rx buffer write path
- .m_axis_rxwrite_data_TVALID(axis_rxwrite_data.valid),
- .m_axis_rxwrite_data_TREADY(axis_rxwrite_data.ready),
- .m_axis_rxwrite_data_TDATA(axis_rxwrite_data.data),
- .m_axis_rxwrite_data_TKEEP(axis_rxwrite_data.keep),
- .m_axis_rxwrite_data_TLAST(axis_rxwrite_data.last),
- `else
- // rx buffer read path
- .s_axis_rxread_data_TVALID(axis_rxbuffer2app_tvalid),
- .s_axis_rxread_data_TREADY(axis_rxbuffer2app_tready),
- .s_axis_rxread_data_TDATA(axis_rxbuffer2app_tdata),
- .s_axis_rxread_data_TKEEP(axis_rxbuffer2app_tkeep),
- .s_axis_rxread_data_TLAST(axis_rxbuffer2app_tlast),
- // rx buffer write path
- .m_axis_rxwrite_data_TVALID(axis_tcp2rxbuffer_tvalid),
- .m_axis_rxwrite_data_TREADY(axis_tcp2rxbuffer_tready),
- .m_axis_rxwrite_data_TDATA(axis_tcp2rxbuffer_tdata),
- .m_axis_rxwrite_data_TKEEP(axis_tcp2rxbuffer_tkeep),
- .m_axis_rxwrite_data_TLAST(axis_tcp2rxbuffer_tlast),
- `endif
- // tx read commands
- .m_axis_txread_cmd_TVALID(m_axis_read_cmd[ddrPortNetworkTx].valid),
- .m_axis_txread_cmd_TREADY(m_axis_read_cmd[ddrPortNetworkTx].ready),
- .m_axis_txread_cmd_TDATA(axis_read_cmd_data[ddrPortNetworkTx]),
- //tx write commands
- .m_axis_txwrite_cmd_TVALID(m_axis_write_cmd[ddrPortNetworkTx].valid),
- .m_axis_txwrite_cmd_TREADY(m_axis_write_cmd[ddrPortNetworkTx].ready),
- .m_axis_txwrite_cmd_TDATA(axis_write_cmd_data[ddrPortNetworkTx]),
- // tx write status
- .s_axis_txwrite_sts_TVALID(s_axis_write_sts[ddrPortNetworkTx].valid),
- .s_axis_txwrite_sts_TREADY(s_axis_write_sts[ddrPortNetworkTx].ready),
- .s_axis_txwrite_sts_TDATA(s_axis_write_sts[ddrPortNetworkTx].data),
- // tx read path
- .s_axis_txread_data_TVALID(axis_txread_data.valid),
- .s_axis_txread_data_TREADY(axis_txread_data.ready),
- .s_axis_txread_data_TDATA(axis_txread_data.data),
- .s_axis_txread_data_TKEEP(axis_txread_data.keep),
- .s_axis_txread_data_TLAST(axis_txread_data.last),
- // tx write path
- .m_axis_txwrite_data_TVALID(axis_txwrite_data.valid),
- .m_axis_txwrite_data_TREADY(axis_txwrite_data.ready),
- .m_axis_txwrite_data_TDATA(axis_txwrite_data.data),
- .m_axis_txwrite_data_TKEEP(axis_txwrite_data.keep),
- .m_axis_txwrite_data_TLAST(axis_txwrite_data.last),
- /// SmartCAM I/F ///
- .m_axis_session_upd_req_TVALID(upd_req_TVALID),
- .m_axis_session_upd_req_TREADY(upd_req_TREADY),
- .m_axis_session_upd_req_TDATA(upd_req_TDATA),
- 
- .s_axis_session_upd_rsp_TVALID(upd_rsp_TVALID),
- .s_axis_session_upd_rsp_TREADY(upd_rsp_TREADY),
- .s_axis_session_upd_rsp_TDATA(upd_rsp_TDATA),
- 
- .m_axis_session_lup_req_TVALID(lup_req_TVALID),
- .m_axis_session_lup_req_TREADY(lup_req_TREADY),
- .m_axis_session_lup_req_TDATA(lup_req_TDATA),
- .s_axis_session_lup_rsp_TVALID(lup_rsp_TVALID),
- .s_axis_session_lup_rsp_TREADY(lup_rsp_TREADY),
- .s_axis_session_lup_rsp_TDATA(lup_rsp_TDATA),
- 
- /* Application Interface */
- // listen&close port
- /*.s_axis_listen_port_req_TVALID(s_axis_listen_port.valid),
- .s_axis_listen_port_req_TREADY(s_axis_listen_port.ready),
- .s_axis_listen_port_req_TDATA(s_axis_listen_port.data),
- .m_axis_listen_port_rsp_TVALID(m_axis_listen_port_status.valid),
- .m_axis_listen_port_rsp_TREADY(m_axis_listen_port_status.ready),
- .m_axis_listen_port_rsp_TDATA(m_axis_listen_port_status.data),
- 
- // notification & read request
- .m_axis_notification_TVALID(m_axis_notifications.valid),
- .m_axis_notification_TREADY(m_axis_notifications.ready),
- .m_axis_notification_TDATA(m_axis_notifications.data),
- .s_axis_rx_data_req_TVALID(s_axis_read_package.valid),
- .s_axis_rx_data_req_TREADY(s_axis_read_package.ready),
- .s_axis_rx_data_req_TDATA(s_axis_read_package.data),
- 
- // open&close connection
- .s_axis_open_conn_req_TVALID(s_axis_open_connection.valid),
- .s_axis_open_conn_req_TREADY(s_axis_open_connection.ready),
- .s_axis_open_conn_req_TDATA(s_axis_open_connection.data),
- .m_axis_open_conn_rsp_TVALID(m_axis_open_status.valid),
- .m_axis_open_conn_rsp_TREADY(m_axis_open_status.ready),
- .m_axis_open_conn_rsp_TDATA(m_axis_open_status.data),
- .s_axis_close_conn_req_TVALID(s_axis_close_connection.valid),
- .s_axis_close_conn_req_TREADY(s_axis_close_connection.ready),
- .s_axis_close_conn_req_TDATA(s_axis_close_connection.data),
- 
- // rx data
- .m_axis_rx_data_rsp_metadata_TVALID(m_axis_rx_metadata.valid),
- .m_axis_rx_data_rsp_metadata_TREADY(m_axis_rx_metadata.ready),
- .m_axis_rx_data_rsp_metadata_TDATA(m_axis_rx_metadata.data),
- .m_axis_rx_data_rsp_TVALID(m_axis_rx_data.valid),
- .m_axis_rx_data_rsp_TREADY(m_axis_rx_data.ready),
- .m_axis_rx_data_rsp_TDATA(m_axis_rx_data.data),
- .m_axis_rx_data_rsp_TKEEP(m_axis_rx_data.keep),
- .m_axis_rx_data_rsp_TLAST(m_axis_rx_data.last),
- 
- // tx data
- .s_axis_tx_data_req_metadata_TVALID(s_axis_tx_metadata.valid),
- .s_axis_tx_data_req_metadata_TREADY(s_axis_tx_metadata.ready),
- .s_axis_tx_data_req_metadata_TDATA(s_axis_tx_metadata.data),
- .s_axis_tx_data_req_TVALID(s_axis_tx_data.valid),
- .s_axis_tx_data_req_TREADY(s_axis_tx_data.ready),
- .s_axis_tx_data_req_TDATA(s_axis_tx_data.data),
- .s_axis_tx_data_req_TKEEP(s_axis_tx_data.keep),
- .s_axis_tx_data_req_TLAST(s_axis_tx_data.last),
- .m_axis_tx_data_rsp_TVALID(m_axis_tx_status.valid),
- .m_axis_tx_data_rsp_TREADY(m_axis_tx_status.ready),
- .m_axis_tx_data_rsp_TDATA(m_axis_tx_status.data),
- 
- .myIpAddress_V(toe_ip_address),
- .regSessionCount_V(regSessionCount_V),
- .regSessionCount_V_ap_vld(regSessionCount_V_ap_vld),
- `ifdef RX_DDR_BYPASS
- //for external RX Buffer
- .axis_data_count_V(rx_buffer_data_count),
- .axis_max_data_count_V(32'd2048),
- `endif
- .aclk(net_clk),                                                        // input aclk
- .aresetn(net_aresetn)                                                   // input aresetn
- );
- 
- `ifdef RX_DDR_BYPASS
- //RX BUFFER FIFO
- axis_data_fifo_64_d2048 rx_buffer_fifo (
-   .s_axis_aresetn(net_aresetn),          // input wire s_axis_aresetn
-   .s_axis_aclk(net_clk),                // input wire s_axis_aclk
-   .s_axis_tvalid(axis_tcp2rxbuffer_tvalid),
-   .s_axis_tready(axis_tcp2rxbuffer_tready),
-   .s_axis_tdata(axis_tcp2rxbuffer_tdata),
-   .s_axis_tkeep(axis_tcp2rxbuffer_tkeep),
-   .s_axis_tlast(axis_tcp2rxbuffer_tlast),
-   .m_axis_tvalid(axis_rxbuffer2app_tvalid),
-   .m_axis_tready(axis_rxbuffer2app_tready),
-   .m_axis_tdata(axis_rxbuffer2app_tdata),
-   .m_axis_tkeep(axis_rxbuffer2app_tkeep),
-   .m_axis_tlast(axis_rxbuffer2app_tlast),
-   .axis_data_count(rx_buffer_data_count[11:0])
- );
- assign rx_buffer_data_count[31:12] = 20'h0;
- `endif
- 
- SmartCamCtl SmartCamCtl_inst
- (
- .clk(net_clk),
- .rst(~net_aresetn),
- .led0(),//(sc_led0),
- .led1(),//(sc_led1),
- .cam_ready(),//(cam_ready),
- 
- .lup_req_valid(lup_req_TVALID),
- .lup_req_ready(lup_req_TREADY),
- .lup_req_din(lup_req_TDATA),
- 
- .lup_rsp_valid(lup_rsp_TVALID),
- .lup_rsp_ready(lup_rsp_TREADY),
- .lup_rsp_dout(lup_rsp_TDATA),
- 
- .upd_req_valid(upd_req_TVALID),
- .upd_req_ready(upd_req_TREADY),
- .upd_req_din(upd_req_TDATA),
- 
- .upd_rsp_valid(upd_rsp_TVALID),
- .upd_rsp_ready(upd_rsp_TREADY),
- .upd_rsp_dout(upd_rsp_TDATA),
- 
- .debug()
- );*/
-
 /*
  * UDP/IP
  */
@@ -585,97 +335,6 @@ udp_stack #(
       .listen_port(16'h1389)
       
 );
-/*axis_meta #(.WIDTH(48))         axis_ip_to_udp_meta();
-axis_meta #(.WIDTH(48))         axis_udp_to_ip_meta();
-
-axi_stream #(.WIDTH(WIDTH))       axis_ip_to_udp_data();
-axi_stream #(.WIDTH(WIDTH))       axis_udp_to_ip_data();
-
-/*axis_meta #(.WIDTH(176))        s_axis_udp_metadata();
-axis_meta #(.WIDTH(176))        m_axis_udp_metadata();
-
-axi_stream #(.WIDTH(WIDTH))      s_axis_udp_data();
-axi_stream #(.WIDTH(WIDTH))      m_axis_udp_data();*/
- 
- 
-/*ipv4_ip ipv4_inst (
-   .local_ipv4_address_V(local_ip_address[31:0]),    // input wire [31 : 0] local_ipv4_address_V
-   .protocol_V(8'h11), //UDP_PROTOCOL
-   //RX
-   .s_axis_rx_data_TVALID(axis_udp_slice_to_udp.valid),  // input wire s_axis_rx_data_TVALID
-   .s_axis_rx_data_TREADY(axis_udp_slice_to_udp.ready),  // output wire s_axis_rx_data_TREADY
-   .s_axis_rx_data_TDATA(axis_udp_slice_to_udp.data),    // input wire [63 : 0] s_axis_rx_data_TDATA
-   .s_axis_rx_data_TKEEP(axis_udp_slice_to_udp.keep),    // input wire [7 : 0] s_axis_rx_data_TKEEP
-   .s_axis_rx_data_TLAST(axis_udp_slice_to_udp.last),    // input wire [0 : 0] s_axis_rx_data_TLAST
-   .m_axis_rx_meta_TVALID(axis_ip_to_udp_meta.valid),  // output wire m_axis_rx_meta_TVALID
-   .m_axis_rx_meta_TREADY(axis_ip_to_udp_meta.ready),  // input wire m_axis_rx_meta_TREADY
-   .m_axis_rx_meta_TDATA(axis_ip_to_udp_meta.data),    // output wire [47 : 0] m_axis_rx_meta_TDATA
-   .m_axis_rx_data_TVALID(axis_ip_to_udp_data.valid),  // output wire m_axis_rx_data_TVALID
-   .m_axis_rx_data_TREADY(axis_ip_to_udp_data.ready),  // input wire m_axis_rx_data_TREADY
-   .m_axis_rx_data_TDATA(axis_ip_to_udp_data.data),    // output wire [63 : 0] m_axis_rx_data_TDATA
-   .m_axis_rx_data_TKEEP(axis_ip_to_udp_data.keep),    // output wire [7 : 0] m_axis_rx_data_TKEEP
-   .m_axis_rx_data_TLAST(axis_ip_to_udp_data.last),    // output wire [0 : 0] m_axis_rx_data_TLAST
-   //TX
-   .s_axis_tx_meta_TVALID(axis_udp_to_ip_meta.valid),  // input wire s_axis_tx_meta_TVALID
-   .s_axis_tx_meta_TREADY(axis_udp_to_ip_meta.ready),  // output wire s_axis_tx_meta_TREADY
-   .s_axis_tx_meta_TDATA(axis_udp_to_ip_meta.data),    // input wire [47 : 0] s_axis_tx_meta_TDATA
-   .s_axis_tx_data_TVALID(axis_udp_to_ip_data.valid),  // input wire s_axis_tx_data_TVALID
-   .s_axis_tx_data_TREADY(axis_udp_to_ip_data.ready),  // output wire s_axis_tx_data_TREADY
-   .s_axis_tx_data_TDATA(axis_udp_to_ip_data.data),    // input wire [63 : 0] s_axis_tx_data_TDATA
-   .s_axis_tx_data_TKEEP(axis_udp_to_ip_data.keep),    // input wire [7 : 0] s_axis_tx_data_TKEEP
-   .s_axis_tx_data_TLAST(axis_udp_to_ip_data.last),    // input wire [0 : 0] s_axis_tx_data_TLAST
-   .m_axis_tx_data_TVALID(axis_udp_to_udp_slice.valid),  // output wire m_axis_tx_data_TVALID
-   .m_axis_tx_data_TREADY(axis_udp_to_udp_slice.ready),  // input wire m_axis_tx_data_TREADY
-   .m_axis_tx_data_TDATA(axis_udp_to_udp_slice.data),    // output wire [63 : 0] m_axis_tx_data_TDATA
-   .m_axis_tx_data_TKEEP(axis_udp_to_udp_slice.keep),    // output wire [7 : 0] m_axis_tx_data_TKEEP
-   .m_axis_tx_data_TLAST(axis_udp_to_udp_slice.last),    // output wire [0 : 0] m_axis_tx_data_TLAST
- 
-   .aclk(net_clk),                                    // input wire aclk
-   .aresetn(net_aresetn)                              // input wire aresetn
- );
- 
- udp_ip udp_inst (
-   //.reg_ip_address_V(udp_ip_address),                  // input wire [127 : 0] reg_ip_address_V
-   .reg_listen_port_V(16'h8000),
-   //RX
-   .s_axis_rx_meta_TVALID(axis_ip_to_udp_meta.valid),
-   .s_axis_rx_meta_TREADY(axis_ip_to_udp_meta.ready),
-   .s_axis_rx_meta_TDATA(axis_ip_to_udp_meta.data),
-   .s_axis_rx_data_TVALID(axis_ip_to_udp_data.valid),        // input wire s_axis_rx_data_TVALID
-   .s_axis_rx_data_TREADY(axis_ip_to_udp_data.ready),        // output wire s_axis_rx_data_TREADY
-   .s_axis_rx_data_TDATA(axis_ip_to_udp_data.data),          // input wire [63 : 0] s_axis_rx_data_TDATA
-   .s_axis_rx_data_TKEEP(axis_ip_to_udp_data.keep),          // input wire [7 : 0] s_axis_rx_data_TKEEP
-   .s_axis_rx_data_TLAST(axis_ip_to_udp_data.last),          // input wire [0 : 0] s_axis_rx_data_TLAST
-   .m_axis_rx_meta_TVALID(m_axis_udp_rx_metadata.valid),        // output wire m_axis_rx_meta_TVALID
-   .m_axis_rx_meta_TREADY(m_axis_udp_rx_metadata.ready),        // input wire m_axis_rx_meta_TREADY
-   .m_axis_rx_meta_TDATA(m_axis_udp_rx_metadata.data),          // output wire [159 : 0] m_axis_rx_meta_TDATA
-   .m_axis_rx_data_TVALID(m_axis_udp_rx_data.valid),        // output wire m_axis_rx_data_TVALID
-   .m_axis_rx_data_TREADY(m_axis_udp_rx_data.ready),        // input wire m_axis_rx_data_TREADY
-   .m_axis_rx_data_TDATA(m_axis_udp_rx_data.data),          // output wire [63 : 0] m_axis_rx_data_TDATA
-   .m_axis_rx_data_TKEEP(m_axis_udp_rx_data.keep),          // output wire [7 : 0] m_axis_rx_data_TKEEP
-   .m_axis_rx_data_TLAST(m_axis_udp_rx_data.last),          // output wire [0 : 0] m_axis_rx_data_TLAST
-   //TX
-   .s_axis_tx_meta_TVALID(s_axis_udp_tx_metadata.valid),
-   .s_axis_tx_meta_TREADY(s_axis_udp_tx_metadata.ready),
-   .s_axis_tx_meta_TDATA(s_axis_udp_tx_metadata.data),
-   .s_axis_tx_data_TVALID(s_axis_udp_tx_data.valid),        // input wire s_axis_tx_data_TVALID
-   .s_axis_tx_data_TREADY(s_axis_udp_tx_data.ready),        // output wire s_axis_tx_data_TREADY
-   .s_axis_tx_data_TDATA(s_axis_udp_tx_data.data),          // input wire [63 : 0] s_axis_tx_data_TDATA
-   .s_axis_tx_data_TKEEP(s_axis_udp_tx_data.keep),          // input wire [7 : 0] s_axis_tx_data_TKEEP
-   .s_axis_tx_data_TLAST(s_axis_udp_tx_data.last),          // input wire [0 : 0] s_axis_tx_data_TLAST
-   .m_axis_tx_meta_TVALID(axis_udp_to_ip_meta.valid),        // input wire m_axis_tx_meta_TVALID
-   .m_axis_tx_meta_TREADY(axis_udp_to_ip_meta.ready),        // output wire m_axis_tx_meta_TREADY
-   .m_axis_tx_meta_TDATA(axis_udp_to_ip_meta.data),          // input wire [159 : 0] m_axis_tx_meta_TDATA
-   .m_axis_tx_data_TVALID(axis_udp_to_ip_data.valid),        // output wire m_axis_tx_data_TVALID
-   .m_axis_tx_data_TREADY(axis_udp_to_ip_data.ready),        // input wire m_axis_tx_data_TREADY
-   .m_axis_tx_data_TDATA(axis_udp_to_ip_data.data),          // output wire [63 : 0] m_axis_tx_data_TDATA
-   .m_axis_tx_data_TKEEP(axis_udp_to_ip_data.keep),          // output wire [7 : 0] m_axis_tx_data_TKEEP
-   .m_axis_tx_data_TLAST(axis_udp_to_ip_data.last),          // output wire [0 : 0] m_axis_tx_data_TLAST
- 
-   .aclk(net_clk),                                          // input wire aclk
-   .aresetn(net_aresetn)                                    // input wire aresetn
- );*/
-
 
 /*
  * Test Dropper
diff --git a/hdl/common/tcp_stack.sv b/hdl/common/tcp_stack.sv
index 436c9a7..97db2f4 100755
--- a/hdl/common/tcp_stack.sv
+++ b/hdl/common/tcp_stack.sv
@@ -29,8 +29,6 @@
 
 `include "davos_types.svh"
 
-`define RX_DDR_BYPASS 1
-
 module tcp_stack #(
     parameter TCP_EN = 1,
     parameter WIDTH = 64,
@@ -130,39 +128,27 @@ axis_meta #(.WIDTH(16))     axis_rx_metadata();
 axis_meta #(.WIDTH(32))     axis_tx_metadata();
 
 
-//TODO fix generate
-//generate
-//if (RX_DDR_BYPASS_EN == 1) begin
-`ifdef RX_DDR_BYPASS
-    //RX Buffer bypass data streams
-    axi_stream #(.WIDTH(WIDTH))     axis_rxbuffer2app();
-    axi_stream #(.WIDTH(WIDTH))     axis_tcp2rxbuffer();
-
-    wire[31:0] rx_buffer_data_count;
-    reg[15:0] rx_buffer_data_count_reg;
-    reg[15:0] rx_buffer_data_count_reg2;
-`else
-//end
-//else begin
-    assign s_axis_mem_read_sts[ddrPortNetworkRx].ready = 1'b1;
-`endif
-//end
-//endgenerate
+wire[31:0] rx_buffer_data_count;
+reg[15:0] rx_buffer_data_count_reg;
+reg[15:0] rx_buffer_data_count_reg2;
+axi_stream #(.WIDTH(WIDTH))     axis_rxbuffer2app();
+axi_stream #(.WIDTH(WIDTH))     axis_tcp2rxbuffer();
 
+if (RX_DDR_BYPASS_EN == 0) begin
+    assign s_axis_mem_read_sts[ddrPortNetworkRx].ready = 1'b1;
+end
 assign s_axis_mem_read_sts[ddrPortNetworkTx].ready = 1'b1;
 
 
 //hack for now //TODO
 wire[71:0] axis_write_cmd_data [1:0];
 wire[71:0] axis_read_cmd_data [1:0];
-//generate
 if (RX_DDR_BYPASS_EN == 0) begin
     assign m_axis_mem_write_cmd[ddrPortNetworkRx].address = {32'h0000_0000, axis_write_cmd_data[ddrPortNetworkRx][63:32]};
     assign m_axis_mem_write_cmd[ddrPortNetworkRx].length = {9'h00, axis_write_cmd_data[ddrPortNetworkRx][22:0]};
     assign m_axis_mem_read_cmd[ddrPortNetworkRx].address = {32'h0000_0000, axis_read_cmd_data[ddrPortNetworkRx][63:32]};
     assign m_axis_mem_read_cmd[ddrPortNetworkRx].length = {9'h00, axis_read_cmd_data[ddrPortNetworkRx][22:0]};
 end
-//endgenerate
 assign m_axis_mem_write_cmd[ddrPortNetworkTx].address = {32'h0000_0000, axis_write_cmd_data[ddrPortNetworkTx][63:32]};
 assign m_axis_mem_write_cmd[ddrPortNetworkTx].length = {9'h00, axis_write_cmd_data[ddrPortNetworkTx][22:0]};
 assign m_axis_mem_read_cmd[ddrPortNetworkTx].address = {32'h0000_0000, axis_read_cmd_data[ddrPortNetworkTx][63:32]};
@@ -170,6 +156,8 @@ assign m_axis_mem_read_cmd[ddrPortNetworkTx].length = {9'h00, axis_read_cmd_data
 
 
 
+//TOE Module with RX_DDR_BYPASS disabled
+if (RX_DDR_BYPASS_EN == 0) begin
 toe_ip toe_inst (
 // Data output
 .m_axis_tcp_data_TVALID(m_axis_tx_data.valid),
@@ -183,7 +171,7 @@ toe_ip toe_inst (
 .s_axis_tcp_data_TDATA(s_axis_rx_data.data),
 .s_axis_tcp_data_TKEEP(s_axis_rx_data.keep),
 .s_axis_tcp_data_TLAST(s_axis_rx_data.last),
-`ifndef RX_DDR_BYPASS
+
 // rx read commands
 .m_axis_rxread_cmd_V_TVALID(m_axis_mem_read_cmd[ddrPortNetworkRx].valid),
 .m_axis_rxread_cmd_V_TREADY(m_axis_mem_read_cmd[ddrPortNetworkRx].ready),
@@ -208,7 +196,122 @@ toe_ip toe_inst (
 .m_axis_rxwrite_data_TDATA(axis_rxwrite_data.data),
 .m_axis_rxwrite_data_TKEEP(axis_rxwrite_data.keep),
 .m_axis_rxwrite_data_TLAST(axis_rxwrite_data.last),
-`else
+
+// tx read commands
+.m_axis_txread_cmd_V_TVALID(m_axis_mem_read_cmd[ddrPortNetworkTx].valid),
+.m_axis_txread_cmd_V_TREADY(m_axis_mem_read_cmd[ddrPortNetworkTx].ready),
+.m_axis_txread_cmd_V_TDATA(axis_read_cmd_data[ddrPortNetworkTx]),
+//tx write commands
+.m_axis_txwrite_cmd_V_TVALID(m_axis_mem_write_cmd[ddrPortNetworkTx].valid),
+.m_axis_txwrite_cmd_V_TREADY(m_axis_mem_write_cmd[ddrPortNetworkTx].ready),
+.m_axis_txwrite_cmd_V_TDATA(axis_write_cmd_data[ddrPortNetworkTx]),
+// tx write status
+.s_axis_txwrite_sts_V_TVALID(s_axis_mem_write_sts[ddrPortNetworkTx].valid),
+.s_axis_txwrite_sts_V_TREADY(s_axis_mem_write_sts[ddrPortNetworkTx].ready),
+.s_axis_txwrite_sts_V_TDATA(s_axis_mem_write_sts[ddrPortNetworkTx].data),
+// tx read path
+.s_axis_txread_data_TVALID(axis_txread_data.valid),
+.s_axis_txread_data_TREADY(axis_txread_data.ready),
+.s_axis_txread_data_TDATA(axis_txread_data.data),
+.s_axis_txread_data_TKEEP(axis_txread_data.keep),
+.s_axis_txread_data_TLAST(axis_txread_data.last),
+// tx write path
+.m_axis_txwrite_data_TVALID(axis_txwrite_data.valid),
+.m_axis_txwrite_data_TREADY(axis_txwrite_data.ready),
+.m_axis_txwrite_data_TDATA(axis_txwrite_data.data),
+.m_axis_txwrite_data_TKEEP(axis_txwrite_data.keep),
+.m_axis_txwrite_data_TLAST(axis_txwrite_data.last),
+/// SmartCAM I/F ///
+.m_axis_session_upd_req_V_TVALID(axis_ht_upd_req.valid),
+.m_axis_session_upd_req_V_TREADY(axis_ht_upd_req.ready),
+.m_axis_session_upd_req_V_TDATA(axis_ht_upd_req.data),
+
+.s_axis_session_upd_rsp_V_TVALID(axis_ht_upd_rsp.valid),
+.s_axis_session_upd_rsp_V_TREADY(axis_ht_upd_rsp.ready),
+.s_axis_session_upd_rsp_V_TDATA(axis_ht_upd_rsp.data),
+
+.m_axis_session_lup_req_V_TVALID(axis_ht_lup_req.valid),
+.m_axis_session_lup_req_V_TREADY(axis_ht_lup_req.ready),
+.m_axis_session_lup_req_V_TDATA(axis_ht_lup_req.data),
+.s_axis_session_lup_rsp_V_TVALID(axis_ht_lup_rsp.valid),
+.s_axis_session_lup_rsp_V_TREADY(axis_ht_lup_rsp.ready),
+.s_axis_session_lup_rsp_V_TDATA(axis_ht_lup_rsp.data),
+
+/* Application Interface */
+// listen&close port
+.s_axis_listen_port_req_V_V_TVALID(axis_listen_port.valid),
+.s_axis_listen_port_req_V_V_TREADY(axis_listen_port.ready),
+.s_axis_listen_port_req_V_V_TDATA(axis_listen_port.data),
+.m_axis_listen_port_rsp_V_TVALID(axis_listen_port_status.valid),
+.m_axis_listen_port_rsp_V_TREADY(axis_listen_port_status.ready),
+.m_axis_listen_port_rsp_V_TDATA(axis_listen_port_status.data),
+
+// notification & read request
+.m_axis_notification_V_TVALID(axis_notifications.valid),
+.m_axis_notification_V_TREADY(axis_notifications.ready),
+.m_axis_notification_V_TDATA(axis_notifications.data),
+.s_axis_rx_data_req_V_TVALID(axis_read_package.valid),
+.s_axis_rx_data_req_V_TREADY(axis_read_package.ready),
+.s_axis_rx_data_req_V_TDATA(axis_read_package.data),
+
+// open&close connection
+.s_axis_open_conn_req_V_TVALID(axis_open_connection.valid),
+.s_axis_open_conn_req_V_TREADY(axis_open_connection.ready),
+.s_axis_open_conn_req_V_TDATA(axis_open_connection.data),
+.m_axis_open_conn_rsp_V_TVALID(axis_open_status.valid),
+.m_axis_open_conn_rsp_V_TREADY(axis_open_status.ready),
+.m_axis_open_conn_rsp_V_TDATA(axis_open_status.data),
+.s_axis_close_conn_req_V_V_TVALID(axis_close_connection.valid),
+.s_axis_close_conn_req_V_V_TREADY(axis_close_connection.ready),
+.s_axis_close_conn_req_V_V_TDATA(axis_close_connection.data),
+
+// rx data
+.m_axis_rx_data_rsp_metadata_V_V_TVALID(axis_rx_metadata.valid),
+.m_axis_rx_data_rsp_metadata_V_V_TREADY(axis_rx_metadata.ready),
+.m_axis_rx_data_rsp_metadata_V_V_TDATA(axis_rx_metadata.data),
+.m_axis_rx_data_rsp_TVALID(m_axis_rx_data.valid),
+.m_axis_rx_data_rsp_TREADY(m_axis_rx_data.ready),
+.m_axis_rx_data_rsp_TDATA(m_axis_rx_data.data),
+.m_axis_rx_data_rsp_TKEEP(m_axis_rx_data.keep),
+.m_axis_rx_data_rsp_TLAST(m_axis_rx_data.last),
+
+// tx data
+.s_axis_tx_data_req_metadata_V_TVALID(axis_tx_metadata.valid),
+.s_axis_tx_data_req_metadata_V_TREADY(axis_tx_metadata.ready),
+.s_axis_tx_data_req_metadata_V_TDATA(axis_tx_metadata.data),
+.s_axis_tx_data_req_TVALID(s_axis_tx_data.valid),
+.s_axis_tx_data_req_TREADY(s_axis_tx_data.ready),
+.s_axis_tx_data_req_TDATA(s_axis_tx_data.data),
+.s_axis_tx_data_req_TKEEP(s_axis_tx_data.keep),
+.s_axis_tx_data_req_TLAST(s_axis_tx_data.last),
+.m_axis_tx_data_rsp_V_TVALID(m_axis_tx_status.valid),
+.m_axis_tx_data_rsp_V_TREADY(m_axis_tx_status.ready),
+.m_axis_tx_data_rsp_V_TDATA(m_axis_tx_status.data),
+
+.myIpAddress_V(local_ip_address),
+.regSessionCount_V(session_count_data),
+.regSessionCount_V_ap_vld(session_count_valid),
+.ap_clk(net_clk),                                                        // input aclk
+.ap_rst_n(net_aresetn)                                                   // input aresetn
+);
+end
+else begin //RX_DDR_BYPASS_EN == 1
+
+//TOE Module with RX_DDR_BYPASS enabled
+toe_ip toe_inst (
+// Data output
+.m_axis_tcp_data_TVALID(m_axis_tx_data.valid),
+.m_axis_tcp_data_TREADY(m_axis_tx_data.ready),
+.m_axis_tcp_data_TDATA(m_axis_tx_data.data), // output [63 : 0] AXI_M_Stream_TDATA
+.m_axis_tcp_data_TKEEP(m_axis_tx_data.keep),
+.m_axis_tcp_data_TLAST(m_axis_tx_data.last),
+// Data input
+.s_axis_tcp_data_TVALID(s_axis_rx_data.valid),
+.s_axis_tcp_data_TREADY(s_axis_rx_data.ready),
+.s_axis_tcp_data_TDATA(s_axis_rx_data.data),
+.s_axis_tcp_data_TKEEP(s_axis_rx_data.keep),
+.s_axis_tcp_data_TLAST(s_axis_rx_data.last),
+
 // rx buffer read path
 .s_axis_rxread_data_TVALID(axis_rxbuffer2app.valid),
 .s_axis_rxread_data_TREADY(axis_rxbuffer2app.ready),
@@ -221,7 +324,7 @@ toe_ip toe_inst (
 .m_axis_rxwrite_data_TDATA(axis_tcp2rxbuffer.data),
 .m_axis_rxwrite_data_TKEEP(axis_tcp2rxbuffer.keep),
 .m_axis_rxwrite_data_TLAST(axis_tcp2rxbuffer.last),
-`endif
+
 // tx read commands
 .m_axis_txread_cmd_V_TVALID(m_axis_mem_read_cmd[ddrPortNetworkTx].valid),
 .m_axis_txread_cmd_V_TREADY(m_axis_mem_read_cmd[ddrPortNetworkTx].ready),
@@ -316,16 +419,18 @@ toe_ip toe_inst (
 .myIpAddress_V(local_ip_address),
 .regSessionCount_V(session_count_data),
 .regSessionCount_V_ap_vld(session_count_valid),
-`ifdef RX_DDR_BYPASS
 //for external RX Buffer
 .axis_data_count_V(rx_buffer_data_count_reg2),
 .axis_max_data_count_V(16'd1024),
-`endif
+
 .ap_clk(net_clk),                                                        // input aclk
 .ap_rst_n(net_aresetn)                                                   // input aresetn
 );
+end //RX_DDR_BYPASS_EN
 
-`ifdef RX_DDR_BYPASS
+
+
+if (RX_DDR_BYPASS_EN == 1) begin
 //RX BUFFER FIFO
 if (WIDTH==64) begin
 axis_data_fifo_64_d1024 rx_buffer_fifo (
@@ -405,7 +510,7 @@ always @(posedge net_clk) begin
     rx_buffer_data_count_reg <= rx_buffer_data_count[15:0];
     rx_buffer_data_count_reg2 <= rx_buffer_data_count_reg;
 end
-`endif
+end //RX_DDR_BYPASS_EN
 
 /*SmartCamCtl SmartCamCtl_inst
 (
@@ -458,7 +563,7 @@ hash_table_ip hash_table_inst (
 
 if (WIDTH==64) begin
 //TCP Data Path
-`ifndef RX_DDR_BYPASS
+if (RX_DDR_BYPASS_EN == 0) begin
 axis_512_to_64_converter tcp_rxread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
@@ -490,7 +595,7 @@ axis_64_to_512_converter tcp_rxwrite_data_converter (
   .m_axis_tlast(m_axis_mem_write_data[ddrPortNetworkRx].last),    // output wire m_axis_tlast
   .m_axis_tdest()    // output wire m_axis_tlast
 );
-`endif
+end
 axis_512_to_64_converter tcp_txread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
@@ -525,7 +630,7 @@ axis_64_to_512_converter tcp_txwrite_data_converter (
 end
 if (WIDTH==128) begin
 //TCP Data Path
-`ifndef RX_DDR_BYPASS
+if (RX_DDR_BYPASS_EN == 0) begin
 axis_512_to_128_converter tcp_rxread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
@@ -557,7 +662,7 @@ axis_128_to_512_converter tcp_rxwrite_data_converter (
   .m_axis_tlast(m_axis_mem_write_data[ddrPortNetworkRx].last),    // output wire m_axis_tlast
   .m_axis_tdest()    // output wire m_axis_tlast
 );
-`endif
+end
 axis_512_to_128_converter tcp_txread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
@@ -592,7 +697,7 @@ axis_128_to_512_converter tcp_txwrite_data_converter (
 end
 if (WIDTH==256) begin
 //TCP Data Path
-`ifndef RX_DDR_BYPASS
+if (RX_DDR_BYPASS_EN == 0) begin
 axis_512_to_256_converter tcp_rxread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
@@ -624,7 +729,7 @@ axis_256_to_512_converter tcp_rxwrite_data_converter (
   .m_axis_tlast(m_axis_mem_write_data[ddrPortNetworkRx].last),    // output wire m_axis_tlast
   .m_axis_tdest()    // output wire m_axis_tlast
 );
-`endif
+end
 axis_512_to_256_converter tcp_txread_data_converter (
   .aclk(net_clk),                    // input wire aclk
   .aresetn(net_aresetn),              // input wire aresetn
-- 
GitLab