diff --git a/frontend/frontend_parser.sv b/frontend/frontend_parser.sv deleted file mode 100644 index 563277b..0000000 --- a/frontend/frontend_parser.sv +++ /dev/null @@ -1,470 +0,0 @@ -`include "packet_defs.vh" -`include "state_defs.vh" -`include "noc_defs.vh" -`include "soc_defs.vh" - -module frontend_parser( - input clk - ,input rst - - // I/O for the MAC - ,input mac_engine_rx_val - ,input [`MAC_INTERFACE_W-1:0] mac_engine_rx_data - ,output logic engine_mac_rx_rdy - ,input mac_engine_rx_last - ,input [`MAC_PADBYTES_W-1:0] mac_engine_rx_padbytes - - ,output logic engine_mac_tx_val - ,input mac_engine_tx_rdy - ,output logic [`MAC_INTERFACE_W-1:0] engine_mac_tx_data - ,output logic engine_mac_tx_last - ,output logic [`MAC_PADBYTES_W-1:0] engine_mac_tx_padbytes - - // I/O for the NoC - ,output logic tx_parser_noc0_val - ,output logic [`NOC_DATA_WIDTH-1:0] tx_parser_noc0_data - ,input noc0_tx_parser_rdy - - ,input noc0_tx_parser_val - ,input [`NOC_DATA_WIDTH-1:0] noc0_tx_parser_data - ,output tx_parser_noc0_rdy - - // I/O for the TCP engine - ,output parser_tcp_rx_hdr_val - ,input tcp_parser_rx_rdy - ,output [`IP_ADDR_W-1:0] parser_tcp_rx_src_ip - ,output [`IP_ADDR_W-1:0] parser_tcp_rx_dst_ip - ,output [`TCP_HDR_W-1:0] parser_tcp_rx_tcp_hdr - - ,output parser_tcp_rx_payload_val - ,output [`PAYLOAD_ENTRY_ADDR_W-1:0] parser_tcp_rx_payload_addr - ,output [`PAYLOAD_ENTRY_LEN_W-1:0] parser_tcp_rx_payload_len - - ,input tcp_parser_tx_val - ,output parser_tcp_tx_rdy - ,input [`FLOW_ID_W-1:0] tcp_parser_tx_flowid - ,input [`IP_ADDR_W-1:0] tcp_parser_tx_src_ip - ,input [`IP_ADDR_W-1:0] tcp_parser_tx_dst_ip - ,input [`TCP_HDR_W-1:0] tcp_parser_tx_tcp_hdr - ,input [`PAYLOAD_ENTRY_W-1:0] tcp_parser_tx_payload_entry - - ,input logic store_buf_tmp_buf_store_rx_rd_req_val - ,input logic [`PAYLOAD_ENTRY_ADDR_W-1:0] store_buf_tmp_buf_store_rx_rd_req_addr - ,output logic tmp_buf_store_store_buf_rx_rd_req_rdy - - ,output logic tmp_buf_store_store_buf_rx_rd_resp_val - ,output logic [`MAC_INTERFACE_W-1:0] tmp_buf_store_store_buf_rx_rd_resp_data - ,input logic store_buf_tmp_buf_store_rx_rd_resp_rdy - - ,input logic store_buf_tmp_buf_free_slab_rx_req_val - ,input logic [`RX_TMP_BUF_ADDR_W-1:0] store_buf_tmp_buf_free_slab_rx_req_addr - ,output logic tmp_buf_free_slab_store_buf_rx_req_rdy -); - - localparam els_p = `MAC_INTERFACE_W/`NOC_DATA_WIDTH; - localparam ETH_IP_Q_DATA_W = `MAC_INTERFACE_W + 1 + `MAC_PADBYTES_W; - - localparam fbits_rx = 4'b1000; - localparam fbits_tx = 4'b1001; - - logic payload_chksum_tx_hdr_val; - logic chksum_payload_tx_hdr_rdy; - logic [`IP_ADDR_W-1:0] payload_chksum_tx_src_ip; - logic [`IP_ADDR_W-1:0] payload_chksum_tx_dst_ip; - logic [`TOT_LEN_W-1:0] payload_chksum_tx_payload_len; - tcp_pkt_hdr payload_chksum_tx_tcp_hdr; - - logic payload_chksum_tx_data_val; - logic [`MAC_INTERFACE_W-1:0] payload_chksum_tx_data; - logic payload_chksum_tx_data_last; - logic [`MAC_PADBYTES_W-1:0] payload_chksum_tx_data_padbytes; - logic chksum_payload_tx_data_rdy; - - eth_hdr eth_format_ip_format_rx_eth_hdr; - logic eth_format_ip_format_rx_hdr_val; - logic ip_format_eth_format_rx_hdr_rdy; - - logic eth_format_q_rx_data_val; - logic [`MAC_INTERFACE_W-1:0] eth_format_q_rx_data; - logic eth_format_q_rx_data_last; - logic [`MAC_PADBYTES_W-1:0] eth_format_q_rx_data_padbytes; - logic q_eth_format_rx_data_rdy; - - logic eth_ip_q_wr_req; - logic [ETH_IP_Q_DATA_W-1:0] eth_ip_q_wr_data; - logic eth_ip_q_full; - - logic eth_ip_q_rd_req; - logic [ETH_IP_Q_DATA_W-1:0] eth_ip_q_rd_data; - logic eth_ip_q_empty; - - logic q_ip_format_rx_data_val; - logic [`MAC_INTERFACE_W-1:0] q_ip_format_rx_data; - logic q_ip_format_rx_data_last; - logic [`MAC_PADBYTES_W-1:0] q_ip_format_rx_data_padbytes; - logic ip_format_q_rx_data_rdy; - - logic ip_format_tcp_format_rx_hdr_val; - logic tcp_format_ip_format_rx_hdr_rdy; - ip_pkt_hdr ip_format_tcp_format_rx_ip_hdr; - - logic ip_format_tcp_format_rx_data_val; - logic tcp_format_ip_format_rx_data_rdy; - logic [`MAC_INTERFACE_W-1:0] ip_format_tcp_format_rx_data; - logic ip_format_tcp_format_rx_last; - logic [`MAC_PADBYTES_W-1:0] ip_format_tcp_format_rx_padbytes; - - logic tcp_format_payload_rx_hdr_val; - logic payload_tcp_format_rx_hdr_rdy; - logic [`IP_ADDR_W-1:0] tcp_format_payload_rx_src_ip; - logic [`IP_ADDR_W-1:0] tcp_format_payload_rx_dst_ip; - logic [`TOT_LEN_W-1:0] tcp_format_payload_rx_tcp_tot_len; - tcp_pkt_hdr tcp_format_payload_rx_tcp_hdr; - - logic tcp_format_payload_rx_data_val; - logic payload_tcp_format_rx_data_rdy; - logic [`MAC_INTERFACE_W-1:0] tcp_format_payload_rx_data; - logic tcp_format_payload_rx_data_last; - logic [`MAC_PADBYTES_W-1:0] tcp_format_payload_rx_data_padbytes; - - logic chksum_tcp_to_ipstream_tx_hdr_val; - logic tcp_to_ipstream_chksum_tx_hdr_rdy; - logic [`IP_ADDR_W-1:0] chksum_tcp_to_ipstream_tx_src_ip; - logic [`IP_ADDR_W-1:0] chksum_tcp_to_ipstream_tx_dst_ip; - logic [`TOT_LEN_W-1:0] chksum_tcp_to_ipstream_tx_tcp_len; - tcp_pkt_hdr chksum_tcp_to_ipstream_tx_tcp_hdr; - - logic tcp_to_ipstream_ip_to_ethstream_tx_hdr_val; - ip_pkt_hdr tcp_to_ipstream_ip_to_ethstream_tx_ip_hdr; - logic ip_to_ethstream_tcp_to_ipstream_tx_hdr_rdy; - - logic tcp_to_ipstream_ip_to_ethstream_tx_data_val; - logic [`MAC_INTERFACE_W-1:0] tcp_to_ipstream_ip_to_ethstream_tx_data; - logic tcp_to_ipstream_ip_to_ethstream_tx_data_last; - logic [`MAC_PADBYTES_W-1:0] tcp_to_ipstream_ip_to_ethstream_tx_data_padbytes; - logic ip_to_ethstream_tcp_to_ipstream_tx_data_rdy; - - logic ip_to_ethstream_eth_hdrtostream_tx_eth_hdr_val; - eth_hdr ip_to_ethstream_eth_hdrtostream_tx_eth_hdr; - logic eth_hdrtostream_ip_to_ethsteram_tx_eth_hdr_rdy; - - logic ip_to_ethstream_eth_hdrtostream_tx_data_val; - logic [`MAC_INTERFACE_W-1:0] ip_to_ethstream_eth_hdrtostream_tx_data; - logic ip_to_ethstream_eth_hdrtostream_tx_data_last; - logic [`MAC_PADBYTES_W-1:0] ip_to_ethstream_eth_hdrtostream_tx_data_padbytes; - logic eth_hdrtostream_ip_to_ethstream_tx_data_rdy; - - logic chksum_tcp_to_ipstream_tx_data_val; - logic tcp_to_ipstream_chksum_tx_data_rdy; - logic [`MAC_INTERFACE_W-1:0] chksum_tcp_to_ipstream_tx_data; - logic chksum_tcp_to_ipstream_tx_data_last; - logic [`MAC_PADBYTES_W-1:0] chksum_tcp_to_ipstream_tx_data_padbytes; - - payload_buf_entry parser_tcp_rx_payload_entry; - - - eth_frame_format rx_eth_format ( - .clk (clk) - ,.rst (rst) - - ,.src_eth_format_val (mac_engine_rx_val ) - ,.src_eth_format_data (mac_engine_rx_data ) - ,.src_eth_format_data_last (mac_engine_rx_last ) - ,.src_eth_format_data_padbytes (mac_engine_rx_padbytes ) - ,.eth_format_src_rdy (engine_mac_rx_rdy ) - - ,.eth_format_dst_eth_hdr (eth_format_ip_format_rx_eth_hdr ) - ,.eth_format_dst_hdr_val (eth_format_ip_format_rx_hdr_val ) - ,.dst_eth_format_hdr_rdy (ip_format_eth_format_rx_hdr_rdy ) - - ,.eth_format_dst_data_val (eth_format_q_rx_data_val ) - ,.eth_format_dst_data (eth_format_q_rx_data ) - ,.eth_format_dst_data_last (eth_format_q_rx_data_last ) - ,.eth_format_dst_data_padbytes (eth_format_q_rx_data_padbytes ) - ,.dst_eth_format_data_rdy (q_eth_format_rx_data_rdy ) - ); - - // fifo to relieve timing pressure - - assign eth_ip_q_wr_req = eth_format_q_rx_data_val & ~eth_ip_q_full; - assign eth_ip_q_wr_data = {eth_format_q_rx_data, - eth_format_q_rx_data_last, - eth_format_q_rx_data_padbytes}; - assign q_eth_format_rx_data_rdy = ~eth_ip_q_full; - - fifo_1r1w #( - .width_p (ETH_IP_Q_DATA_W) - ,.log2_els_p (4) - ) eth_ip_q ( - .clk (clk) - ,.rst (rst) - - ,.wr_req (eth_ip_q_wr_req ) - ,.wr_data (eth_ip_q_wr_data ) - ,.full (eth_ip_q_full ) - - ,.rd_req (eth_ip_q_rd_req ) - ,.rd_data (eth_ip_q_rd_data ) - ,.empty (eth_ip_q_empty ) - ); - - assign eth_ip_q_rd_req = ip_format_q_rx_data_rdy & ~eth_ip_q_empty; - assign {q_ip_format_rx_data, - q_ip_format_rx_data_last, - q_ip_format_rx_data_padbytes} = eth_ip_q_rd_data; - assign q_ip_format_rx_data_val = ~eth_ip_q_empty; - - assign ip_format_eth_format_rx_hdr_rdy = 1'b1; - ip_stream_format rx_ip_format ( - .clk (clk) - ,.rst (rst) - - // Data stream in from MAC - ,.src_ip_format_rx_val (q_ip_format_rx_data_val ) - ,.src_ip_format_rx_data (q_ip_format_rx_data ) - ,.src_ip_format_rx_last (q_ip_format_rx_data_last ) - ,.src_ip_format_rx_padbytes (q_ip_format_rx_data_padbytes ) - ,.ip_format_src_rx_rdy (ip_format_q_rx_data_rdy ) - - // Header and data out - ,.ip_format_dst_rx_hdr_val (ip_format_tcp_format_rx_hdr_val ) - ,.dst_ip_format_rx_hdr_rdy (tcp_format_ip_format_rx_hdr_rdy ) - ,.ip_format_dst_rx_ip_hdr (ip_format_tcp_format_rx_ip_hdr ) - - ,.ip_format_dst_rx_data_val (ip_format_tcp_format_rx_data_val ) - ,.dst_ip_format_rx_data_rdy (tcp_format_ip_format_rx_data_rdy ) - ,.ip_format_dst_rx_data (ip_format_tcp_format_rx_data ) - ,.ip_format_dst_rx_last (ip_format_tcp_format_rx_last ) - ,.ip_format_dst_rx_padbytes (ip_format_tcp_format_rx_padbytes ) - ); - - rx_tcp_format_wrap rx_tcp_format ( - .clk (clk) - ,.rst (rst) - - // I/O from the MAC side - ,.src_tcp_format_rx_hdr_val (ip_format_tcp_format_rx_hdr_val ) - ,.tcp_format_src_rx_hdr_rdy (tcp_format_ip_format_rx_hdr_rdy ) - ,.src_tcp_format_rx_ip_hdr (ip_format_tcp_format_rx_ip_hdr ) - - ,.src_tcp_format_rx_data_val (ip_format_tcp_format_rx_data_val ) - ,.src_tcp_format_rx_data (ip_format_tcp_format_rx_data ) - ,.tcp_format_src_rx_data_rdy (tcp_format_ip_format_rx_data_rdy ) - ,.src_tcp_format_rx_last (ip_format_tcp_format_rx_last ) - ,.src_tcp_format_rx_padbytes (ip_format_tcp_format_rx_padbytes ) - - // I/O to the TCP parser - ,.tcp_format_dst_rx_hdr_val (tcp_format_payload_rx_hdr_val ) - ,.dst_tcp_format_rx_hdr_rdy (payload_tcp_format_rx_hdr_rdy ) - ,.tcp_format_dst_rx_src_ip (tcp_format_payload_rx_src_ip ) - ,.tcp_format_dst_rx_dst_ip (tcp_format_payload_rx_dst_ip ) - ,.tcp_format_dst_rx_tcp_tot_len (tcp_format_payload_rx_tcp_tot_len ) - ,.tcp_format_dst_rx_tcp_hdr (tcp_format_payload_rx_tcp_hdr ) - - ,.tcp_format_dst_rx_data_val (tcp_format_payload_rx_data_val ) - ,.tcp_format_dst_rx_data (tcp_format_payload_rx_data ) - ,.dst_tcp_format_rx_data_rdy (payload_tcp_format_rx_data_rdy ) - ,.tcp_format_dst_rx_last (tcp_format_payload_rx_data_last ) - ,.tcp_format_dst_rx_padbytes (tcp_format_payload_rx_data_padbytes ) - ); - - logic [`TOT_LEN_W-1:0] tcp_payload_len; - - assign tcp_payload_len = tcp_format_payload_rx_tcp_tot_len - - (tcp_format_payload_rx_tcp_hdr.raw_data_offset << 2); - - assign parser_tcp_rx_payload_addr = parser_tcp_rx_payload_entry.pkt_payload_addr; - assign parser_tcp_rx_payload_len = parser_tcp_rx_payload_entry.pkt_payload_len; - tcp_tmp_rx_buf_wrap rx_tmp_buf_store ( - .clk (clk) - ,.rst (rst) - - // Write req inputs - ,.src_tmp_buf_rx_hdr_val (tcp_format_payload_rx_hdr_val ) - ,.tmp_buf_src_rx_hdr_rdy (payload_tcp_format_rx_hdr_rdy ) - ,.src_tmp_buf_rx_src_ip (tcp_format_payload_rx_src_ip ) - ,.src_tmp_buf_rx_dst_ip (tcp_format_payload_rx_dst_ip ) - ,.src_tmp_buf_rx_tcp_payload_len (tcp_payload_len ) - ,.src_tmp_buf_rx_tcp_hdr (tcp_format_payload_rx_tcp_hdr ) - - ,.src_tmp_buf_rx_data_val (tcp_format_payload_rx_data_val ) - ,.src_tmp_buf_rx_data (tcp_format_payload_rx_data ) - ,.src_tmp_buf_rx_data_last (tcp_format_payload_rx_data_last ) - ,.src_tmp_buf_rx_data_padbytes (tcp_format_payload_rx_data_padbytes ) - ,.tmp_buf_src_rx_data_rdy (payload_tcp_format_rx_data_rdy ) - - // Write resp - ,.tmp_buf_dst_rx_hdr_val (parser_tcp_rx_hdr_val ) - ,.dst_tmp_buf_rx_rdy (tcp_parser_rx_rdy ) - ,.tmp_buf_dst_rx_src_ip (parser_tcp_rx_src_ip ) - ,.tmp_buf_dst_rx_dst_ip (parser_tcp_rx_dst_ip ) - ,.tmp_buf_dst_rx_tcp_hdr (parser_tcp_rx_tcp_hdr ) - - ,.tmp_buf_dst_rx_payload_val (parser_tcp_rx_payload_val ) - ,.tmp_buf_dst_rx_payload_entry (parser_tcp_rx_payload_entry ) - - ,.src_tmp_buf_store_rd_req_val (store_buf_tmp_buf_store_rx_rd_req_val ) - ,.src_tmp_buf_store_rd_req_addr (store_buf_tmp_buf_store_rx_rd_req_addr ) - ,.tmp_buf_store_src_rd_req_rdy (tmp_buf_store_store_buf_rx_rd_req_rdy ) - - ,.tmp_buf_store_src_rd_resp_val (tmp_buf_store_store_buf_rx_rd_resp_val ) - ,.tmp_buf_store_src_rd_resp_data (tmp_buf_store_store_buf_rx_rd_resp_data ) - ,.src_tmp_buf_store_rd_resp_rdy (store_buf_tmp_buf_store_rx_rd_resp_rdy ) - - ,.src_tmp_buf_free_slab_req_val (store_buf_tmp_buf_free_slab_rx_req_val ) - ,.src_tmp_buf_free_slab_req_addr (store_buf_tmp_buf_free_slab_rx_req_addr ) - ,.tmp_buf_free_slab_src_req_rdy (tmp_buf_free_slab_store_buf_rx_req_rdy ) - ); - - frontend_tx_payload_engine #( - .SRC_X (0) - ,.SRC_Y (0) - ,.TX_DRAM_X (1) - ,.TX_DRAM_Y (0) - ) tx_payload_engine ( - .clk(clk) - ,.rst(rst) - - // I/O for the NoC - ,.tx_payload_noc0_val (tx_parser_noc0_val ) - ,.tx_payload_noc0_data (tx_parser_noc0_data ) - ,.noc0_tx_payload_rdy (noc0_tx_parser_rdy ) - - ,.noc0_tx_payload_val (noc0_tx_parser_val ) - ,.noc0_tx_payload_data (noc0_tx_parser_data ) - ,.tx_payload_noc0_rdy (tx_parser_noc0_rdy ) - - // Read req - ,.src_payload_tx_val (tcp_parser_tx_val ) - ,.payload_src_tx_rdy (parser_tcp_tx_rdy ) - ,.src_payload_tx_flowid (tcp_parser_tx_flowid ) - ,.src_payload_tx_src_ip (tcp_parser_tx_src_ip ) - ,.src_payload_tx_dst_ip (tcp_parser_tx_dst_ip ) - ,.src_payload_tx_tcp_hdr (tcp_parser_tx_tcp_hdr ) - ,.src_payload_tx_payload_entry (tcp_parser_tx_payload_entry ) - - // Read resp - ,.payload_dst_tx_hdr_val (payload_chksum_tx_hdr_val ) - ,.dst_payload_tx_hdr_rdy (chksum_payload_tx_hdr_rdy ) - ,.payload_dst_tx_src_ip (payload_chksum_tx_src_ip ) - ,.payload_dst_tx_dst_ip (payload_chksum_tx_dst_ip ) - ,.payload_dst_tx_payload_len (payload_chksum_tx_payload_len ) - ,.payload_dst_tx_tcp_hdr (payload_chksum_tx_tcp_hdr ) - - ,.payload_dst_tx_data_val (payload_chksum_tx_data_val ) - ,.payload_dst_tx_data (payload_chksum_tx_data ) - ,.payload_dst_tx_data_last (payload_chksum_tx_data_last ) - ,.payload_dst_tx_data_padbytes (payload_chksum_tx_data_padbytes) - ,.dst_payload_tx_data_rdy (chksum_payload_tx_data_rdy ) - - ); - - frontend_tx_chksum_engine tx_chksum_engine ( - .clk (clk ) - ,.rst (rst ) - - // I/O from the payload engine - ,.src_chksum_tx_hdr_val (payload_chksum_tx_hdr_val ) - ,.chksum_src_tx_hdr_rdy (chksum_payload_tx_hdr_rdy ) - ,.src_chksum_tx_src_ip (payload_chksum_tx_src_ip ) - ,.src_chksum_tx_dst_ip (payload_chksum_tx_dst_ip ) - ,.src_chksum_tx_payload_len (payload_chksum_tx_payload_len ) - ,.src_chksum_tx_tcp_hdr (payload_chksum_tx_tcp_hdr ) - - ,.src_chksum_tx_data_val (payload_chksum_tx_data_val ) - ,.src_chksum_tx_data (payload_chksum_tx_data ) - ,.src_chksum_tx_data_last (payload_chksum_tx_data_last ) - ,.src_chksum_tx_data_padbytes (payload_chksum_tx_data_padbytes ) - ,.chksum_src_tx_data_rdy (chksum_payload_tx_data_rdy ) - - // I/O to the MAC side - ,.chksum_dst_tx_hdr_val (chksum_tcp_to_ipstream_tx_hdr_val ) - ,.dst_chksum_tx_hdr_rdy (tcp_to_ipstream_chksum_tx_hdr_rdy ) - ,.chksum_dst_tx_src_ip (chksum_tcp_to_ipstream_tx_src_ip ) - ,.chksum_dst_tx_dst_ip (chksum_tcp_to_ipstream_tx_dst_ip ) - ,.chksum_dst_tx_tcp_len (chksum_tcp_to_ipstream_tx_tcp_len ) - ,.chksum_dst_tx_tcp_hdr (chksum_tcp_to_ipstream_tx_tcp_hdr ) - - ,.chksum_dst_tx_data_val (chksum_tcp_to_ipstream_tx_data_val ) - ,.dst_chksum_tx_data_rdy (tcp_to_ipstream_chksum_tx_data_rdy ) - ,.chksum_dst_tx_data (chksum_tcp_to_ipstream_tx_data ) - ,.chksum_dst_tx_data_last (chksum_tcp_to_ipstream_tx_data_last ) - ,.chksum_dst_tx_data_padbytes (chksum_tcp_to_ipstream_tx_data_padbytes) - ); - - tcp_to_ipstream tx_tcp_to_ipstream ( - .clk (clk) - ,.rst (rst) - - ,.src_tcp_to_ipstream_hdr_val (chksum_tcp_to_ipstream_tx_hdr_val ) - ,.src_tcp_to_ipstream_src_ip_addr (chksum_tcp_to_ipstream_tx_src_ip ) - ,.src_tcp_to_ipstream_dst_ip_addr (chksum_tcp_to_ipstream_tx_dst_ip ) - ,.src_tcp_to_ipstream_tcp_len (chksum_tcp_to_ipstream_tx_tcp_len ) - ,.src_tcp_to_ipstream_tcp_hdr (chksum_tcp_to_ipstream_tx_tcp_hdr ) - ,.tcp_to_ipstream_src_hdr_rdy (tcp_to_ipstream_chksum_tx_hdr_rdy ) - - ,.src_tcp_to_ipstream_data_val (chksum_tcp_to_ipstream_tx_data_val ) - ,.tcp_to_ipstream_src_data_rdy (tcp_to_ipstream_chksum_tx_data_rdy ) - ,.src_tcp_to_ipstream_data (chksum_tcp_to_ipstream_tx_data ) - ,.src_tcp_to_ipstream_data_last (chksum_tcp_to_ipstream_tx_data_last ) - ,.src_tcp_to_ipstream_data_padbytes (chksum_tcp_to_ipstream_tx_data_padbytes ) - - ,.tcp_to_ipstream_dst_hdr_val (tcp_to_ipstream_ip_to_ethstream_tx_hdr_val ) - ,.tcp_to_ipstream_dst_ip_hdr (tcp_to_ipstream_ip_to_ethstream_tx_ip_hdr ) - ,.dst_tcp_to_ipstream_hdr_rdy (ip_to_ethstream_tcp_to_ipstream_tx_hdr_rdy ) - - // Stream output - ,.tcp_to_ipstream_dst_val (tcp_to_ipstream_ip_to_ethstream_tx_data_val ) - ,.dst_tcp_to_ipstream_rdy (ip_to_ethstream_tcp_to_ipstream_tx_data_rdy ) - ,.tcp_to_ipstream_dst_data (tcp_to_ipstream_ip_to_ethstream_tx_data ) - ,.tcp_to_ipstream_dst_last (tcp_to_ipstream_ip_to_ethstream_tx_data_last ) - ,.tcp_to_ipstream_dst_padbytes (tcp_to_ipstream_ip_to_ethstream_tx_data_padbytes ) - ); - - ip_to_ethstream tx_ip_to_ethstream ( - .clk (clk) - ,.rst (rst) - - ,.src_ip_to_ethstream_hdr_val (tcp_to_ipstream_ip_to_ethstream_tx_hdr_val ) - ,.src_ip_to_ethstream_ip_hdr (tcp_to_ipstream_ip_to_ethstream_tx_ip_hdr ) - ,.ip_to_ethstream_src_hdr_rdy (ip_to_ethstream_tcp_to_ipstream_tx_hdr_rdy ) - - ,.src_ip_to_ethstream_data_val (tcp_to_ipstream_ip_to_ethstream_tx_data_val ) - ,.src_ip_to_ethstream_data (tcp_to_ipstream_ip_to_ethstream_tx_data ) - ,.src_ip_to_ethstream_data_last (tcp_to_ipstream_ip_to_ethstream_tx_data_last ) - ,.src_ip_to_ethstream_data_padbytes (tcp_to_ipstream_ip_to_ethstream_tx_data_padbytes ) - ,.ip_to_ethstream_src_data_rdy (ip_to_ethstream_tcp_to_ipstream_tx_data_rdy ) - - ,.ip_to_ethstream_dst_hdr_val (ip_to_ethstream_eth_hdrtostream_tx_eth_hdr_val ) - ,.ip_to_ethstream_dst_eth_hdr (ip_to_ethstream_eth_hdrtostream_tx_eth_hdr ) - ,.dst_ip_to_ethstream_hdr_rdy (eth_hdrtostream_ip_to_ethsteram_tx_eth_hdr_rdy ) - - ,.ip_to_ethstream_dst_data_val (ip_to_ethstream_eth_hdrtostream_tx_data_val ) - ,.ip_to_ethstream_dst_data (ip_to_ethstream_eth_hdrtostream_tx_data ) - ,.ip_to_ethstream_dst_data_last (ip_to_ethstream_eth_hdrtostream_tx_data_last ) - ,.ip_to_ethstream_dst_data_padbytes (ip_to_ethstream_eth_hdrtostream_tx_data_padbytes ) - ,.dst_ip_to_ethstream_data_rdy (eth_hdrtostream_ip_to_ethstream_tx_data_rdy ) - ); - - eth_hdrtostream tx_eth_hdrtostream ( - .clk (clk) - ,.rst (rst) - - ,.src_eth_hdrtostream_eth_hdr_val (ip_to_ethstream_eth_hdrtostream_tx_eth_hdr_val ) - ,.src_eth_hdrtostream_eth_hdr (ip_to_ethstream_eth_hdrtostream_tx_eth_hdr ) - ,.eth_hdrtostream_src_eth_hdr_rdy (eth_hdrtostream_ip_to_ethsteram_tx_eth_hdr_rdy ) - - ,.src_eth_hdrtostream_data_val (ip_to_ethstream_eth_hdrtostream_tx_data_val ) - ,.src_eth_hdrtostream_data (ip_to_ethstream_eth_hdrtostream_tx_data ) - ,.src_eth_hdrtostream_data_last (ip_to_ethstream_eth_hdrtostream_tx_data_last ) - ,.src_eth_hdrtostream_data_padbytes (ip_to_ethstream_eth_hdrtostream_tx_data_padbytes ) - ,.eth_hdrtostream_src_data_rdy (eth_hdrtostream_ip_to_ethstream_tx_data_rdy ) - - ,.eth_hdrtostream_dst_data_val (engine_mac_tx_val ) - ,.eth_hdrtostream_dst_data (engine_mac_tx_data ) - ,.eth_hdrtostream_dst_data_last (engine_mac_tx_last ) - ,.eth_hdrtostream_dst_data_padbytes (engine_mac_tx_padbytes ) - ,.dst_eth_hdrtostream_data_rdy (mac_engine_tx_rdy ) - ); - -endmodule diff --git a/recv_pipe/rx_payload_ptrs.sv b/recv_pipe/rx_payload_ptrs.sv deleted file mode 100644 index d5fe6f4..0000000 --- a/recv_pipe/rx_payload_ptrs.sv +++ /dev/null @@ -1,204 +0,0 @@ -module rx_payload_ptrs -import tcp_pkg::*; -( - input clk - ,input rst - - ,input head_ptr_wr_req_val - ,input [FLOWID_W-1:0] head_ptr_wr_req_addr - ,input [RX_PAYLOAD_PTR_W:0] head_ptr_wr_req_data - ,output head_ptr_wr_req_rdy - - ,input head_ptr_rd0_req_val - ,input [FLOWID_W-1:0] head_ptr_rd0_req_addr - ,output logic head_ptr_rd0_req_rdy - - ,output logic head_ptr_rd0_resp_val - ,output logic [RX_PAYLOAD_PTR_W:0] head_ptr_rd0_resp_data - ,input head_ptr_rd0_resp_rdy - - ,input head_ptr_rd1_req_val - ,input [FLOWID_W-1:0] head_ptr_rd1_req_addr - ,output logic head_ptr_rd1_req_rdy - - ,output logic head_ptr_rd1_resp_val - ,output logic [RX_PAYLOAD_PTR_W:0] head_ptr_rd1_resp_data - ,input head_ptr_rd1_resp_rdy - - ,input commit_ptr_wr_req_val - ,input [FLOWID_W-1:0] commit_ptr_wr_req_addr - ,input [RX_PAYLOAD_PTR_W:0] commit_ptr_wr_req_data - ,output commit_ptr_wr_req_rdy - - ,input commit_ptr_rd0_req_val - ,input [FLOWID_W-1:0] commit_ptr_rd0_req_addr - ,output logic commit_ptr_rd0_req_rdy - - ,output logic commit_ptr_rd0_resp_val - ,output logic [RX_PAYLOAD_PTR_W:0] commit_ptr_rd0_resp_data - ,input commit_ptr_rd0_resp_rdy - - ,input commit_ptr_rd1_req_val - ,input [FLOWID_W-1:0] commit_ptr_rd1_req_addr - ,output logic commit_ptr_rd1_req_rdy - - ,output logic commit_ptr_rd1_resp_val - ,output logic [RX_PAYLOAD_PTR_W:0] commit_ptr_rd1_resp_data - ,input commit_ptr_rd1_resp_rdy - - ,input tail_ptr_wr_req_val - ,input [FLOWID_W-1:0] tail_ptr_wr_req_addr - ,input [RX_PAYLOAD_PTR_W:0] tail_ptr_wr_req_data - ,output tail_ptr_wr_req_rdy - - ,input tail_ptr_rd_req_val - ,input [FLOWID_W-1:0] tail_ptr_rd_req_addr - ,output logic tail_ptr_rd_req_rdy - - ,output logic tail_ptr_rd_resp_val - ,output logic [RX_PAYLOAD_PTR_W:0] tail_ptr_rd_resp_data - ,input tail_ptr_rd_resp_rdy - - ,input new_flow_val - ,input [FLOWID_W-1:0] new_flow_flowid - ,input [RX_PAYLOAD_PTR_W:0] new_rx_head_ptr - ,input [RX_PAYLOAD_PTR_W:0] new_rx_tail_ptr - ,output new_flow_rx_payload_ptrs_rdy -); - - logic head_ptr_mem_wr_req_rdy; - logic tail_ptr_mem_wr_req_rdy; - logic commit_ptr_mem_wr_req_rdy; - - logic head_ptr_mem_wr_req_val; - logic tail_ptr_mem_wr_req_val; - logic commit_ptr_mem_wr_req_val; - - logic [RX_PAYLOAD_PTR_W:0] head_ptr_mem_wr_req_data; - logic [RX_PAYLOAD_PTR_W:0] tail_ptr_mem_wr_req_data; - logic [RX_PAYLOAD_PTR_W:0] commit_ptr_mem_wr_req_data; - - logic [FLOWID_W-1:0] head_ptr_mem_wr_req_addr; - logic [FLOWID_W-1:0] tail_ptr_mem_wr_req_addr; - logic [FLOWID_W-1:0] commit_ptr_mem_wr_req_addr; - - assign new_flow_rx_payload_ptrs_rdy = head_ptr_mem_wr_req_rdy - & tail_ptr_mem_wr_req_rdy - & commit_ptr_mem_wr_req_rdy; - - assign head_ptr_wr_req_rdy = ~new_flow_val & head_ptr_mem_wr_req_rdy; - assign tail_ptr_wr_req_rdy = ~new_flow_val & tail_ptr_mem_wr_req_rdy; - assign commit_ptr_wr_req_rdy = ~new_flow_val & commit_ptr_mem_wr_req_rdy; - - assign head_ptr_mem_wr_req_val = new_flow_val | head_ptr_wr_req_val; - assign tail_ptr_mem_wr_req_val = new_flow_val | tail_ptr_wr_req_val; - assign commit_ptr_mem_wr_req_val = new_flow_val | commit_ptr_wr_req_val; - - assign head_ptr_mem_wr_req_addr = new_flow_val - ? new_flow_flowid - : head_ptr_wr_req_addr; - - assign tail_ptr_mem_wr_req_addr = new_flow_val - ? new_flow_flowid - : tail_ptr_wr_req_addr; - - assign commit_ptr_mem_wr_req_addr = new_flow_val - ? new_flow_flowid - : commit_ptr_wr_req_addr; - - assign head_ptr_mem_wr_req_data = new_flow_val - ? new_rx_head_ptr - : head_ptr_wr_req_data; - - assign tail_ptr_mem_wr_req_data = new_flow_val - ? new_rx_tail_ptr - : tail_ptr_wr_req_data; - - assign commit_ptr_mem_wr_req_data = new_flow_val - ? new_rx_tail_ptr - : commit_ptr_wr_req_data; - - ram_2r1w_sync_backpressure #( - .width_p (RX_PAYLOAD_PTR_W + 1 ) - ,.els_p (MAX_FLOW_CNT ) - ) head_ptrs ( - .clk (clk) - ,.rst (rst) - - ,.wr_req_val (head_ptr_mem_wr_req_val ) - ,.wr_req_addr (head_ptr_mem_wr_req_addr ) - ,.wr_req_data (head_ptr_mem_wr_req_data ) - ,.wr_req_rdy (head_ptr_mem_wr_req_rdy ) - - ,.rd0_req_val (head_ptr_rd0_req_val ) - ,.rd0_req_addr (head_ptr_rd0_req_addr ) - ,.rd0_req_rdy (head_ptr_rd0_req_rdy ) - - ,.rd0_resp_val (head_ptr_rd0_resp_val ) - ,.rd0_resp_addr () - ,.rd0_resp_data (head_ptr_rd0_resp_data ) - ,.rd0_resp_rdy (head_ptr_rd0_resp_rdy ) - - ,.rd1_req_val (head_ptr_rd1_req_val ) - ,.rd1_req_addr (head_ptr_rd1_req_addr ) - ,.rd1_req_rdy (head_ptr_rd1_req_rdy ) - - ,.rd1_resp_val (head_ptr_rd1_resp_val ) - ,.rd1_resp_addr () - ,.rd1_resp_data (head_ptr_rd1_resp_data ) - ,.rd1_resp_rdy (head_ptr_rd1_resp_rdy ) - ); - - ram_2r1w_sync_backpressure #( - .width_p (RX_PAYLOAD_PTR_W + 1 ) - ,.els_p (MAX_FLOW_CNT ) - ) commit_ptrs ( - .clk (clk) - ,.rst (rst) - - ,.wr_req_val (commit_ptr_mem_wr_req_val ) - ,.wr_req_addr (commit_ptr_mem_wr_req_addr ) - ,.wr_req_data (commit_ptr_mem_wr_req_data ) - ,.wr_req_rdy (commit_ptr_mem_wr_req_rdy ) - - ,.rd0_req_val (commit_ptr_rd0_req_val ) - ,.rd0_req_addr (commit_ptr_rd0_req_addr ) - ,.rd0_req_rdy (commit_ptr_rd0_req_rdy ) - - ,.rd0_resp_val (commit_ptr_rd0_resp_val ) - ,.rd0_resp_addr () - ,.rd0_resp_data (commit_ptr_rd0_resp_data ) - ,.rd0_resp_rdy (commit_ptr_rd0_resp_rdy ) - - ,.rd1_req_val (commit_ptr_rd1_req_val ) - ,.rd1_req_addr (commit_ptr_rd1_req_addr ) - ,.rd1_req_rdy (commit_ptr_rd1_req_rdy ) - - ,.rd1_resp_val (commit_ptr_rd1_resp_val ) - ,.rd1_resp_addr () - ,.rd1_resp_data (commit_ptr_rd1_resp_data ) - ,.rd1_resp_rdy (commit_ptr_rd1_resp_rdy ) - ); - - ram_1r1w_sync_backpressure #( - .width_p (RX_PAYLOAD_PTR_W + 1 ) - ,.els_p (MAX_FLOW_CNT ) - ) tail_ptrs ( - .clk (clk ) - ,.rst (rst ) - - ,.wr_req_val (tail_ptr_mem_wr_req_val ) - ,.wr_req_addr (tail_ptr_mem_wr_req_addr ) - ,.wr_req_data (tail_ptr_mem_wr_req_data ) - ,.wr_req_rdy (tail_ptr_mem_wr_req_rdy ) - - ,.rd_req_val (tail_ptr_rd_req_val ) - ,.rd_req_addr (tail_ptr_rd_req_addr ) - ,.rd_req_rdy (tail_ptr_rd_req_rdy ) - - ,.rd_resp_val (tail_ptr_rd_resp_val ) - ,.rd_resp_data (tail_ptr_rd_resp_data ) - ,.rd_resp_rdy (tail_ptr_rd_resp_rdy ) - ); - -endmodule diff --git a/recv_pipe/rx_payload_store_buf_cp.sv b/recv_pipe/rx_payload_store_buf_cp.sv index 83a70fa..af7dee8 100644 --- a/recv_pipe/rx_payload_store_buf_cp.sv +++ b/recv_pipe/rx_payload_store_buf_cp.sv @@ -38,18 +38,27 @@ import tcp_pkg::*; ,output logic [RX_TMP_BUF_ADDR_W-1:0] store_buf_tmp_buf_free_slab_rx_req_addr ,input logic tmp_buf_free_slab_store_buf_rx_req_rdy - ,output logic store_buf_commit_ptr_rd_req_val - ,output logic [FLOWID_W-1:0] store_buf_commit_ptr_rd_req_flowid - ,input logic commit_ptr_store_buf_rd_req_rdy + ,output logic store_buf_commit_idx_rd_req_val + ,output logic [FLOWID_W-1:0] store_buf_commit_idx_rd_req_flowid + ,input logic commit_idx_store_buf_rd_req_rdy - ,input logic commit_ptr_store_buf_rd_resp_val - ,input logic [RX_PAYLOAD_PTR_W:0] commit_ptr_store_buf_rd_resp_data - ,output logic store_buf_commit_ptr_rd_resp_rdy + ,input logic commit_idx_store_buf_rd_resp_val + ,input tcp_buf_idx commit_idx_store_buf_rd_resp_data + ,output logic store_buf_commit_idx_rd_resp_rdy - ,output logic store_buf_commit_ptr_wr_req_val - ,output logic [FLOWID_W-1:0] store_buf_commit_ptr_wr_req_flowid - ,output logic [RX_PAYLOAD_PTR_W:0] store_buf_commit_ptr_wr_req_data - ,input logic commit_ptr_store_buf_wr_req_rdy + ,output logic store_buf_commit_idx_wr_req_val + ,output logic [FLOWID_W-1:0] store_buf_commit_idx_wr_req_flowid + ,output tcp_buf_idx store_buf_commit_idx_wr_req_data + ,input logic commit_idx_store_buf_wr_req_rdy + + ,output rx_store_buf_rx_buf_store_rd_req_val + ,output [FLOWID_W-1:0] rx_store_buf_rx_buf_store_rd_req_flowid + ,output [RX_PAYLOAD_IDX_W-1:0] rx_store_buf_rx_buf_store_rd_req_idx + ,input logic rx_buf_store_rx_store_buf_rd_req_rdy + + ,input logic rx_buf_store_rx_store_buf_rd_resp_val + ,input tcp_buf rx_buf_store_rx_store_buf_rd_resp_data + ,output rx_store_buf_rx_buf_store_rd_resp_rdy ); logic ctrl_wr_buf_req_val; @@ -62,7 +71,8 @@ import tcp_pkg::*; logic ctrl_wr_buf_wr_req_done_rdy; logic save_q_entry; - logic save_commit_ptr; + logic save_commit_idx; + logic save_commit_real_ptr; logic init_tmp_buf_rd_metadata; logic update_tmp_buf_rd_metadata; @@ -102,14 +112,20 @@ import tcp_pkg::*; ,.store_buf_tmp_buf_free_slab_rx_req_val (store_buf_tmp_buf_free_slab_rx_req_val ) ,.tmp_buf_free_slab_store_buf_rx_req_rdy (tmp_buf_free_slab_store_buf_rx_req_rdy ) - ,.store_buf_commit_ptr_rd_req_val (store_buf_commit_ptr_rd_req_val ) - ,.commit_ptr_store_buf_rd_req_rdy (commit_ptr_store_buf_rd_req_rdy ) + ,.store_buf_commit_idx_rd_req_val (store_buf_commit_idx_rd_req_val ) + ,.commit_idx_store_buf_rd_req_rdy (commit_idx_store_buf_rd_req_rdy ) - ,.commit_ptr_store_buf_rd_resp_val (commit_ptr_store_buf_rd_resp_val ) - ,.store_buf_commit_ptr_rd_resp_rdy (store_buf_commit_ptr_rd_resp_rdy ) + ,.commit_idx_store_buf_rd_resp_val (commit_idx_store_buf_rd_resp_val ) + ,.store_buf_commit_idx_rd_resp_rdy (store_buf_commit_idx_rd_resp_rdy ) - ,.store_buf_commit_ptr_wr_req_val (store_buf_commit_ptr_wr_req_val ) - ,.commit_ptr_store_buf_wr_req_rdy (commit_ptr_store_buf_wr_req_rdy ) + ,.store_buf_commit_idx_wr_req_val (store_buf_commit_idx_wr_req_val ) + ,.commit_idx_store_buf_wr_req_rdy (commit_idx_store_buf_wr_req_rdy ) + + ,.rx_store_buf_rx_buf_store_rd_req_val(rx_store_buf_rx_buf_store_rd_req_val) + ,.rx_buf_store_rx_store_buf_rd_req_rdy(rx_buf_store_rx_store_buf_rd_req_rdy) + + ,.rx_buf_store_rx_store_buf_rd_resp_val(rx_buf_store_rx_store_buf_rd_resp_val) + ,.rx_store_buf_rx_buf_store_rd_resp_rdy(rx_store_buf_rx_buf_store_rd_resp_rdy) ,.ctrl_wr_buf_req_val (ctrl_wr_buf_req_val ) ,.wr_buf_ctrl_req_rdy (wr_buf_ctrl_req_rdy ) @@ -121,7 +137,8 @@ import tcp_pkg::*; ,.ctrl_wr_buf_wr_req_done_rdy (ctrl_wr_buf_wr_req_done_rdy ) ,.save_q_entry (save_q_entry ) - ,.save_commit_ptr (save_commit_ptr ) + ,.save_commit_idx (save_commit_idx ) + ,.save_commit_real_ptr (save_commit_real_ptr ) ,.init_tmp_buf_rd_metadata (init_tmp_buf_rd_metadata ) ,.update_tmp_buf_rd_metadata (update_tmp_buf_rd_metadata ) @@ -142,15 +159,21 @@ import tcp_pkg::*; ,.store_buf_tmp_buf_free_slab_rx_req_addr (store_buf_tmp_buf_free_slab_rx_req_addr ) - ,.store_buf_commit_ptr_rd_req_flowid (store_buf_commit_ptr_rd_req_flowid ) + ,.store_buf_commit_idx_rd_req_flowid (store_buf_commit_idx_rd_req_flowid ) + + ,.commit_idx_store_buf_rd_resp_data (commit_idx_store_buf_rd_resp_data ) + + ,.store_buf_commit_idx_wr_req_flowid (store_buf_commit_idx_wr_req_flowid ) + ,.store_buf_commit_idx_wr_req_data (store_buf_commit_idx_wr_req_data ) - ,.commit_ptr_store_buf_rd_resp_data (commit_ptr_store_buf_rd_resp_data ) + ,.rx_store_buf_rx_buf_store_rd_req_flowid(rx_store_buf_rx_buf_store_rd_req_flowid) + ,.rx_store_buf_rx_buf_store_rd_req_idx(rx_store_buf_rx_buf_store_rd_req_idx) - ,.store_buf_commit_ptr_wr_req_flowid (store_buf_commit_ptr_wr_req_flowid ) - ,.store_buf_commit_ptr_wr_req_data (store_buf_commit_ptr_wr_req_data ) + ,.rx_buf_store_rx_store_buf_rd_resp_data(rx_buf_store_rx_store_buf_rd_resp_data) ,.save_q_entry (save_q_entry ) - ,.save_commit_ptr (save_commit_ptr ) + ,.save_commit_idx (save_commit_idx ) + ,.save_commit_real_ptr (save_commit_real_ptr ) ,.init_tmp_buf_rd_metadata (init_tmp_buf_rd_metadata ) ,.update_tmp_buf_rd_metadata (update_tmp_buf_rd_metadata ) ,.last_transfer (last_transfer ) @@ -204,7 +227,7 @@ import tcp_pkg::*; ,.src_wr_buf_req_val (ctrl_wr_buf_req_val ) ,.src_wr_buf_req_flowid (datapath_wr_buf_req_flowid ) - ,.src_wr_buf_req_wr_ptr (datapath_wr_buf_req_wr_ptr ) + ,.src_wr_buf_req_wr_ptr (datapath_wr_buf_req_wr_ptr ) // TODO: need to add a state in the Ctrl FSM to convert commit idx to a pointer. ,.src_wr_buf_req_size (datapath_wr_buf_req_size ) ,.wr_buf_src_req_rdy (wr_buf_ctrl_req_rdy ) diff --git a/recv_pipe/rx_payload_store_buf_cp_ctrl.sv b/recv_pipe/rx_payload_store_buf_cp_ctrl.sv index 951cb14..96cc272 100644 --- a/recv_pipe/rx_payload_store_buf_cp_ctrl.sv +++ b/recv_pipe/rx_payload_store_buf_cp_ctrl.sv @@ -16,14 +16,14 @@ module rx_payload_store_buf_cp_ctrl ( ,output logic store_buf_tmp_buf_free_slab_rx_req_val ,input logic tmp_buf_free_slab_store_buf_rx_req_rdy - ,output logic store_buf_commit_ptr_rd_req_val - ,input logic commit_ptr_store_buf_rd_req_rdy + ,output logic store_buf_commit_idx_rd_req_val + ,input logic commit_idx_store_buf_rd_req_rdy - ,input logic commit_ptr_store_buf_rd_resp_val - ,output logic store_buf_commit_ptr_rd_resp_rdy + ,input logic commit_idx_store_buf_rd_resp_val + ,output logic store_buf_commit_idx_rd_resp_rdy - ,output logic store_buf_commit_ptr_wr_req_val - ,input logic commit_ptr_store_buf_wr_req_rdy + ,output logic store_buf_commit_idx_wr_req_val + ,input logic commit_idx_store_buf_wr_req_rdy ,output logic ctrl_wr_buf_req_val ,input logic wr_buf_ctrl_req_rdy @@ -33,9 +33,16 @@ module rx_payload_store_buf_cp_ctrl ( ,input logic wr_buf_ctrl_wr_req_done ,output logic ctrl_wr_buf_wr_req_done_rdy + + ,output rx_store_buf_rx_buf_store_rd_req_val + ,input logic rx_buf_store_rx_store_buf_rd_req_rdy + + ,input logic rx_buf_store_rx_store_buf_rd_resp_val + ,output rx_store_buf_rx_buf_store_rd_resp_rdy ,output logic save_q_entry - ,output logic save_commit_ptr + ,output logic save_commit_idx + ,output logic save_commit_real_ptr ,output logic init_tmp_buf_rd_metadata ,output logic update_tmp_buf_rd_metadata @@ -44,9 +51,11 @@ module rx_payload_store_buf_cp_ctrl ( ,input logic pkt_len_0 ); - typedef enum logic[2:0] { + typedef enum logic[4:0] { READY = 3'd0, - COMMIT_PTR_RESP = 3'd1, + COMMIT_IDX_RESP = 3'd1, + BUF_STORE_REQ = 4'd8, + BUF_STORE_RESP = 4'd9, WR_REQ = 3'd2, DATA_COPY_START = 3'd3, DATA_COPY = 3'd4, @@ -76,18 +85,22 @@ module rx_payload_store_buf_cp_ctrl ( read_store_buf_q_req_val = 1'b0; save_q_entry = 1'b0; - save_commit_ptr = 1'b0; + save_commit_idx = 1'b0; + save_commit_real_ptr = 1'b0; init_tmp_buf_rd_metadata = 1'b0; update_tmp_buf_rd_metadata = 1'b0; store_buf_tmp_buf_store_rx_rd_req_val = 1'b0; store_buf_tmp_buf_store_rx_rd_resp_rdy = 1'b1; - store_buf_commit_ptr_rd_req_val = 1'b0; - store_buf_commit_ptr_rd_resp_rdy = 1'b0; + store_buf_commit_idx_rd_req_val = 1'b0; + store_buf_commit_idx_rd_resp_rdy = 1'b0; store_buf_tmp_buf_free_slab_rx_req_val = 1'b0; - store_buf_commit_ptr_wr_req_val = 1'b0; + store_buf_commit_idx_wr_req_val = 1'b0; + + rx_store_buf_rx_buf_store_rd_req_val = 1'b0; + rx_store_buf_rx_buf_store_rd_resp_rdy = 1'b0; state_next = state_reg; case (state_reg) @@ -101,24 +114,39 @@ module rx_payload_store_buf_cp_ctrl ( else if (~accept_payload) begin state_next = FREE_NON_ACCEPTED; end - else if (commit_ptr_store_buf_rd_req_rdy) begin - store_buf_commit_ptr_rd_req_val = 1'b1; + else if (commit_idx_store_buf_rd_req_rdy) begin + store_buf_commit_idx_rd_req_val = 1'b1; init_tmp_buf_rd_metadata = 1'b1; - state_next = COMMIT_PTR_RESP; + state_next = COMMIT_IDX_RESP; end end end - COMMIT_PTR_RESP: begin - store_buf_commit_ptr_rd_resp_rdy = 1'b1; + COMMIT_IDX_RESP: begin + store_buf_commit_idx_rd_resp_rdy = 1'b1; - if (commit_ptr_store_buf_rd_resp_val) begin - save_commit_ptr = 1'b1; + if (commit_idx_store_buf_rd_resp_val) begin + save_commit_idx = 1'b1; state_next = DATA_COPY_START; end else begin - state_next = COMMIT_PTR_RESP; + state_next = COMMIT_IDX_RESP; + end + end + BUF_STORE_REQ: begin + rx_store_buf_rx_buf_store_rd_req_val = 1'b1; + // the idx is stored in datapath during this state. + if (rx_buf_store_rx_store_buf_rd_req_rdy) begin + state_next = BUF_STORE_RESP; + end + end + BUF_STORE_RESP: begin + rx_store_buf_rx_buf_store_rd_resp_rdy = 1'b1; + + if (rx_buf_store_rx_store_buf_rd_resp_val) begin + save_commit_real_ptr = 1'b1; + state_next = DATA_COPY_START; end end DATA_COPY_START: begin @@ -161,9 +189,9 @@ module rx_payload_store_buf_cp_ctrl ( end end UPDATE_POINTER: begin - if (commit_ptr_store_buf_wr_req_rdy & tmp_buf_free_slab_store_buf_rx_req_rdy) begin + if (commit_idx_store_buf_wr_req_rdy & tmp_buf_free_slab_store_buf_rx_req_rdy) begin store_buf_tmp_buf_free_slab_rx_req_val = 1'b1; - store_buf_commit_ptr_wr_req_val = 1'b1; + store_buf_commit_idx_wr_req_val = 1'b1; state_next = READY; end @@ -188,18 +216,18 @@ module rx_payload_store_buf_cp_ctrl ( read_store_buf_q_req_val = 'X; save_q_entry = 'X; - save_commit_ptr = 'X; + save_commit_idx = 'X; init_tmp_buf_rd_metadata = 'X; update_tmp_buf_rd_metadata = 'X; store_buf_tmp_buf_store_rx_rd_req_val = 'X; store_buf_tmp_buf_store_rx_rd_resp_rdy = 'X; - store_buf_commit_ptr_rd_req_val = 'X; - store_buf_commit_ptr_rd_resp_rdy = 'X; + store_buf_commit_idx_rd_req_val = 'X; + store_buf_commit_idx_rd_resp_rdy = 'X; store_buf_tmp_buf_free_slab_rx_req_val = 'X; - store_buf_commit_ptr_wr_req_val = 'X; + store_buf_commit_idx_wr_req_val = 'X; state_next = UND; end diff --git a/recv_pipe/rx_payload_store_buf_cp_datapath.sv b/recv_pipe/rx_payload_store_buf_cp_datapath.sv index ce01bc9..9268453 100644 --- a/recv_pipe/rx_payload_store_buf_cp_datapath.sv +++ b/recv_pipe/rx_payload_store_buf_cp_datapath.sv @@ -14,15 +14,21 @@ import tcp_pkg::*; ,output logic [RX_TMP_BUF_ADDR_W-1:0] store_buf_tmp_buf_free_slab_rx_req_addr - ,output logic [FLOWID_W-1:0] store_buf_commit_ptr_rd_req_flowid + ,output logic [FLOWID_W-1:0] store_buf_commit_idx_rd_req_flowid - ,input logic [RX_PAYLOAD_PTR_W:0] commit_ptr_store_buf_rd_resp_data + ,input tcp_buf_idx commit_idx_store_buf_rd_resp_data - ,output logic [FLOWID_W-1:0] store_buf_commit_ptr_wr_req_flowid - ,output logic [RX_PAYLOAD_PTR_W:0] store_buf_commit_ptr_wr_req_data + ,output logic [FLOWID_W-1:0] store_buf_commit_idx_wr_req_flowid + ,output tcp_buf_idx store_buf_commit_idx_wr_req_data + + ,output [FLOWID_W-1:0] rx_store_buf_rx_buf_store_rd_req_flowid + ,output [RX_PAYLOAD_IDX_W-1:0] rx_store_buf_rx_buf_store_rd_req_idx + + ,input tcp_buf rx_buf_store_rx_store_buf_rd_resp_data ,input logic save_q_entry - ,input logic save_commit_ptr + ,input logic save_commit_idx + ,input logic save_commit_real_ptr ,input logic init_tmp_buf_rd_metadata ,input logic update_tmp_buf_rd_metadata ,output logic last_transfer @@ -30,7 +36,7 @@ import tcp_pkg::*; ,output logic pkt_len_0 ,output logic [FLOWID_W-1:0] datapath_wr_buf_req_flowid - ,output logic [RX_PAYLOAD_PTR_W-1:0] datapath_wr_buf_req_wr_ptr + ,output logic [RX_PAYLOAD_PTR_W-1:0] datapath_wr_buf_req_wr_ptr_real ,output logic [`MSG_DATA_SIZE_WIDTH-1:0] datapath_wr_buf_req_size ,output logic [`NOC_DATA_WIDTH-1:0] datapath_wr_buf_req_data @@ -39,8 +45,10 @@ import tcp_pkg::*; rx_store_buf_q_struct q_entry_reg; rx_store_buf_q_struct q_entry_next; - logic [RX_PAYLOAD_PTR_W:0] commit_ptr_reg; - logic [RX_PAYLOAD_PTR_W:0] commit_ptr_next; + tcp_buf_idx commit_idx_reg; + tcp_buf_idx commit_idx_next; + tcp_buf commit_real_ptr_reg; + tcp_buf commit_real_ptr_next; logic [RX_TMP_BUF_ADDR_W-1:0] read_addr_reg; logic [RX_TMP_BUF_ADDR_W-1:0] read_addr_next; logic [PAYLOAD_ENTRY_LEN_W-1:0] bytes_left_reg; @@ -53,13 +61,17 @@ import tcp_pkg::*; assign last_transfer = bytes_left_reg <= `NOC_DATA_BYTES; assign datapath_wr_buf_req_flowid = q_entry_reg.flowid; - assign datapath_wr_buf_req_wr_ptr = commit_ptr_reg[RX_PAYLOAD_PTR_W-1:0]; + assign datapath_wr_buf_req_wr_ptr_real = commit_real_ptr_reg.ptr; // TODO: currently ignoring len and cap... hopefully that's ok! assign datapath_wr_buf_req_size = {{(`MSG_DATA_SIZE_WIDTH-PAYLOAD_ENTRY_LEN_W){1'b0}}, - q_entry_reg.payload_entry.payload_len}; + q_entry_reg.payload_entry.payload_len}; // TODO: change this if i ever want payload len != len to write at location. + + assign store_buf_commit_idx_rd_req_flowid = q_entry_next.flowid; + assign store_buf_commit_idx_wr_req_flowid = q_entry_reg.flowid; + // assign store_buf_commit_idx_wr_req_data = commit_idx_reg + q_entry_reg.payload_entry.payload_len; + assign store_buf_commit_idx_wr_req_data.idx = commit_idx_reg.idx + 1; - assign store_buf_commit_ptr_rd_req_flowid = q_entry_next.flowid; - assign store_buf_commit_ptr_wr_req_flowid = q_entry_reg.flowid; - assign store_buf_commit_ptr_wr_req_data = commit_ptr_reg + q_entry_reg.payload_entry.payload_len; + assign rx_store_buf_rx_buf_store_rd_req_flowid = q_entry_reg.flowid; // TODO: verify... i just copied from above + assign rx_store_buf_rx_buf_store_rd_req_idx = commit_idx_reg.idx[RX_PAYLOAD_IDX_W-1:0]; assign datapath_wr_buf_req_data = tmp_buf_store_store_buf_rx_rd_resp_data; @@ -69,20 +81,23 @@ import tcp_pkg::*; always_ff @(posedge clk) begin if (rst) begin q_entry_reg <= '0; - commit_ptr_reg <= '0; + commit_idx_reg <= '0; + commit_real_ptr_reg <= '0; read_addr_reg <= '0; bytes_left_reg <= '0; end else begin q_entry_reg <= q_entry_next; - commit_ptr_reg <= commit_ptr_next; + commit_idx_reg <= commit_idx_next; + commit_real_ptr_reg <= commit_real_ptr_next; read_addr_reg <= read_addr_next; bytes_left_reg <= bytes_left_next; end end assign q_entry_next = save_q_entry ? read_store_buf_q_req_data : q_entry_reg; - assign commit_ptr_next = save_commit_ptr ? commit_ptr_store_buf_rd_resp_data : commit_ptr_reg; + assign commit_idx_next = save_commit_idx ? commit_idx_store_buf_rd_resp_data : commit_idx_reg; + assign commit_real_ptr_next = save_commit_real_ptr ? rx_buf_store_rx_store_buf_rd_resp_data : commit_real_ptr_reg; always_comb begin if (init_tmp_buf_rd_metadata) begin diff --git a/recv_pipe/rx_pipe_wrap.sv b/recv_pipe/rx_pipe_wrap.sv deleted file mode 100644 index df1916a..0000000 --- a/recv_pipe/rx_pipe_wrap.sv +++ /dev/null @@ -1,669 +0,0 @@ -`include "noc_defs.vh" -`include "packet_defs.vh" -module rx_pipe_wrap -import tcp_pkg::*; -import packet_struct_pkg::*; -( - input clk - ,input rst - - ,input [`IP_ADDR_W-1:0] recv_src_ip - ,input [`IP_ADDR_W-1:0] recv_dst_ip - ,input recv_tcp_hdr_val - ,input tcp_pkt_hdr recv_tcp_hdr - ,input recv_payload_val - ,input payload_buf_struct recv_payload_entry - ,output recv_hdr_rdy - - ,output new_flow_val - ,output [FLOWID_W-1:0] new_flow_flow_id - ,output four_tuple_struct new_flow_lookup_entry - ,output tx_state_struct new_flow_tx_state - ,output recv_state_entry new_flow_rx_state - ,input new_flow_rdy - - ,output app_new_flow_notif_val - ,output [FLOWID_W-1:0] app_new_flow_flowid - - ,output logic rx_pipe_noc0_val - ,output logic [`NOC_DATA_WIDTH-1:0] rx_pipe_noc0_data - ,input logic noc0_rx_pipe_rdy - - ,input logic noc0_rx_pipe_val - ,input logic [`NOC_DATA_WIDTH-1:0] noc0_rx_pipe_data - ,output logic rx_pipe_noc0_rdy - - ,output curr_recv_state_rd_req_val - ,output [FLOWID_W-1:0] curr_recv_state_rd_req_addr - ,input curr_recv_state_rd_req_rdy - - ,input curr_recv_state_rd_resp_val - ,input recv_state_entry curr_recv_state_rd_resp_data - ,output curr_recv_state_rd_resp_rdy - - ,output next_recv_state_wr_req_val - ,output [FLOWID_W-1:0] next_recv_state_wr_req_addr - ,output recv_state_entry next_recv_state_wr_req_data - ,input next_recv_state_wr_req_rdy - - ,output curr_tx_state_rd_req_val - ,output [FLOWID_W-1:0] curr_tx_state_rd_req_flowid - ,input curr_tx_state_rd_req_rdy - - ,input curr_tx_state_rd_resp_val - ,input tx_state_struct curr_tx_state_rd_resp_data - ,output curr_tx_state_rd_resp_rdy - - ,output rx_pipe_tx_state_wr_req_val - ,output [FLOWID_W-1:0] rx_pipe_tx_state_wr_req_flowid - ,output tx_state_struct rx_pipe_tx_state_wr_req_data - ,input tx_state_rx_pipe_wr_req_rdy - - ,output rx_pipe_rt_store_set_rt_flag_val - ,output [FLOWID_W-1:0] rx_pipe_rt_store_set_rt_flag_flowid - - ,output rx_pipe_tx_head_ptr_wr_req_val - ,output [FLOWID_W-1:0] rx_pipe_tx_head_ptr_wr_req_flowid - ,output [TX_PAYLOAD_PTR_W:0] rx_pipe_tx_head_ptr_wr_req_data - ,input tx_head_ptr_rx_pipe_wr_req_rdy - - ,output logic rx_send_queue_enq_req_val - ,output rx_send_queue_struct rx_send_queue_enq_req_data - ,input logic send_queue_rx_full - - ,output logic rx_pipe_rx_head_ptr_rd_req_val - ,output logic [FLOWID_W-1:0] rx_pipe_rx_head_ptr_rd_req_addr - ,input logic rx_head_ptr_rx_pipe_rd_req_rdy - - ,input logic rx_head_ptr_rx_pipe_rd_resp_val - ,input logic [RX_PAYLOAD_PTR_W:0] rx_head_ptr_rx_pipe_rd_resp_data - ,output logic rx_pipe_rx_head_ptr_rd_resp_rdy - - ,output logic rx_pipe_rx_commit_ptr_wr_req_val - ,output logic [FLOWID_W-1:0] rx_pipe_rx_commit_ptr_wr_req_addr - ,output logic [RX_PAYLOAD_PTR_W:0] rx_pipe_rx_commit_ptr_wr_req_data - ,input logic rx_commit_ptr_rx_pipe_wr_req_rdy - - ,output logic rx_pipe_rx_commit_ptr_rd_req_val - ,output logic [FLOWID_W-1:0] rx_pipe_rx_commit_ptr_rd_req_addr - ,input logic rx_commit_ptr_rx_pipe_rd_req_rdy - - ,input logic rx_commit_ptr_rx_pipe_rd_resp_val - ,input logic [RX_PAYLOAD_PTR_W:0] rx_commit_ptr_rx_pipe_rd_resp_data - ,output logic rx_pipe_rx_commit_ptr_rd_resp_rdy - - ,output logic rx_pipe_rx_tail_ptr_wr_req_val - ,output logic [FLOWID_W-1:0] rx_pipe_rx_tail_ptr_wr_req_addr - ,output logic [RX_PAYLOAD_PTR_W:0] rx_pipe_rx_tail_ptr_wr_req_data - ,input logic rx_tail_ptr_rx_pipe_wr_req_rdy - - ,output logic rx_pipe_rx_tail_ptr_rd_req_val - ,output logic [FLOWID_W-1:0] rx_pipe_rx_tail_ptr_rd_req_addr - ,input logic rx_tail_ptr_rx_pipe_rd_req_rdy - - ,input logic rx_tail_ptr_rx_pipe_rd_resp_val - ,input logic [RX_PAYLOAD_PTR_W:0] rx_tail_ptr_rx_pipe_rd_resp_data - ,output logic rx_pipe_rx_tail_ptr_rd_resp_rdy - - ,output logic store_buf_tmp_buf_store_rx_rd_req_val - ,output logic [PAYLOAD_ENTRY_ADDR_W-1:0] store_buf_tmp_buf_store_rx_rd_req_addr - ,input logic tmp_buf_store_store_buf_rx_rd_req_rdy - - ,input logic tmp_buf_store_store_buf_rx_rd_resp_val - ,input logic [`MAC_INTERFACE_W-1:0] tmp_buf_store_store_buf_rx_rd_resp_data - ,output logic store_buf_tmp_buf_store_rx_rd_resp_rdy - - ,output logic store_buf_tmp_buf_free_slab_rx_req_val - ,output logic [RX_TMP_BUF_ADDR_W-1:0] store_buf_tmp_buf_free_slab_rx_req_addr - ,input logic tmp_buf_free_slab_store_buf_rx_req_rdy -); - - logic tcp_fsm_clear_temp_flowid_val; - four_tuple_struct tcp_fsm_clear_temp_tag; - - logic tcp_fsm_update_tcp_state_val; - logic [FLOWID_W-1:0] tcp_fsm_update_tcp_state_flowid; - tcp_flow_state_struct tcp_fsm_update_tcp_state_data; - logic tcp_fsm_update_tcp_state_rdy; - - logic est_hdr_val; - tcp_pkt_hdr est_tcp_hdr; - logic [FLOWID_W-1:0] est_flowid; - logic est_payload_val; - payload_buf_struct est_payload_entry; - logic est_pipe_rdy; - - logic fsm_send_pkt_enqueue_val; - logic [FLOWID_W-1:0] fsm_send_pkt_enqueue_flowid; - logic [`IP_ADDR_W-1:0] fsm_send_pkt_enqueue_src_ip; - logic [`IP_ADDR_W-1:0] fsm_send_pkt_enqueue_dst_ip; - tcp_pkt_hdr fsm_send_pkt_enqueue_hdr; - logic fsm_send_pkt_enqueue_rdy; - - logic tcp_fsm_new_flow_val; - logic [FLOWID_W-1:0] tcp_fsm_new_flow_flowid; - four_tuple_struct tcp_fsm_new_flow_lookup_entry; - recv_state_entry tcp_fsm_new_flow_rx_state; - tx_state_struct tcp_fsm_new_flow_tx_state; - logic tcp_fsm_clear_flowid_val; - four_tuple_struct tcp_fsm_clear_flowid_tag; - logic tcp_fsm_new_flow_state_rdy; - - rx_send_queue_struct rx_send_queue_entry; - - logic fsm_reinject_q_enq_req_val; - fsm_reinject_queue_struct fsm_reinject_q_enq_req_data; - logic fsm_reinject_q_full; - - logic merger_fsm_reinject_q_deq_req_val; - fsm_reinject_queue_struct fsm_reinject_q_merger_deq_resp_data; - logic fsm_reinject_q_merger_empty; - - logic issue_merger_est_hdr_val; - tcp_pkt_hdr issue_merger_est_tcp_hdr; - logic [FLOWID_W-1:0] issue_merger_est_flowid; - logic issue_merger_est_payload_val; - payload_buf_struct issue_merger_est_payload_entry; - logic merger_issue_est_pipe_rdy; - - logic issue_fsm_q_hdr_val; - logic [`IP_ADDR_W-1:0] issue_fsm_q_hdr_src_ip; - logic [`IP_ADDR_W-1:0] issue_fsm_q_hdr_dst_ip; - tcp_pkt_hdr issue_fsm_q_tcp_hdr; - logic issue_fsm_q_payload_val; - payload_buf_struct issue_fsm_q_payload_entry; - logic issue_fsm_q_new_flow; - logic [FLOWID_W-1:0] issue_fsm_q_flowid; - logic fsm_q_issue_rdy; - - logic issue_fsm_q_enq_req_val; - fsm_input_queue_struct issue_fsm_q_enq_req_data; - logic fsm_q_issue_full; - - logic fsm_q_fsm_pipe_hdr_val; - logic [`IP_ADDR_W-1:0] fsm_q_fsm_pipe_hdr_src_ip; - logic [`IP_ADDR_W-1:0] fsm_q_fsm_pipe_hdr_dst_ip; - tcp_pkt_hdr fsm_q_fsm_pipe_tcp_hdr; - logic fsm_q_fsm_pipe_payload_val; - payload_buf_struct fsm_q_fsm_pipe_payload_entry; - logic fsm_q_fsm_pipe_new_flow; - logic [FLOWID_W-1:0] fsm_q_fsm_pipe_flowid; - logic fsm_pipe_fsm_q_rdy; - - logic fsm_q_fsm_pipe_empty; - fsm_input_queue_struct fsm_q_fsm_pipe_deq_resp_data; - logic fsm_pipe_fsm_q_deq_req_val; - - logic fsm_tcp_state_rd_req_val; - logic [FLOWID_W-1:0] fsm_tcp_state_rd_req_flowid; - logic tcp_state_fsm_rd_req_rdy; - - logic tcp_state_fsm_rd_resp_val; - tcp_flow_state_struct tcp_state_fsm_rd_resp_data; - logic fsm_tcp_state_rd_resp_rdy; - - logic fsm_arbiter_tx_state_rd_req_val; - logic [FLOWID_W-1:0] fsm_arbiter_tx_state_rd_req_flowid; - logic arbiter_fsm_tx_state_rd_req_grant; - - logic fsm_arbiter_rx_state_rd_req_val; - logic [FLOWID_W-1:0] fsm_arbiter_rx_state_rd_req_flowid; - logic arbiter_fsm_rx_state_rd_req_grant; - - logic est_arbiter_tx_state_rd_req_val; - logic [FLOWID_W-1:0] est_arbiter_tx_state_rd_req_flowid; - logic arbiter_est_tx_state_rd_req_grant; - - logic est_arbiter_rx_state_rd_req_val; - logic [FLOWID_W-1:0] est_arbiter_rx_state_rd_req_flowid; - logic arbiter_est_rx_state_rd_req_grant; - - logic arbiter_fsm_tx_state_rd_resp_val; - tx_state_struct arbiter_fsm_tx_state_rd_resp_data; - logic fsm_arbiter_tx_state_rd_resp_rdy; - - logic arbiter_fsm_rx_state_rd_resp_val; - recv_state_entry arbiter_fsm_rx_state_rd_resp_data; - logic fsm_arbiter_rx_state_rd_resp_rdy; - - logic arbiter_est_tx_state_rd_resp_val; - tx_state_struct arbiter_est_tx_state_rd_resp_data; - logic est_arbiter_tx_state_rd_resp_rdy; - - logic arbiter_est_rx_state_rd_resp_val; - recv_state_entry arbiter_est_rx_state_rd_resp_data; - logic est_arbiter_rx_state_rd_resp_rdy; - - logic issue_pipe_flowid_manager_flowid_req; - logic flowid_manager_issue_pipe_flowid_avail; - logic [FLOWID_W-1:0] flowid_manager_issue_pipe_flowid; - - logic rx_store_buf_q_wr_req_val; - rx_store_buf_q_struct rx_store_buf_q_wr_req_data; - logic rx_store_buf_q_full; - - logic rx_store_buf_q_rd_req_val; - rx_store_buf_q_struct rx_store_buf_q_rd_req_data; - logic rx_store_buf_q_empty; - - - assign rx_send_queue_enq_req_val = fsm_send_pkt_enqueue_val & ~send_queue_rx_full; - assign rx_send_queue_entry.flowid = fsm_send_pkt_enqueue_flowid; - assign rx_send_queue_entry.src_ip = fsm_send_pkt_enqueue_src_ip; - assign rx_send_queue_entry.dst_ip = fsm_send_pkt_enqueue_dst_ip; - assign rx_send_queue_entry.tcp_hdr = fsm_send_pkt_enqueue_hdr; - assign rx_send_queue_enq_req_data = rx_send_queue_entry; - assign fsm_send_pkt_enqueue_rdy = ~send_queue_rx_full; - - assign new_flow_val = tcp_fsm_new_flow_val; - assign new_flow_flow_id = tcp_fsm_new_flow_flowid; - assign new_flow_lookup_entry = tcp_fsm_new_flow_lookup_entry; - assign new_flow_tx_state = tcp_fsm_new_flow_tx_state; - assign new_flow_rx_state = tcp_fsm_new_flow_rx_state; - - assign tcp_fsm_new_flow_state_rdy = new_flow_rdy; - - flowid_manager flowid_manager ( - .clk (clk) - ,.rst (rst) - - ,.flowid_ret_val (1'b0) - ,.flowid_ret_id ('0) - ,.flowid_ret_rdy () - - ,.flowid_req (issue_pipe_flowid_manager_flowid_req ) - ,.flowid_avail (flowid_manager_issue_pipe_flowid_avail ) - ,.flowid (flowid_manager_issue_pipe_flowid ) - ); - - rx_issue_pipe issue_pipe ( - .clk (clk) - ,.rst (rst) - - ,.recv_src_ip (recv_src_ip ) - ,.recv_dst_ip (recv_dst_ip ) - ,.recv_tcp_hdr_val (recv_tcp_hdr_val ) - ,.recv_tcp_hdr (recv_tcp_hdr ) - ,.recv_hdr_rdy (recv_hdr_rdy ) - - ,.recv_payload_val (recv_payload_val ) - ,.recv_payload_entry (recv_payload_entry ) - - ,.tcp_fsm_clear_flowid_val (1'b0) - ,.tcp_fsm_clear_flowid_tag ('0) - ,.tcp_fsm_clear_flowid_flowid ('0) - - ,.issue_pipe_flowid_manager_flowid_req (issue_pipe_flowid_manager_flowid_req ) - ,.flowid_manager_issue_pipe_flowid_avail(flowid_manager_issue_pipe_flowid_avail ) - ,.flowid_manager_issue_pipe_flowid (flowid_manager_issue_pipe_flowid ) - - ,.tcp_fsm_update_tcp_state_val (tcp_fsm_update_tcp_state_val ) - ,.tcp_fsm_update_tcp_state_flowid (tcp_fsm_update_tcp_state_flowid ) - ,.tcp_fsm_update_tcp_state_data (tcp_fsm_update_tcp_state_data ) - ,.tcp_fsm_update_tcp_state_rdy (tcp_fsm_update_tcp_state_rdy ) - - ,.fsm_tcp_state_rd_req_val (fsm_tcp_state_rd_req_val ) - ,.fsm_tcp_state_rd_req_flowid (fsm_tcp_state_rd_req_flowid ) - ,.tcp_state_fsm_rd_req_rdy (tcp_state_fsm_rd_req_rdy ) - - ,.tcp_state_fsm_rd_resp_val (tcp_state_fsm_rd_resp_val ) - ,.tcp_state_fsm_rd_resp_data (tcp_state_fsm_rd_resp_data ) - ,.fsm_tcp_state_rd_resp_rdy (fsm_tcp_state_rd_resp_rdy ) - - ,.est_hdr_val (issue_merger_est_hdr_val ) - ,.est_tcp_hdr (issue_merger_est_tcp_hdr ) - ,.est_flowid (issue_merger_est_flowid ) - ,.est_payload_val (issue_merger_est_payload_val ) - ,.est_payload_entry (issue_merger_est_payload_entry ) - ,.est_pipe_rdy (merger_issue_est_pipe_rdy ) - - ,.fsm_hdr_val (issue_fsm_q_hdr_val ) - ,.fsm_hdr_src_ip (issue_fsm_q_hdr_src_ip ) - ,.fsm_hdr_dst_ip (issue_fsm_q_hdr_dst_ip ) - ,.fsm_tcp_hdr (issue_fsm_q_tcp_hdr ) - ,.fsm_payload_val (issue_fsm_q_payload_val ) - ,.fsm_payload_entry (issue_fsm_q_payload_entry ) - ,.fsm_new_flow (issue_fsm_q_new_flow ) - ,.fsm_flowid (issue_fsm_q_flowid ) - ,.fsm_pipe_rdy (fsm_q_issue_rdy ) - ); - - est_pipe_input_merger est_pipe_input_merger ( - .issue_merger_est_hdr_val (issue_merger_est_hdr_val ) - ,.issue_merger_est_tcp_hdr (issue_merger_est_tcp_hdr ) - ,.issue_merger_est_flowid (issue_merger_est_flowid ) - ,.issue_merger_est_payload_val (issue_merger_est_payload_val ) - ,.issue_merger_est_payload_entry (issue_merger_est_payload_entry ) - ,.merger_issue_est_pipe_rdy (merger_issue_est_pipe_rdy ) - - ,.merger_fsm_reinject_q_deq_req_val (merger_fsm_reinject_q_deq_req_val ) - ,.fsm_reinject_q_merger_deq_resp_data (fsm_reinject_q_merger_deq_resp_data ) - ,.fsm_reinject_q_merger_empty (fsm_reinject_q_merger_empty ) - - ,.est_hdr_val (est_hdr_val ) - ,.est_tcp_hdr (est_tcp_hdr ) - ,.est_flowid (est_flowid ) - ,.est_payload_val (est_payload_val ) - ,.est_payload_entry (est_payload_entry ) - ,.est_pipe_rdy (est_pipe_rdy ) - ); - - // reinject queue - fifo_1r1w #( - .width_p (FSM_REINJECT_QUEUE_STRUCT_W) - ,.log2_els_p (2) - ) reinject_queue ( - .clk (clk) - ,.rst (rst) - - ,.rd_req (merger_fsm_reinject_q_deq_req_val ) - ,.rd_data (fsm_reinject_q_merger_deq_resp_data ) - ,.empty (fsm_reinject_q_merger_empty ) - - ,.wr_req (fsm_reinject_q_enq_req_val ) - ,.wr_data (fsm_reinject_q_enq_req_data ) - ,.full (fsm_reinject_q_full ) - ); - - est_pipe est_flow_pipe ( - .clk (clk) - ,.rst (rst) - - ,.est_hdr_val (est_hdr_val ) - ,.est_tcp_hdr (est_tcp_hdr ) - ,.est_flowid (est_flowid ) - ,.est_payload_val (est_payload_val ) - ,.est_payload_entry (est_payload_entry ) - ,.est_pipe_rdy (est_pipe_rdy ) - - ,.est_pipe_rx_state_rd_req_val (est_arbiter_rx_state_rd_req_val ) - ,.est_pipe_rx_state_rd_req_flowid (est_arbiter_rx_state_rd_req_flowid ) - ,.rx_state_est_pipe_rd_req_rdy (arbiter_est_rx_state_rd_req_grant ) - - ,.rx_state_est_pipe_rd_resp_val (arbiter_est_rx_state_rd_resp_val ) - ,.rx_state_est_pipe_rd_resp_data (arbiter_est_rx_state_rd_resp_data ) - ,.est_pipe_rx_state_rd_resp_rdy (est_arbiter_rx_state_rd_resp_rdy ) - - ,.est_pipe_tx_state_rd_req_val (est_arbiter_tx_state_rd_req_val ) - ,.est_pipe_tx_state_rd_req_flowid (est_arbiter_tx_state_rd_req_flowid ) - ,.tx_state_est_pipe_rd_req_rdy (arbiter_est_tx_state_rd_req_grant ) - - ,.tx_state_est_pipe_rd_resp_val (arbiter_est_tx_state_rd_resp_val ) - ,.tx_state_est_pipe_rd_resp_data (arbiter_est_tx_state_rd_resp_data ) - ,.est_pipe_tx_state_rd_resp_rdy (est_arbiter_tx_state_rd_resp_rdy ) - - ,.next_recv_state_wr_req_val (next_recv_state_wr_req_val ) - ,.next_recv_state_wr_req_addr (next_recv_state_wr_req_addr ) - ,.next_recv_state_wr_req_data (next_recv_state_wr_req_data ) - ,.next_recv_state_wr_req_rdy (next_recv_state_wr_req_rdy ) - - ,.rx_pipe_tx_state_wr_req_val (rx_pipe_tx_state_wr_req_val ) - ,.rx_pipe_tx_state_wr_req_flowid (rx_pipe_tx_state_wr_req_flowid ) - ,.rx_pipe_tx_state_wr_req_data (rx_pipe_tx_state_wr_req_data ) - ,.tx_state_rx_pipe_wr_req_rdy (tx_state_rx_pipe_wr_req_rdy ) - - ,.set_rt_flag_val (rx_pipe_rt_store_set_rt_flag_val ) - ,.set_rt_flag_flowid (rx_pipe_rt_store_set_rt_flag_flowid) - - ,.rx_pipe_tx_head_ptr_wr_req_val (rx_pipe_tx_head_ptr_wr_req_val ) - ,.rx_pipe_tx_head_ptr_wr_req_flowid (rx_pipe_tx_head_ptr_wr_req_flowid ) - ,.rx_pipe_tx_head_ptr_wr_req_data (rx_pipe_tx_head_ptr_wr_req_data ) - ,.tx_head_ptr_rx_pipe_wr_req_rdy (tx_head_ptr_rx_pipe_wr_req_rdy ) - - ,.rx_pipe_rx_head_ptr_rd_req_val (rx_pipe_rx_head_ptr_rd_req_val ) - ,.rx_pipe_rx_head_ptr_rd_req_addr (rx_pipe_rx_head_ptr_rd_req_addr ) - ,.rx_head_ptr_rx_pipe_rd_req_rdy (rx_head_ptr_rx_pipe_rd_req_rdy ) - - ,.rx_head_ptr_rx_pipe_rd_resp_val (rx_head_ptr_rx_pipe_rd_resp_val ) - ,.rx_head_ptr_rx_pipe_rd_resp_data (rx_head_ptr_rx_pipe_rd_resp_data ) - ,.rx_pipe_rx_head_ptr_rd_resp_rdy (rx_pipe_rx_head_ptr_rd_resp_rdy ) - - ,.rx_pipe_rx_tail_ptr_wr_req_val (rx_pipe_rx_tail_ptr_wr_req_val ) - ,.rx_pipe_rx_tail_ptr_wr_req_addr (rx_pipe_rx_tail_ptr_wr_req_addr ) - ,.rx_pipe_rx_tail_ptr_wr_req_data (rx_pipe_rx_tail_ptr_wr_req_data ) - ,.rx_tail_ptr_rx_pipe_wr_req_rdy (rx_tail_ptr_rx_pipe_wr_req_rdy ) - - ,.rx_pipe_rx_tail_ptr_rd_req_val (rx_pipe_rx_tail_ptr_rd_req_val ) - ,.rx_pipe_rx_tail_ptr_rd_req_addr (rx_pipe_rx_tail_ptr_rd_req_addr ) - ,.rx_tail_ptr_rx_pipe_rd_req_rdy (rx_tail_ptr_rx_pipe_rd_req_rdy ) - - ,.rx_tail_ptr_rx_pipe_rd_resp_val (rx_tail_ptr_rx_pipe_rd_resp_val ) - ,.rx_tail_ptr_rx_pipe_rd_resp_data (rx_tail_ptr_rx_pipe_rd_resp_data ) - ,.rx_pipe_rx_tail_ptr_rd_resp_rdy (rx_pipe_rx_tail_ptr_rd_resp_rdy ) - - ,.rx_store_buf_q_wr_req_val (rx_store_buf_q_wr_req_val ) - ,.rx_store_buf_q_wr_req_data (rx_store_buf_q_wr_req_data ) - ,.rx_store_buf_q_full (rx_store_buf_q_full ) - ); - - - fifo_1r1w #( - .width_p (RX_STORE_BUF_Q_STRUCT_W) - ,.log2_els_p(5) - ) rx_store_buf_q ( - .clk (clk ) - ,.rst (rst ) - - ,.wr_req (rx_store_buf_q_wr_req_val ) - ,.wr_data (rx_store_buf_q_wr_req_data ) - ,.full (rx_store_buf_q_full ) - - ,.rd_req (rx_store_buf_q_rd_req_val ) - ,.rd_data (rx_store_buf_q_rd_req_data ) - ,.empty (rx_store_buf_q_empty ) - ); - - - rx_payload_store_buf_cp #( - .SRC_X (0) - ,.SRC_Y (1) - ,.RX_DRAM_X (1) - ,.RX_DRAM_Y (1) - ) store_buf_cp ( - .clk (clk ) - ,.rst (rst ) - - // I/O for the NoC - ,.rx_payload_noc0_val (rx_pipe_noc0_val ) - ,.rx_payload_noc0_data (rx_pipe_noc0_data ) - ,.noc0_rx_payload_rdy (noc0_rx_pipe_rdy ) - - ,.noc0_rx_payload_val (noc0_rx_pipe_val ) - ,.noc0_rx_payload_data (noc0_rx_pipe_data ) - ,.rx_payload_noc0_rdy (rx_pipe_noc0_rdy ) - - // For reading out a packet from the queue - ,.read_store_buf_q_req_val (rx_store_buf_q_rd_req_val ) - ,.read_store_buf_q_req_data (rx_store_buf_q_rd_req_data ) - ,.read_store_buf_q_empty (rx_store_buf_q_empty ) - - // for getting stuff from the temp buffer - ,.store_buf_tmp_buf_store_rx_rd_req_val (store_buf_tmp_buf_store_rx_rd_req_val ) - ,.store_buf_tmp_buf_store_rx_rd_req_addr (store_buf_tmp_buf_store_rx_rd_req_addr ) - ,.tmp_buf_store_store_buf_rx_rd_req_rdy (tmp_buf_store_store_buf_rx_rd_req_rdy ) - - ,.tmp_buf_store_store_buf_rx_rd_resp_val (tmp_buf_store_store_buf_rx_rd_resp_val ) - ,.tmp_buf_store_store_buf_rx_rd_resp_data (tmp_buf_store_store_buf_rx_rd_resp_data) - ,.store_buf_tmp_buf_store_rx_rd_resp_rdy (store_buf_tmp_buf_store_rx_rd_resp_rdy ) - - ,.store_buf_tmp_buf_free_slab_rx_req_val (store_buf_tmp_buf_free_slab_rx_req_val ) - ,.store_buf_tmp_buf_free_slab_rx_req_addr (store_buf_tmp_buf_free_slab_rx_req_addr) - ,.tmp_buf_free_slab_store_buf_rx_req_rdy (tmp_buf_free_slab_store_buf_rx_req_rdy ) - - ,.store_buf_commit_ptr_rd_req_val (rx_pipe_rx_commit_ptr_rd_req_val ) - ,.store_buf_commit_ptr_rd_req_flowid (rx_pipe_rx_commit_ptr_rd_req_addr ) - ,.commit_ptr_store_buf_rd_req_rdy (rx_commit_ptr_rx_pipe_rd_req_rdy ) - - ,.commit_ptr_store_buf_rd_resp_val (rx_commit_ptr_rx_pipe_rd_resp_val ) - ,.commit_ptr_store_buf_rd_resp_data (rx_commit_ptr_rx_pipe_rd_resp_data ) - ,.store_buf_commit_ptr_rd_resp_rdy (rx_pipe_rx_commit_ptr_rd_resp_rdy ) - - ,.store_buf_commit_ptr_wr_req_val (rx_pipe_rx_commit_ptr_wr_req_val ) - ,.store_buf_commit_ptr_wr_req_flowid (rx_pipe_rx_commit_ptr_wr_req_addr ) - ,.store_buf_commit_ptr_wr_req_data (rx_pipe_rx_commit_ptr_wr_req_data ) - ,.commit_ptr_store_buf_wr_req_rdy (rx_commit_ptr_rx_pipe_wr_req_rdy ) - ); - - - assign fsm_q_issue_rdy = ~fsm_q_issue_full; - assign issue_fsm_q_enq_req_val = issue_fsm_q_hdr_val & ~fsm_q_issue_full; - - assign issue_fsm_q_enq_req_data.src_ip = issue_fsm_q_hdr_src_ip; - assign issue_fsm_q_enq_req_data.dst_ip = issue_fsm_q_hdr_dst_ip; - assign issue_fsm_q_enq_req_data.tcp_hdr = issue_fsm_q_tcp_hdr; - assign issue_fsm_q_enq_req_data.payload_val = issue_fsm_q_payload_val; - assign issue_fsm_q_enq_req_data.payload_entry = issue_fsm_q_payload_entry; - assign issue_fsm_q_enq_req_data.new_flow = issue_fsm_q_new_flow; - assign issue_fsm_q_enq_req_data.flowid = issue_fsm_q_flowid; - - - // fsm_pipe_queue - fifo_1r1w #( - .width_p (FSM_INPUT_QUEUE_STRUCT_W) - ,.log2_els_p (2) - ) fsm_queue ( - .clk (clk) - ,.rst (rst) - - ,.rd_req (fsm_pipe_fsm_q_deq_req_val ) - ,.empty (fsm_q_fsm_pipe_empty ) - ,.rd_data (fsm_q_fsm_pipe_deq_resp_data ) - - ,.wr_req (issue_fsm_q_enq_req_val ) - ,.wr_data (issue_fsm_q_enq_req_data ) - ,.full (fsm_q_issue_full ) - ); - - assign fsm_q_fsm_pipe_hdr_val = ~fsm_q_fsm_pipe_empty; - assign fsm_pipe_fsm_q_deq_req_val = fsm_pipe_fsm_q_rdy & ~fsm_q_fsm_pipe_empty; - - assign fsm_q_fsm_pipe_hdr_src_ip = fsm_q_fsm_pipe_deq_resp_data.src_ip; - assign fsm_q_fsm_pipe_hdr_dst_ip = fsm_q_fsm_pipe_deq_resp_data.dst_ip; - assign fsm_q_fsm_pipe_tcp_hdr = fsm_q_fsm_pipe_deq_resp_data.tcp_hdr; - assign fsm_q_fsm_pipe_payload_val = fsm_q_fsm_pipe_deq_resp_data.payload_val; - assign fsm_q_fsm_pipe_payload_entry = fsm_q_fsm_pipe_deq_resp_data.payload_entry; - assign fsm_q_fsm_pipe_new_flow = fsm_q_fsm_pipe_deq_resp_data.new_flow; - assign fsm_q_fsm_pipe_flowid = fsm_q_fsm_pipe_deq_resp_data.flowid; - - - rx_fsm_pipe fsm_pipe ( - .clk (clk) - ,.rst (rst) - - ,.fsm_hdr_val (fsm_q_fsm_pipe_hdr_val ) - ,.fsm_hdr_src_ip (fsm_q_fsm_pipe_hdr_src_ip ) - ,.fsm_hdr_dst_ip (fsm_q_fsm_pipe_hdr_dst_ip ) - ,.fsm_tcp_hdr (fsm_q_fsm_pipe_tcp_hdr ) - ,.fsm_payload_val (fsm_q_fsm_pipe_payload_val ) - ,.fsm_payload_entry (fsm_q_fsm_pipe_payload_entry ) - ,.fsm_new_flow (fsm_q_fsm_pipe_new_flow ) - ,.fsm_flowid (fsm_q_fsm_pipe_flowid ) - ,.fsm_hdr_rdy (fsm_pipe_fsm_q_rdy ) - - ,.fsm_tcp_state_rd_req_val (fsm_tcp_state_rd_req_val ) - ,.fsm_tcp_state_rd_req_flowid (fsm_tcp_state_rd_req_flowid ) - ,.tcp_state_fsm_rd_req_rdy (tcp_state_fsm_rd_req_rdy ) - - ,.tcp_state_fsm_rd_resp_val (tcp_state_fsm_rd_resp_val ) - ,.tcp_state_fsm_rd_resp_data (tcp_state_fsm_rd_resp_data ) - ,.fsm_tcp_state_rd_resp_rdy (fsm_tcp_state_rd_resp_rdy ) - - ,.fsm_rx_state_rd_req_val (fsm_arbiter_rx_state_rd_req_val ) - ,.fsm_rx_state_rd_req_flowid (fsm_arbiter_rx_state_rd_req_flowid ) - ,.rx_state_fsm_rd_req_rdy (arbiter_fsm_rx_state_rd_req_grant ) - - ,.rx_state_fsm_rd_resp_val (arbiter_fsm_rx_state_rd_resp_val ) - ,.rx_state_fsm_rd_resp_data (arbiter_fsm_rx_state_rd_resp_data ) - ,.fsm_rx_state_rd_resp_rdy (fsm_arbiter_rx_state_rd_resp_rdy ) - - ,.fsm_tx_state_rd_req_val (fsm_arbiter_tx_state_rd_req_val ) - ,.fsm_tx_state_rd_req_flowid (fsm_arbiter_tx_state_rd_req_flowid ) - ,.tx_state_fsm_rd_req_rdy (arbiter_fsm_tx_state_rd_req_grant ) - - ,.tx_state_fsm_rd_resp_val (arbiter_fsm_tx_state_rd_resp_val ) - ,.tx_state_fsm_rd_resp_data (arbiter_fsm_tx_state_rd_resp_data ) - ,.fsm_tx_state_rd_resp_rdy (fsm_arbiter_tx_state_rd_resp_rdy ) - - ,.fsm_reinject_q_enq_req_val (fsm_reinject_q_enq_req_val ) - ,.fsm_reinject_q_enq_req_data (fsm_reinject_q_enq_req_data ) - ,.fsm_reinject_q_full (fsm_reinject_q_full ) - - ,.fsm_send_pkt_enqueue_val (fsm_send_pkt_enqueue_val ) - ,.fsm_send_pkt_enqueue_flowid (fsm_send_pkt_enqueue_flowid ) - ,.fsm_send_pkt_enqueue_src_ip (fsm_send_pkt_enqueue_src_ip ) - ,.fsm_send_pkt_enqueue_dst_ip (fsm_send_pkt_enqueue_dst_ip ) - ,.fsm_send_pkt_enqueue_hdr (fsm_send_pkt_enqueue_hdr ) - ,.fsm_send_pkt_enqueue_rdy (fsm_send_pkt_enqueue_rdy ) - - ,.next_flow_state_wr_req_val (tcp_fsm_update_tcp_state_val ) - ,.next_flow_state_wr_req_data (tcp_fsm_update_tcp_state_data ) - ,.next_flow_state_wr_req_flowid (tcp_fsm_update_tcp_state_flowid ) - ,.next_flow_state_rdy (tcp_fsm_update_tcp_state_rdy ) - - ,.app_new_flow_notif_val (app_new_flow_notif_val ) - ,.app_new_flow_flowid (app_new_flow_flowid ) - - ,.new_flow_val (tcp_fsm_new_flow_val ) - ,.new_flow_flowid (tcp_fsm_new_flow_flowid ) - ,.new_flow_lookup_entry (tcp_fsm_new_flow_lookup_entry ) - ,.new_flow_rx_state (tcp_fsm_new_flow_rx_state ) - ,.new_flow_tx_state (tcp_fsm_new_flow_tx_state ) - ,.tcp_fsm_clear_flowid_val (tcp_fsm_clear_flowid_val ) - ,.tcp_fsm_clear_flowid_tag (tcp_fsm_clear_flowid_tag ) - ,.new_flow_rdy (tcp_fsm_new_flow_state_rdy ) - ); - - fsm_est_arbiter fsm_est_pipe_arbiter ( - .clk (clk) - ,.rst (rst) - - ,.fsm_arbiter_tx_state_rd_req_val (fsm_arbiter_tx_state_rd_req_val ) - ,.fsm_arbiter_tx_state_rd_req_flowid (fsm_arbiter_tx_state_rd_req_flowid ) - ,.arbiter_fsm_tx_state_rd_req_grant (arbiter_fsm_tx_state_rd_req_grant ) - - ,.fsm_arbiter_rx_state_rd_req_val (fsm_arbiter_rx_state_rd_req_val ) - ,.fsm_arbiter_rx_state_rd_req_flowid (fsm_arbiter_rx_state_rd_req_flowid ) - ,.arbiter_fsm_rx_state_rd_req_grant (arbiter_fsm_rx_state_rd_req_grant ) - - ,.est_arbiter_tx_state_rd_req_val (est_arbiter_tx_state_rd_req_val ) - ,.est_arbiter_tx_state_rd_req_flowid (est_arbiter_tx_state_rd_req_flowid ) - ,.arbiter_est_tx_state_rd_req_grant (arbiter_est_tx_state_rd_req_grant ) - - ,.est_arbiter_rx_state_rd_req_val (est_arbiter_rx_state_rd_req_val ) - ,.est_arbiter_rx_state_rd_req_flowid (est_arbiter_rx_state_rd_req_flowid ) - ,.arbiter_est_rx_state_rd_req_grant (arbiter_est_rx_state_rd_req_grant ) - - ,.curr_recv_state_rd_req_val (curr_recv_state_rd_req_val ) - ,.curr_recv_state_rd_req_flowid (curr_recv_state_rd_req_addr ) - ,.curr_recv_state_rd_req_rdy (curr_recv_state_rd_req_rdy ) - - ,.curr_recv_state_rd_resp_val (curr_recv_state_rd_resp_val ) - ,.curr_recv_state_rd_resp_data (curr_recv_state_rd_resp_data ) - ,.curr_recv_state_rd_resp_rdy (curr_recv_state_rd_resp_rdy ) - - ,.curr_tx_state_rd_req_val (curr_tx_state_rd_req_val ) - ,.curr_tx_state_rd_req_flowid (curr_tx_state_rd_req_flowid ) - ,.curr_tx_state_rd_req_rdy (curr_tx_state_rd_req_rdy ) - - ,.curr_tx_state_rd_resp_val (curr_tx_state_rd_resp_val ) - ,.curr_tx_state_rd_resp_data (curr_tx_state_rd_resp_data ) - ,.curr_tx_state_rd_resp_rdy (curr_tx_state_rd_resp_rdy ) - - ,.arbiter_fsm_tx_state_rd_resp_val (arbiter_fsm_tx_state_rd_resp_val ) - ,.arbiter_fsm_tx_state_rd_resp_data (arbiter_fsm_tx_state_rd_resp_data ) - ,.fsm_arbiter_tx_state_rd_resp_rdy (fsm_arbiter_tx_state_rd_resp_rdy ) - - ,.arbiter_fsm_rx_state_rd_resp_val (arbiter_fsm_rx_state_rd_resp_val ) - ,.arbiter_fsm_rx_state_rd_resp_data (arbiter_fsm_rx_state_rd_resp_data ) - ,.fsm_arbiter_rx_state_rd_resp_rdy (fsm_arbiter_rx_state_rd_resp_rdy ) - - ,.arbiter_est_tx_state_rd_resp_val (arbiter_est_tx_state_rd_resp_val ) - ,.arbiter_est_tx_state_rd_resp_data (arbiter_est_tx_state_rd_resp_data ) - ,.est_arbiter_tx_state_rd_resp_rdy (est_arbiter_tx_state_rd_resp_rdy ) - - ,.arbiter_est_rx_state_rd_resp_val (arbiter_est_rx_state_rd_resp_val ) - ,.arbiter_est_rx_state_rd_resp_data (arbiter_est_rx_state_rd_resp_data ) - ,.est_arbiter_rx_state_rd_resp_rdy (est_arbiter_rx_state_rd_resp_rdy ) - ); - -endmodule diff --git a/send_pipe/payload_pointers.sv b/send_pipe/payload_pointers.sv deleted file mode 100644 index 1052c4d..0000000 --- a/send_pipe/payload_pointers.sv +++ /dev/null @@ -1,153 +0,0 @@ -module payload_pointers -import tcp_pkg::*; -( - input clk - ,input rst - - ,input payload_head_ptr_rd_req0_val - ,input [FLOWID_W-1:0] payload_head_ptr_rd_req0_flowid - ,output logic payload_head_ptr_rd_req0_rdy - - ,output payload_head_ptr_rd_resp0_val - ,output logic [FLOWID_W-1:0] payload_head_ptr_rd_resp0_flowid - ,output logic [TX_PAYLOAD_PTR_W:0] payload_head_ptr_rd_resp0_data - ,input logic payload_head_ptr_rd_resp0_rdy - - ,input payload_head_ptr_rd_req1_val - ,input [FLOWID_W-1:0] payload_head_ptr_rd_req1_flowid - ,output logic payload_head_ptr_rd_req1_rdy - - ,output payload_head_ptr_rd_resp1_val - ,output logic [FLOWID_W-1:0] payload_head_ptr_rd_resp1_flowid - ,output logic [TX_PAYLOAD_PTR_W:0] payload_head_ptr_rd_resp1_data - ,input logic payload_head_ptr_rd_resp1_rdy - - ,input payload_head_ptr_wr_req_val - ,input [FLOWID_W-1:0] payload_head_ptr_wr_req_flowid - ,input [TX_PAYLOAD_PTR_W:0] payload_head_ptr_wr_req_data - ,output payload_head_ptr_wr_req_rdy - - ,input payload_tail_ptr_rd_req0_val - ,input [FLOWID_W-1:0] payload_tail_ptr_rd_req0_flowid - ,output logic payload_tail_ptr_rd_req0_rdy - - ,output payload_tail_ptr_rd_resp0_val - ,output logic [FLOWID_W-1:0] payload_tail_ptr_rd_resp0_flowid - ,output logic [TX_PAYLOAD_PTR_W:0] payload_tail_ptr_rd_resp0_data - ,input logic payload_tail_ptr_rd_resp0_rdy - - ,input payload_tail_ptr_rd_req1_val - ,input [FLOWID_W-1:0] payload_tail_ptr_rd_req1_flowid - ,output logic payload_tail_ptr_rd_req1_rdy - - ,output payload_tail_ptr_rd_resp1_val - ,output logic [FLOWID_W-1:0] payload_tail_ptr_rd_resp1_flowid - ,output logic [TX_PAYLOAD_PTR_W:0] payload_tail_ptr_rd_resp1_data - ,input logic payload_tail_ptr_rd_resp1_rdy - - ,input payload_tail_ptr_wr_req_val - ,input [FLOWID_W-1:0] payload_tail_ptr_wr_req_flowid - ,input [TX_PAYLOAD_PTR_W:0] payload_tail_ptr_wr_req_data - ,output payload_tail_ptr_wr_req_rdy - - ,input new_flow_val - ,input [FLOWID_W-1:0] new_flow_flowid - ,input [TX_PAYLOAD_PTR_W:0] new_flow_head_ptr - ,input [TX_PAYLOAD_PTR_W:0] new_flow_tail_ptr - ,output new_flow_rdy -); - - logic head_ptr_wr_req_val; - logic [FLOWID_W-1:0] head_ptr_wr_req_addr; - logic [TX_PAYLOAD_PTR_W:0] head_ptr_wr_req_data; - logic head_ptr_wr_req_rdy; - - logic tail_ptr_wr_req_val; - logic [FLOWID_W-1:0] tail_ptr_wr_req_addr; - logic [TX_PAYLOAD_PTR_W:0] tail_ptr_wr_req_data; - logic tail_ptr_wr_req_rdy; - - assign new_flow_rdy = head_ptr_wr_req_rdy & tail_ptr_wr_req_rdy; - // we always accept the new flow write request over any other write request - assign payload_head_ptr_wr_req_rdy = ~new_flow_val & (head_ptr_wr_req_rdy); - assign payload_tail_ptr_wr_req_rdy = ~new_flow_val; - - assign head_ptr_wr_req_val = new_flow_val | payload_head_ptr_wr_req_val; - assign head_ptr_wr_req_addr = new_flow_val - ? new_flow_flowid - : payload_head_ptr_wr_req_flowid; - assign head_ptr_wr_req_data = new_flow_val - ? new_flow_head_ptr - : payload_head_ptr_wr_req_data; - - assign tail_ptr_wr_req_val = new_flow_val | payload_tail_ptr_wr_req_val; - assign tail_ptr_wr_req_addr = new_flow_val - ? new_flow_flowid - : payload_tail_ptr_wr_req_flowid; - assign tail_ptr_wr_req_data = new_flow_val - ? new_flow_tail_ptr - : payload_tail_ptr_wr_req_data; - - ram_2r1w_sync_backpressure #( - .width_p (TX_PAYLOAD_PTR_W+1 ) - ,.els_p (MAX_FLOW_CNT ) - ) head_ptrs ( - .clk (clk) - ,.rst (rst) - - ,.wr_req_val (head_ptr_wr_req_val ) - ,.wr_req_addr (head_ptr_wr_req_addr ) - ,.wr_req_data (head_ptr_wr_req_data ) - ,.wr_req_rdy (head_ptr_wr_req_rdy ) - - ,.rd0_req_val (payload_head_ptr_rd_req0_val ) - ,.rd0_req_addr (payload_head_ptr_rd_req0_flowid ) - ,.rd0_req_rdy (payload_head_ptr_rd_req0_rdy ) - - ,.rd0_resp_val (payload_head_ptr_rd_resp0_val ) - ,.rd0_resp_addr (payload_head_ptr_rd_resp0_flowid ) - ,.rd0_resp_data (payload_head_ptr_rd_resp0_data ) - ,.rd0_resp_rdy (payload_head_ptr_rd_resp0_rdy ) - - ,.rd1_req_val (payload_head_ptr_rd_req1_val ) - ,.rd1_req_addr (payload_head_ptr_rd_req1_flowid ) - ,.rd1_req_rdy (payload_head_ptr_rd_req1_rdy ) - - ,.rd1_resp_val (payload_head_ptr_rd_resp1_val ) - ,.rd1_resp_addr (payload_head_ptr_rd_resp1_flowid ) - ,.rd1_resp_data (payload_head_ptr_rd_resp1_data ) - ,.rd1_resp_rdy (payload_head_ptr_rd_resp1_rdy ) - ); - - ram_2r1w_sync_backpressure #( - .width_p (TX_PAYLOAD_PTR_W+1 ) - ,.els_p (MAX_FLOW_CNT ) - ) tail_ptrs ( - .clk (clk) - ,.rst (rst) - - ,.wr_req_val (tail_ptr_wr_req_val ) - ,.wr_req_addr (tail_ptr_wr_req_addr ) - ,.wr_req_data (tail_ptr_wr_req_data ) - ,.wr_req_rdy (tail_ptr_wr_req_rdy ) - - ,.rd0_req_val (payload_tail_ptr_rd_req0_val ) - ,.rd0_req_addr (payload_tail_ptr_rd_req0_flowid ) - ,.rd0_req_rdy (payload_tail_ptr_rd_req0_rdy ) - - ,.rd0_resp_val (payload_tail_ptr_rd_resp0_val ) - ,.rd0_resp_addr (payload_tail_ptr_rd_resp0_flowid ) - ,.rd0_resp_data (payload_tail_ptr_rd_resp0_data ) - ,.rd0_resp_rdy (payload_tail_ptr_rd_resp0_rdy ) - - ,.rd1_req_val (payload_tail_ptr_rd_req1_val ) - ,.rd1_req_addr (payload_tail_ptr_rd_req1_flowid ) - ,.rd1_req_rdy (payload_tail_ptr_rd_req1_rdy ) - - ,.rd1_resp_val (payload_tail_ptr_rd_resp1_val ) - ,.rd1_resp_addr (payload_tail_ptr_rd_resp1_flowid ) - ,.rd1_resp_data (payload_tail_ptr_rd_resp1_data ) - ,.rd1_resp_rdy (payload_tail_ptr_rd_resp1_rdy ) - ); - -endmodule diff --git a/send_pipe/send_merger.sv b/send_pipe/send_merger.sv deleted file mode 100644 index 638aeb9..0000000 --- a/send_pipe/send_merger.sv +++ /dev/null @@ -1,63 +0,0 @@ -`include "packet_defs.vh" -module send_merger -import packet_struct_pkg::*; -import tcp_pkg::*; -( - input logic tx_pipe_merger_tx_val - ,input logic [FLOWID_W-1:0] tx_pipe_merger_tx_flowid - ,input logic [`IP_ADDR_W-1:0] tx_pipe_merger_tx_src_ip - ,input logic [`IP_ADDR_W-1:0] tx_pipe_merger_tx_dst_ip - ,input tcp_pkt_hdr tx_pipe_merger_tx_tcp_hdr - ,input payload_buf_struct tx_pipe_merger_tx_payload - ,output logic merger_tx_pipe_tx_rdy - - ,output logic rx_pipe_merger_tx_deq_req_val - ,input rx_send_queue_struct rx_pipe_merger_tx_deq_resp_data - ,input logic rx_pipe_merger_tx_empty - - ,output send_dst_tx_val - ,output logic [FLOWID_W-1:0] send_dst_tx_flowid - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_src_ip - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_dst_ip - ,output tcp_pkt_hdr send_dst_tx_tcp_hdr - ,output payload_buf_struct send_dst_tx_payload - ,input dst_send_tx_rdy - -); - - logic use_rx_pipe_send; - rx_send_queue_struct rx_send_queue_cast; - - assign rx_send_queue_cast = rx_pipe_merger_tx_deq_resp_data; - - assign use_rx_pipe_send = ~rx_pipe_merger_tx_empty; - - assign rx_pipe_merger_tx_deq_req_val = use_rx_pipe_send & dst_send_tx_rdy; - assign merger_tx_pipe_tx_rdy = ~use_rx_pipe_send & dst_send_tx_rdy; - - - - - - assign send_dst_tx_val = use_rx_pipe_send - ? rx_pipe_merger_tx_deq_req_val - : tx_pipe_merger_tx_val; - - assign send_dst_tx_flowid = use_rx_pipe_send - ? rx_send_queue_cast.flowid - : tx_pipe_merger_tx_flowid; - assign send_dst_tx_src_ip = use_rx_pipe_send - ? rx_send_queue_cast.src_ip - : tx_pipe_merger_tx_src_ip; - assign send_dst_tx_dst_ip = use_rx_pipe_send - ? rx_send_queue_cast.dst_ip - : tx_pipe_merger_tx_dst_ip; - assign send_dst_tx_tcp_hdr = use_rx_pipe_send - ? rx_send_queue_cast.tcp_hdr - : tx_pipe_merger_tx_tcp_hdr; - assign send_dst_tx_payload = use_rx_pipe_send - ? '0 - : tx_pipe_merger_tx_payload; - - -endmodule diff --git a/send_pipe/send_pipe_wrapper.sv b/send_pipe/send_pipe_wrapper.sv deleted file mode 100644 index dc114e0..0000000 --- a/send_pipe/send_pipe_wrapper.sv +++ /dev/null @@ -1,248 +0,0 @@ -`include "packet_defs.vh" -module send_pipe_wrapper -import packet_struct_pkg::*; -import tcp_pkg::*; -( - input clk - ,input rst - - ,input logic src_new_flow_val - ,input logic [FLOWID_W-1:0] src_new_flow_flowid - ,input four_tuple_struct src_new_flow_lookup_entry - ,output logic new_flow_src_rdy - - ,output logic send_q_tail_ptr_rd_req_val - ,output logic [FLOWID_W-1:0] send_q_tail_ptr_rd_req_flowid - ,input logic send_q_tail_ptr_rd_req_rdy - - ,input logic send_q_tail_ptr_rd_resp_val - ,input [TX_PAYLOAD_PTR_W:0] send_q_tail_ptr_rd_resp_data - ,output logic send_q_tail_ptr_rd_resp_rdy - - ,output logic send_pipe_tx_state_rd_req_val - ,output logic [FLOWID_W-1:0] send_pipe_tx_state_rd_req_flowid - ,input logic tx_state_send_pipe_rd_req_rdy - - ,input logic tx_state_send_pipe_rd_resp_val - ,input tx_state_struct tx_state_send_pipe_rd_resp_data - ,output logic send_pipe_tx_state_rd_resp_rdy - - ,output logic send_pipe_tx_state_wr_req_val - ,output logic [FLOWID_W-1:0] send_pipe_tx_state_wr_req_flowid - ,output tx_state_struct send_pipe_tx_state_wr_req_data - ,input logic tx_state_send_pipe_wr_req_rdy - - ,output logic send_pipe_recv_state_rd_req_val - ,output logic [FLOWID_W-1:0] send_pipe_recv_state_rd_req_flowid - ,input logic recv_state_send_pipe_rd_req_rdy - - ,input logic recv_state_send_pipe_rd_resp_val - ,input recv_state_entry recv_state_send_pipe_rd_resp_data - ,output logic send_pipe_recv_state_rd_resp_rdy - - ,input logic rx_pipe_rt_store_set_rt_flag_val - ,input logic [FLOWID_W-1:0] rx_pipe_rt_store_set_rt_flag_flowid - - ,output send_dst_tx_val - ,output logic [FLOWID_W-1:0] send_dst_tx_flowid - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_src_ip - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_dst_ip - ,output tcp_pkt_hdr send_dst_tx_tcp_hdr - ,output payload_buf_struct send_dst_tx_payload - ,input dst_send_tx_rdy - -); - - logic main_pipe_sched_fifo_tx_rd_req; - logic [FLOWID_W-1:0] sched_fifo_main_pipe_tx_rd_flowid; - logic sched_fifo_main_pipe_tx_rd_empty; - - logic main_pipe_sched_fifo_tx_wr_req; - logic [FLOWID_W-1:0] main_pipe_sched_fifo_tx_wr_flowid; - logic sched_fifo_main_pipe_tx_wr_full; - - logic main_pipe_assembler_tx_val; - logic [FLOWID_W-1:0] main_pipe_assembler_tx_flowid; - logic [`SEQ_NUM_W-1:0] main_pipe_assembler_tx_seq_num; - payload_buf_struct main_pipe_assembler_tx_payload; - logic assembler_main_pipe_tx_rdy; - - logic main_pipe_rt_timeout_rd_req_val; - logic [FLOWID_W-1:0] main_pipe_rt_timeout_rd_req_flowid; - logic rt_timeout_main_pipe_rd_req_rdy; - - logic rt_timeout_main_pipe_rd_resp_val; - logic [RT_TIMEOUT_FLAGS_W-1:0] rt_timeout_main_pipe_rd_resp_data; - logic main_pipe_rt_timeout_rd_resp_rdy; - - logic main_pipe_rt_timeout_clr_bit_val; - logic [FLOWID_W-1:0] main_pipe_rt_timeout_clr_bit_flowid; - - logic timeout_set_bit_val; - logic [FLOWID_W-1:0] timeout_set_bit_flowid; - - logic rt_set_bit_val; - logic [FLOWID_W-1:0] rt_set_bit_flowid; - - logic assembler_flowid_lookup_rd_req_val; - logic [FLOWID_W-1:0] assembler_flowid_lookup_rd_req_flowid; - logic flowid_lookup_assembler_rd_req_rdy; - - logic flowid_lookup_assembler_rd_resp_val; - four_tuple_struct flowid_lookup_assembler_rd_resp_data; - logic assembler_flowid_lookup_rd_resp_rdy; - - // Send pipe FIFOs - scheduling_fifos scheduling_fifos ( - .clk (clk) - ,.rst (rst) - - ,.app_send_tx_wr_req (src_new_flow_val ) - ,.app_send_tx_wr_flowid (src_new_flow_flowid ) - ,.send_app_tx_wr_full () - - ,.main_pipe_wr_req (main_pipe_sched_fifo_tx_wr_req ) - ,.main_pipe_wr_flowid (main_pipe_sched_fifo_tx_wr_flowid ) - ,.main_pipe_wr_full (sched_fifo_main_pipe_tx_wr_full ) - - ,.main_pipe_rd_req (main_pipe_sched_fifo_tx_rd_req ) - ,.main_pipe_flowid (sched_fifo_main_pipe_tx_rd_flowid ) - ,.main_pipe_rd_empty (sched_fifo_main_pipe_tx_rd_empty ) - ); - - - protocol_logic_pipe main_pipe ( - .clk (clk ) - ,.rst (rst ) - - ,.main_pipe_sched_fifo_tx_rd_req (main_pipe_sched_fifo_tx_rd_req ) - ,.sched_fifo_main_pipe_tx_rd_flowid (sched_fifo_main_pipe_tx_rd_flowid ) - ,.sched_fifo_main_pipe_tx_rd_empty (sched_fifo_main_pipe_tx_rd_empty ) - - ,.rt_timeout_flag_req_val (main_pipe_rt_timeout_rd_req_val ) - ,.rt_timeout_flag_req_flowid (main_pipe_rt_timeout_rd_req_flowid ) - ,.rt_timeout_flag_req_rdy (rt_timeout_main_pipe_rd_req_rdy ) - - ,.rt_timeout_flag_resp_val (rt_timeout_main_pipe_rd_resp_val ) - ,.rt_timeout_flag_resp_data (rt_timeout_main_pipe_rd_resp_data ) - ,.rt_timeout_flag_resp_rdy (main_pipe_rt_timeout_rd_resp_rdy ) - - ,.send_q_tail_ptr_rd_req_val (send_q_tail_ptr_rd_req_val ) - ,.send_q_tail_ptr_rd_req_flowid (send_q_tail_ptr_rd_req_flowid ) - ,.send_q_tail_ptr_rd_req_rdy (send_q_tail_ptr_rd_req_rdy ) - - ,.send_q_tail_ptr_rd_resp_val (send_q_tail_ptr_rd_resp_val ) - ,.send_q_tail_ptr_rd_resp_data (send_q_tail_ptr_rd_resp_data ) - ,.send_q_tail_ptr_rd_resp_rdy (send_q_tail_ptr_rd_resp_rdy ) - - ,.tx_state_rd_req_val (send_pipe_tx_state_rd_req_val ) - ,.tx_state_rd_req_flowid (send_pipe_tx_state_rd_req_flowid ) - ,.tx_state_rd_req_rdy (tx_state_send_pipe_rd_req_rdy ) - - ,.tx_state_rd_resp_val (tx_state_send_pipe_rd_resp_val ) - ,.tx_state_rd_resp_data (tx_state_send_pipe_rd_resp_data ) - ,.tx_state_rd_resp_rdy (send_pipe_tx_state_rd_resp_rdy ) - - ,.tx_state_wr_req_val (send_pipe_tx_state_wr_req_val ) - ,.tx_state_wr_req_flowid (send_pipe_tx_state_wr_req_flowid ) - ,.tx_state_wr_req_data (send_pipe_tx_state_wr_req_data ) - ,.tx_state_wr_req_rdy (tx_state_send_pipe_wr_req_rdy ) - - ,.main_pipe_sched_fifo_tx_wr_req (main_pipe_sched_fifo_tx_wr_req ) - ,.main_pipe_sched_fifo_tx_wr_flowid (main_pipe_sched_fifo_tx_wr_flowid ) - ,.sched_fifo_main_pipe_tx_wr_full (sched_fifo_main_pipe_tx_wr_full ) - - ,.main_pipe_rt_timeout_clr_bit_val (main_pipe_rt_timeout_clr_bit_val ) - ,.main_pipe_rt_timeout_clr_bit_flowid (main_pipe_rt_timeout_clr_bit_flowid ) - - ,.main_pipe_assembler_tx_val (main_pipe_assembler_tx_val ) - ,.main_pipe_assembler_tx_flowid (main_pipe_assembler_tx_flowid ) - ,.main_pipe_assembler_tx_seq_num (main_pipe_assembler_tx_seq_num ) - ,.main_pipe_assembler_tx_payload (main_pipe_assembler_tx_payload ) - ,.assembler_main_pipe_tx_rdy (assembler_main_pipe_tx_rdy ) - ); - - rt_timeout_flag_store rt_timeout_flag_store ( - .clk (clk) - ,.rst (rst) - - ,.new_flow_val (src_new_flow_val ) - ,.new_flow_flowid (src_new_flow_flowid ) - - ,.main_pipe_rt_timeout_rd_req_val (main_pipe_rt_timeout_rd_req_val ) - ,.main_pipe_rt_timeout_rd_req_flowid (main_pipe_rt_timeout_rd_req_flowid ) - ,.rt_timeout_main_pipe_rd_req_rdy (rt_timeout_main_pipe_rd_req_rdy ) - - ,.rt_timeout_main_pipe_rd_resp_val (rt_timeout_main_pipe_rd_resp_val ) - ,.rt_timeout_main_pipe_rd_resp_data (rt_timeout_main_pipe_rd_resp_data ) - ,.main_pipe_rt_timeout_rd_resp_rdy (main_pipe_rt_timeout_rd_resp_rdy ) - - ,.main_pipe_rt_timeout_clr_bit_val (main_pipe_rt_timeout_clr_bit_val ) - ,.main_pipe_rt_timeout_clr_bit_flowid (main_pipe_rt_timeout_clr_bit_flowid) - - ,.timeout_set_bit_val (1'b0) - ,.timeout_set_bit_flowid ('0) - - ,.rt_set_bit_val (rx_pipe_rt_store_set_rt_flag_val ) - ,.rt_set_bit_flowid (rx_pipe_rt_store_set_rt_flag_flowid) - ); - - - // We can put a FIFO here to cut the ready signal critical path if necessary - - hdr_assembler_pipe assembler ( - .clk(clk) - ,.rst(rst) - - ,.main_pipe_assembler_tx_val (main_pipe_assembler_tx_val ) - ,.main_pipe_assembler_tx_flowid (main_pipe_assembler_tx_flowid ) - ,.main_pipe_assembler_tx_seq_num (main_pipe_assembler_tx_seq_num ) - ,.main_pipe_assembler_tx_payload (main_pipe_assembler_tx_payload ) - ,.assembler_main_pipe_tx_rdy (assembler_main_pipe_tx_rdy ) - - ,.send_pipe_recv_state_rd_req_val (send_pipe_recv_state_rd_req_val ) - ,.send_pipe_recv_state_rd_req_flowid (send_pipe_recv_state_rd_req_flowid ) - ,.recv_state_send_pipe_rd_req_rdy (recv_state_send_pipe_rd_req_rdy ) - - ,.recv_state_send_pipe_rd_resp_val (recv_state_send_pipe_rd_resp_val ) - ,.recv_state_send_pipe_rd_resp_data (recv_state_send_pipe_rd_resp_data ) - ,.send_pipe_recv_state_rd_resp_rdy (send_pipe_recv_state_rd_resp_rdy ) - - ,.assembler_flowid_lookup_rd_req_val (assembler_flowid_lookup_rd_req_val ) - ,.assembler_flowid_lookup_rd_req_flowid (assembler_flowid_lookup_rd_req_flowid ) - ,.flowid_lookup_assembler_rd_req_rdy (flowid_lookup_assembler_rd_req_rdy ) - - ,.flowid_lookup_assembler_rd_resp_val (flowid_lookup_assembler_rd_resp_val ) - ,.flowid_lookup_assembler_rd_resp_data (flowid_lookup_assembler_rd_resp_data ) - ,.assembler_flowid_lookup_rd_resp_rdy (assembler_flowid_lookup_rd_resp_rdy ) - - ,.assembler_dst_tx_val (send_dst_tx_val ) - ,.assembler_dst_tx_flowid (send_dst_tx_flowid ) - ,.assembler_dst_tx_src_ip (send_dst_tx_src_ip ) - ,.assembler_dst_tx_dst_ip (send_dst_tx_dst_ip ) - ,.assembler_dst_tx_tcp_hdr (send_dst_tx_tcp_hdr ) - ,.assembler_dst_tx_payload (send_dst_tx_payload ) - ,.dst_assembler_tx_rdy (dst_send_tx_rdy ) - - ); - - flowid_to_addr flowid_to_addr_lookup ( - .clk(clk) - ,.rst(rst) - - ,.wr_req_val (src_new_flow_val ) - ,.wr_req_flowid (src_new_flow_flowid ) - ,.wr_req_rdy (new_flow_src_rdy ) - - ,.wr_req_flow_entry (src_new_flow_lookup_entry ) - - ,.rd_req_val (assembler_flowid_lookup_rd_req_val ) - ,.rd_req_flowid (assembler_flowid_lookup_rd_req_flowid ) - ,.rd_req_rdy (flowid_lookup_assembler_rd_req_rdy ) - - ,.rd_resp_val (flowid_lookup_assembler_rd_resp_val ) - ,.rd_resp_flow_entry(flowid_lookup_assembler_rd_resp_data ) - ,.rd_resp_rdy (assembler_flowid_lookup_rd_resp_rdy ) - ); - -endmodule diff --git a/tcp_engine_wrapper.sv b/tcp_engine_wrapper.sv deleted file mode 100644 index c774f14..0000000 --- a/tcp_engine_wrapper.sv +++ /dev/null @@ -1,646 +0,0 @@ -`include "state_defs.vh" -`include "packet_defs.vh" -`include "noc_defs.vh" -module tcp_engine_wrapper #( - parameter SRC_X = "inv" - ,parameter SRC_Y = "inv" - ,parameter RX_DRAM_X = "inv" - ,parameter RX_DRAM_Y = "inv" -)( - input clk - ,input rst - - ,input src_recv_hdr_val - ,input [`IP_ADDR_W-1:0] src_recv_src_ip - ,input [`IP_ADDR_W-1:0] src_recv_dst_ip - ,input [`TCP_HDR_W-1:0] src_recv_hdr - ,input src_recv_payload_val - ,input [`PAYLOAD_ENTRY_ADDR_W-1:0] src_recv_payload_addr - ,input [`PAYLOAD_ENTRY_LEN_W-1:0] src_recv_payload_len - ,output recv_src_hdr_rdy - - ,output send_dst_tx_val - ,output logic [`FLOW_ID_W-1:0] send_dst_tx_flowid - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_src_ip - ,output logic [`IP_ADDR_W-1:0] send_dst_tx_dst_ip - ,output logic [`TCP_HDR_W-1:0] send_dst_tx_tcp_hdr - ,output logic [`PAYLOAD_ENTRY_W-1:0] send_dst_tx_payload - ,input dst_send_tx_rdy - - ,output app_new_flow_notif_val - ,output [`FLOW_ID_W-1:0] app_new_flow_flowid - - ,output logic rx_pipe_noc0_val - ,output logic [`NOC_DATA_WIDTH-1:0] rx_pipe_noc0_data - ,input logic noc0_rx_pipe_rdy - - ,input logic noc0_rx_pipe_val - ,input logic [`NOC_DATA_WIDTH-1:0] noc0_rx_pipe_data - ,output logic rx_pipe_noc0_rdy - - ,input app_tail_ptr_tx_wr_req_val - ,input [`FLOW_ID_W-1:0] app_tail_ptr_tx_wr_req_flowid - ,input [`PAYLOAD_PTR_W:0] app_tail_ptr_tx_wr_req_data - ,output tail_ptr_app_tx_wr_req_rdy - - ,input app_tail_ptr_tx_rd_req1_val - ,input [`FLOW_ID_W-1:0] app_tail_ptr_tx_rd_req1_flowid - ,output logic tail_ptr_app_tx_rd_req1_rdy - - ,output tail_ptr_app_tx_rd_resp1_val - ,output logic [`FLOW_ID_W-1:0] tail_ptr_app_tx_rd_resp1_flowid - ,output logic [`PAYLOAD_PTR_W:0] tail_ptr_app_tx_rd_resp1_data - ,input logic app_tail_ptr_tx_rd_resp1_rdy - - ,input app_head_ptr_tx_rd_req0_val - ,input [`FLOW_ID_W-1:0] app_head_ptr_tx_rd_req0_flowid - ,output logic head_ptr_app_tx_rd_req0_rdy - - ,output head_ptr_app_tx_rd_resp0_val - ,output logic [`FLOW_ID_W-1:0] head_ptr_app_tx_rd_resp0_flowid - ,output logic [`PAYLOAD_PTR_W:0] head_ptr_app_tx_rd_resp0_data - ,input logic app_head_ptr_tx_rd_resp0_rdy - - ,output logic store_buf_tmp_buf_store_rx_rd_req_val - ,output logic [`PAYLOAD_ENTRY_ADDR_W-1:0] store_buf_tmp_buf_store_rx_rd_req_addr - ,input logic tmp_buf_store_store_buf_rx_rd_req_rdy - - ,input logic tmp_buf_store_store_buf_rx_rd_resp_val - ,input logic [`MAC_INTERFACE_W-1:0] tmp_buf_store_store_buf_rx_rd_resp_data - ,output logic store_buf_tmp_buf_store_rx_rd_resp_rdy - - ,output logic store_buf_tmp_buf_free_slab_rx_req_val - ,output logic [`RX_TMP_BUF_ADDR_W-1:0] store_buf_tmp_buf_free_slab_rx_req_addr - ,input logic tmp_buf_free_slab_store_buf_rx_req_rdy - - ,input logic app_rx_head_ptr_wr_req_val - ,input logic [`FLOW_ID_W-1:0] app_rx_head_ptr_wr_req_addr - ,input logic [`RX_PAYLOAD_PTR_W:0] app_rx_head_ptr_wr_req_data - ,output logic rx_head_ptr_app_wr_req_rdy - - ,input logic app_rx_head_ptr_rd_req_val - ,input logic [`FLOW_ID_W-1:0] app_rx_head_ptr_rd_req_addr - ,output logic rx_head_ptr_app_rd_req_rdy - - ,output logic rx_head_ptr_app_rd_resp_val - ,output logic [`RX_PAYLOAD_PTR_W:0] rx_head_ptr_app_rd_resp_data - ,input logic app_rx_head_ptr_rd_resp_rdy - - ,input logic app_rx_commit_ptr_rd_req_val - ,input logic [`FLOW_ID_W-1:0] app_rx_commit_ptr_rd_req_addr - ,output logic rx_commit_ptr_app_rd_req_rdy - - ,output logic rx_commit_ptr_app_rd_resp_val - ,output logic [`RX_PAYLOAD_PTR_W:0] rx_commit_ptr_app_rd_resp_data - ,input logic app_rx_commit_ptr_rd_resp_rdy -); - - logic send_q_tail_ptr_rd_req_val; - logic [`FLOW_ID_W-1:0] send_q_tail_ptr_rd_req_flowid; - logic send_q_tail_ptr_rd_req_rdy; - - logic send_q_tail_ptr_rd_resp_val; - logic [`PAYLOAD_PTR_W:0] send_q_tail_ptr_rd_resp_data; - logic send_q_tail_ptr_rd_resp_rdy; - - logic rx_pipe_tx_head_ptr_wr_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_tx_head_ptr_wr_req_flowid; - logic [`PAYLOAD_PTR_W:0] rx_pipe_tx_head_ptr_wr_req_data; - logic tx_head_ptr_rx_pipe_wr_req_rdy; - - logic send_pipe_tx_state_rd_req_val; - logic [`FLOW_ID_W-1:0] send_pipe_tx_state_rd_req_flowid; - logic tx_state_send_pipe_rd_req_rdy; - - logic tx_state_send_pipe_rd_resp_val; - logic [`TX_STATE_STRUCT_W-1:0] tx_state_send_pipe_rd_resp_data; - logic send_pipe_tx_state_rd_resp_rdy; - - logic send_pipe_tx_state_wr_req_val; - logic [`FLOW_ID_W-1:0] send_pipe_tx_state_wr_req_flowid; - logic [`TX_STATE_STRUCT_W-1:0] send_pipe_tx_state_wr_req_data; - logic tx_state_send_pipe_wr_req_rdy; - - logic new_flow_val; - logic [`FLOW_ID_W-1:0] new_flow_flowid; - flow_lookup_entry new_flow_lookup_entry; - tx_state_struct new_flow_tx_state; - recv_state_entry new_flow_rx_state; - logic new_flow_rdy; - - logic new_flow_send_pipe_rdy; - logic new_flow_tx_payload_ptrs_rdy; - logic new_flow_tx_state_rdy; - logic new_flow_rx_state_rdy; - - logic curr_recv_state_rd_req_val; - logic [`FLOW_ID_W-1:0] curr_recv_state_rd_req_addr; - logic curr_recv_state_rd_req_rdy; - - logic curr_recv_state_rd_resp_val; - recv_state_entry curr_recv_state_rd_resp_data; - logic curr_recv_state_rd_resp_rdy; - - logic next_recv_state_wr_req_val; - logic [`FLOW_ID_W-1:0] next_recv_state_wr_req_addr; - recv_state_entry next_recv_state_wr_req_data; - logic next_recv_state_wr_req_rdy; - - logic send_pipe_recv_state_rd_req_val; - logic [`FLOW_ID_W-1:0] send_pipe_recv_state_rd_req_flowid; - logic recv_state_send_pipe_rd_req_rdy; - - logic recv_state_send_pipe_rd_resp_val; - logic [`RECV_STATE_ENTRY_W-1:0] recv_state_send_pipe_rd_resp_data; - logic send_pipe_recv_state_rd_resp_rdy; - - logic recv_pipe_tx_state_rd_req_val; - logic [`FLOW_ID_W-1:0] recv_pipe_tx_state_rd_req_flowid; - logic [`TX_STATE_STRUCT_W-1:0] recv_pipe_tx_state_rd_req_data; - logic tx_state_recv_pipe_rd_req_rdy; - - logic tx_state_recv_pipe_rd_resp_val; - logic [`TX_STATE_STRUCT_W-1:0] tx_state_recv_pipe_rd_resp_data; - logic recv_pipe_tx_state_rd_resp_rdy; - - logic recv_pipe_tx_state_wr_req_val; - logic [`FLOW_ID_W-1:0] recv_pipe_tx_state_wr_req_flowid; - logic [`TX_STATE_STRUCT_W-1:0] recv_pipe_tx_state_wr_req_data; - logic tx_state_recv_pipe_wr_req_rdy; - - logic rx_send_queue_deq_req_val; - rx_send_queue_struct rx_send_queue_deq_resp_data; - logic rx_send_queue_empty; - - logic rx_send_queue_enq_req_val; - rx_send_queue_struct rx_send_queue_enq_req_data; - logic send_queue_rx_full; - - logic rx_pipe_rt_store_set_rt_flag_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rt_store_set_rt_flag_flowid; - - logic tx_pipe_dst_tx_val; - logic [`FLOW_ID_W-1:0] tx_pipe_dst_tx_flowid; - logic [`IP_ADDR_W-1:0] tx_pipe_dst_tx_src_ip; - logic [`IP_ADDR_W-1:0] tx_pipe_dst_tx_dst_ip; - tcp_pkt_hdr tx_pipe_dst_tx_tcp_hdr; - payload_buf_entry tx_pipe_dst_tx_payload; - logic dst_tx_pipe_tx_rdy; - - payload_buf_entry src_recv_payload_entry; - - - logic rx_pipe_rx_head_ptr_rd_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rx_head_ptr_rd_req_addr; - logic rx_head_ptr_rx_pipe_rd_req_rdy; - - logic rx_head_ptr_rx_pipe_rd_resp_val; - logic [`RX_PAYLOAD_PTR_W:0] rx_head_ptr_rx_pipe_rd_resp_data; - logic rx_pipe_rx_head_ptr_rd_resp_rdy; - - logic rx_pipe_rx_commit_ptr_wr_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rx_commit_ptr_wr_req_addr; - logic [`RX_PAYLOAD_PTR_W:0] rx_pipe_rx_commit_ptr_wr_req_data; - logic rx_commit_ptr_rx_pipe_wr_req_rdy; - - logic rx_pipe_rx_commit_ptr_rd_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rx_commit_ptr_rd_req_addr; - logic rx_commit_ptr_rx_pipe_rd_req_rdy; - - logic rx_commit_ptr_rx_pipe_rd_resp_val; - logic [`RX_PAYLOAD_PTR_W:0] rx_commit_ptr_rx_pipe_rd_resp_data; - logic rx_pipe_rx_commit_ptr_rd_resp_rdy; - - logic rx_pipe_rx_tail_ptr_wr_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rx_tail_ptr_wr_req_addr; - logic [`RX_PAYLOAD_PTR_W:0] rx_pipe_rx_tail_ptr_wr_req_data; - logic rx_tail_ptr_rx_pipe_wr_req_rdy; - - logic rx_pipe_rx_tail_ptr_rd_req_val; - logic [`FLOW_ID_W-1:0] rx_pipe_rx_tail_ptr_rd_req_addr; - logic rx_tail_ptr_rx_pipe_rd_req_rdy; - - logic rx_tail_ptr_rx_pipe_rd_resp_val; - logic [`RX_PAYLOAD_PTR_W:0] rx_tail_ptr_rx_pipe_rd_resp_data; - logic rx_pipe_rx_tail_ptr_rd_resp_rdy; - - logic [`RX_PAYLOAD_PTR_W:0] new_rx_head_ptr; - logic [`RX_PAYLOAD_PTR_W:0] new_rx_tail_ptr; - logic new_flow_rx_payload_ptrs_rdy; - - assign src_recv_payload_entry.pkt_payload_addr = src_recv_payload_addr; - assign src_recv_payload_entry.pkt_payload_len = src_recv_payload_len; - - assign new_flow_rdy = new_flow_send_pipe_rdy - & new_flow_tx_payload_ptrs_rdy - & new_flow_tx_state_rdy - & new_flow_rx_state_rdy; - - send_pipe_wrapper send_pipe ( - .clk (clk) - ,.rst (rst) - - ,.src_new_flow_val (new_flow_val ) - ,.src_new_flow_flowid (new_flow_flowid ) - ,.src_new_flow_lookup_entry (new_flow_lookup_entry ) - ,.new_flow_src_rdy (new_flow_send_pipe_rdy ) - - ,.send_q_tail_ptr_rd_req_val (send_q_tail_ptr_rd_req_val ) - ,.send_q_tail_ptr_rd_req_flowid (send_q_tail_ptr_rd_req_flowid ) - ,.send_q_tail_ptr_rd_req_rdy (send_q_tail_ptr_rd_req_rdy ) - - ,.send_q_tail_ptr_rd_resp_val (send_q_tail_ptr_rd_resp_val ) - ,.send_q_tail_ptr_rd_resp_data (send_q_tail_ptr_rd_resp_data ) - ,.send_q_tail_ptr_rd_resp_rdy (send_q_tail_ptr_rd_resp_rdy ) - - ,.send_pipe_tx_state_rd_req_val (send_pipe_tx_state_rd_req_val ) - ,.send_pipe_tx_state_rd_req_flowid (send_pipe_tx_state_rd_req_flowid ) - ,.tx_state_send_pipe_rd_req_rdy (tx_state_send_pipe_rd_req_rdy ) - - ,.tx_state_send_pipe_rd_resp_val (tx_state_send_pipe_rd_resp_val ) - ,.tx_state_send_pipe_rd_resp_data (tx_state_send_pipe_rd_resp_data ) - ,.send_pipe_tx_state_rd_resp_rdy (send_pipe_tx_state_rd_resp_rdy ) - - ,.send_pipe_tx_state_wr_req_val (send_pipe_tx_state_wr_req_val ) - ,.send_pipe_tx_state_wr_req_flowid (send_pipe_tx_state_wr_req_flowid ) - ,.send_pipe_tx_state_wr_req_data (send_pipe_tx_state_wr_req_data ) - ,.tx_state_send_pipe_wr_req_rdy (tx_state_send_pipe_wr_req_rdy ) - - ,.send_pipe_recv_state_rd_req_val (send_pipe_recv_state_rd_req_val ) - ,.send_pipe_recv_state_rd_req_flowid (send_pipe_recv_state_rd_req_flowid ) - ,.recv_state_send_pipe_rd_req_rdy (recv_state_send_pipe_rd_req_rdy ) - - ,.recv_state_send_pipe_rd_resp_val (recv_state_send_pipe_rd_resp_val ) - ,.recv_state_send_pipe_rd_resp_data (recv_state_send_pipe_rd_resp_data ) - ,.send_pipe_recv_state_rd_resp_rdy (send_pipe_recv_state_rd_resp_rdy ) - - ,.rx_pipe_rt_store_set_rt_flag_val (rx_pipe_rt_store_set_rt_flag_val ) - ,.rx_pipe_rt_store_set_rt_flag_flowid (rx_pipe_rt_store_set_rt_flag_flowid ) - - ,.send_dst_tx_val (tx_pipe_dst_tx_val ) - ,.send_dst_tx_flowid (tx_pipe_dst_tx_flowid ) - ,.send_dst_tx_src_ip (tx_pipe_dst_tx_src_ip ) - ,.send_dst_tx_dst_ip (tx_pipe_dst_tx_dst_ip ) - ,.send_dst_tx_tcp_hdr (tx_pipe_dst_tx_tcp_hdr ) - ,.send_dst_tx_payload (tx_pipe_dst_tx_payload ) - ,.dst_send_tx_rdy (dst_tx_pipe_tx_rdy ) - ); - - logic [`PAYLOAD_PTR_W:0] new_tx_head_ptr; - logic [`PAYLOAD_PTR_W:0] new_tx_tail_ptr; - - assign new_tx_head_ptr = new_flow_tx_state.tx_curr_ack_state.tx_curr_ack_num[`PAYLOAD_PTR_W:0]; - assign new_tx_tail_ptr = new_flow_tx_state.tx_curr_ack_state.tx_curr_ack_num[`PAYLOAD_PTR_W:0]; - - payload_pointers send_qs ( - .clk (clk) - ,.rst (rst) - - ,.payload_head_ptr_rd_req0_val (app_head_ptr_tx_rd_req0_val ) - ,.payload_head_ptr_rd_req0_flowid (app_head_ptr_tx_rd_req0_flowid ) - ,.payload_head_ptr_rd_req0_rdy (head_ptr_app_tx_rd_req0_rdy ) - - ,.payload_head_ptr_rd_resp0_val (head_ptr_app_tx_rd_resp0_val ) - ,.payload_head_ptr_rd_resp0_flowid (head_ptr_app_tx_rd_resp0_flowid ) - ,.payload_head_ptr_rd_resp0_data (head_ptr_app_tx_rd_resp0_data ) - ,.payload_head_ptr_rd_resp0_rdy (app_head_ptr_tx_rd_resp0_rdy ) - - ,.payload_head_ptr_rd_req1_val (1'b0) - ,.payload_head_ptr_rd_req1_flowid ('0) - ,.payload_head_ptr_rd_req1_rdy () - - ,.payload_head_ptr_rd_resp1_val () - ,.payload_head_ptr_rd_resp1_flowid () - ,.payload_head_ptr_rd_resp1_data () - ,.payload_head_ptr_rd_resp1_rdy (1'b1) - - ,.payload_head_ptr_wr_req_val (rx_pipe_tx_head_ptr_wr_req_val ) - ,.payload_head_ptr_wr_req_flowid (rx_pipe_tx_head_ptr_wr_req_flowid ) - ,.payload_head_ptr_wr_req_data (rx_pipe_tx_head_ptr_wr_req_data ) - ,.payload_head_ptr_wr_req_rdy (tx_head_ptr_rx_pipe_wr_req_rdy ) - - ,.payload_tail_ptr_rd_req0_val (send_q_tail_ptr_rd_req_val ) - ,.payload_tail_ptr_rd_req0_flowid (send_q_tail_ptr_rd_req_flowid ) - ,.payload_tail_ptr_rd_req0_rdy (send_q_tail_ptr_rd_req_rdy ) - - ,.payload_tail_ptr_rd_resp0_val (send_q_tail_ptr_rd_resp_val ) - ,.payload_tail_ptr_rd_resp0_flowid () - ,.payload_tail_ptr_rd_resp0_data (send_q_tail_ptr_rd_resp_data ) - ,.payload_tail_ptr_rd_resp0_rdy (send_q_tail_ptr_rd_resp_rdy ) - - ,.payload_tail_ptr_rd_req1_val (app_tail_ptr_tx_rd_req1_val ) - ,.payload_tail_ptr_rd_req1_flowid (app_tail_ptr_tx_rd_req1_flowid ) - ,.payload_tail_ptr_rd_req1_rdy (tail_ptr_app_tx_rd_req1_rdy ) - - ,.payload_tail_ptr_rd_resp1_val (tail_ptr_app_tx_rd_resp1_val ) - ,.payload_tail_ptr_rd_resp1_flowid (tail_ptr_app_tx_rd_resp1_flowid ) - ,.payload_tail_ptr_rd_resp1_data (tail_ptr_app_tx_rd_resp1_data ) - ,.payload_tail_ptr_rd_resp1_rdy (app_tail_ptr_tx_rd_resp1_rdy ) - - ,.payload_tail_ptr_wr_req_val (app_tail_ptr_tx_wr_req_val ) - ,.payload_tail_ptr_wr_req_flowid (app_tail_ptr_tx_wr_req_flowid ) - ,.payload_tail_ptr_wr_req_data (app_tail_ptr_tx_wr_req_data ) - ,.payload_tail_ptr_wr_req_rdy (tail_ptr_app_tx_wr_req_rdy ) - - ,.new_flow_val (new_flow_val ) - ,.new_flow_flowid (new_flow_flowid ) - ,.new_flow_head_ptr (new_tx_head_ptr ) - ,.new_flow_tail_ptr (new_tx_tail_ptr ) - ,.new_flow_rdy (new_flow_tx_payload_ptrs_rdy ) - ); - - tx_state_store tx_state_store ( - .clk (clk) - ,.rst (rst) - - ,.send_pipe_rd_req_val (send_pipe_tx_state_rd_req_val ) - ,.send_pipe_rd_req_flowid (send_pipe_tx_state_rd_req_flowid ) - ,.send_pipe_rd_req_rdy (tx_state_send_pipe_rd_req_rdy ) - - ,.send_pipe_rd_resp_val (tx_state_send_pipe_rd_resp_val ) - ,.send_pipe_rd_resp_flowid () - ,.send_pipe_rd_resp_data (tx_state_send_pipe_rd_resp_data ) - ,.send_pipe_rd_resp_rdy (send_pipe_tx_state_rd_resp_rdy ) - - ,.recv_pipe_rd_req_val (recv_pipe_tx_state_rd_req_val ) - ,.recv_pipe_rd_req_flowid (recv_pipe_tx_state_rd_req_flowid ) - ,.recv_pipe_rd_req_rdy (tx_state_recv_pipe_rd_req_rdy ) - - ,.recv_pipe_rd_resp_val (tx_state_recv_pipe_rd_resp_val ) - ,.recv_pipe_rd_resp_flowid () - ,.recv_pipe_rd_resp_data (tx_state_recv_pipe_rd_resp_data ) - ,.recv_pipe_rd_resp_rdy (recv_pipe_tx_state_rd_resp_rdy ) - - ,.send_pipe_wr_req_val (send_pipe_tx_state_wr_req_val ) - ,.send_pipe_wr_req_flowid (send_pipe_tx_state_wr_req_flowid ) - ,.send_pipe_wr_req_data (send_pipe_tx_state_wr_req_data ) - ,.send_pipe_wr_req_rdy (tx_state_send_pipe_wr_req_rdy ) - - ,.recv_pipe_wr_req_val (recv_pipe_tx_state_wr_req_val ) - ,.recv_pipe_wr_req_flowid (recv_pipe_tx_state_wr_req_flowid ) - ,.recv_pipe_wr_req_data (recv_pipe_tx_state_wr_req_data ) - ,.recv_pipe_wr_req_rdy (tx_state_recv_pipe_wr_req_rdy ) - - ,.new_flow_val (new_flow_val ) - ,.new_flow_flowid (new_flow_flowid ) - ,.new_flow_tx_state (new_flow_tx_state ) - ,.new_flow_rdy (new_flow_tx_state_rdy ) - ); - - /********************************************************************************** - * RX pipe - *********************************************************************************/ - - rx_state_store rx_state_store ( - .clk (clk) - ,.rst (rst) - - ,.recv_state_wr_req_val (next_recv_state_wr_req_val ) - ,.recv_state_wr_req_addr (next_recv_state_wr_req_addr ) - ,.recv_state_wr_req_data (next_recv_state_wr_req_data ) - ,.recv_state_wr_req_rdy (next_recv_state_wr_req_rdy ) - - - ,.curr_recv_state_rd_req_val (curr_recv_state_rd_req_val ) - ,.curr_recv_state_rd_req_addr (curr_recv_state_rd_req_addr ) - ,.curr_recv_state_rd_req_rdy (curr_recv_state_rd_req_rdy ) - - ,.curr_recv_state_rd_resp_val (curr_recv_state_rd_resp_val ) - ,.curr_recv_state_rd_resp_data (curr_recv_state_rd_resp_data ) - ,.curr_recv_state_rd_resp_rdy (curr_recv_state_rd_resp_rdy ) - - ,.send_pipe_recv_state_rd_req_val (send_pipe_recv_state_rd_req_val ) - ,.send_pipe_recv_state_rd_req_addr (send_pipe_recv_state_rd_req_flowid ) - ,.recv_state_send_pipe_rd_req_rdy (recv_state_send_pipe_rd_req_rdy ) - - ,.recv_state_send_pipe_rd_resp_val (recv_state_send_pipe_rd_resp_val ) - ,.recv_state_send_pipe_rd_resp_data (recv_state_send_pipe_rd_resp_data ) - ,.send_pipe_recv_state_rd_resp_rdy (send_pipe_recv_state_rd_resp_rdy ) - - ,.new_flow_val (new_flow_val ) - ,.new_flow_flowid (new_flow_flowid ) - ,.new_flow_recv_state (new_flow_rx_state ) - ,.new_flow_rdy (new_flow_rx_state_rdy ) - ); - - rx_pipe_wrap rx_pipe_wrap ( - .clk (clk) - ,.rst (rst) - - ,.recv_tcp_hdr_val (src_recv_hdr_val ) - ,.recv_src_ip (src_recv_src_ip ) - ,.recv_dst_ip (src_recv_dst_ip ) - ,.recv_tcp_hdr (src_recv_hdr ) - ,.recv_payload_val (src_recv_payload_val ) - ,.recv_payload_entry (src_recv_payload_entry ) - ,.recv_hdr_rdy (recv_src_hdr_rdy ) - - ,.new_flow_val (new_flow_val ) - ,.new_flow_flow_id (new_flow_flowid ) - ,.new_flow_lookup_entry (new_flow_lookup_entry ) - ,.new_flow_tx_state (new_flow_tx_state ) - ,.new_flow_rx_state (new_flow_rx_state ) - ,.new_flow_rdy (new_flow_rdy ) - - ,.app_new_flow_notif_val (app_new_flow_notif_val ) - ,.app_new_flow_flowid (app_new_flow_flowid ) - - ,.rx_pipe_noc0_val (rx_pipe_noc0_val ) - ,.rx_pipe_noc0_data (rx_pipe_noc0_data ) - ,.noc0_rx_pipe_rdy (noc0_rx_pipe_rdy ) - - ,.noc0_rx_pipe_val (noc0_rx_pipe_val ) - ,.noc0_rx_pipe_data (noc0_rx_pipe_data ) - ,.rx_pipe_noc0_rdy (rx_pipe_noc0_rdy ) - - ,.curr_recv_state_rd_req_val (curr_recv_state_rd_req_val ) - ,.curr_recv_state_rd_req_addr (curr_recv_state_rd_req_addr ) - ,.curr_recv_state_rd_req_rdy (curr_recv_state_rd_req_rdy ) - - ,.curr_recv_state_rd_resp_val (curr_recv_state_rd_resp_val ) - ,.curr_recv_state_rd_resp_data (curr_recv_state_rd_resp_data ) - ,.curr_recv_state_rd_resp_rdy (curr_recv_state_rd_resp_rdy ) - - ,.next_recv_state_wr_req_val (next_recv_state_wr_req_val ) - ,.next_recv_state_wr_req_addr (next_recv_state_wr_req_addr ) - ,.next_recv_state_wr_req_data (next_recv_state_wr_req_data ) - ,.next_recv_state_wr_req_rdy (next_recv_state_wr_req_rdy ) - - ,.curr_tx_state_rd_req_val (recv_pipe_tx_state_rd_req_val ) - ,.curr_tx_state_rd_req_flowid (recv_pipe_tx_state_rd_req_flowid ) - ,.curr_tx_state_rd_req_rdy (tx_state_recv_pipe_rd_req_rdy ) - - ,.curr_tx_state_rd_resp_val (tx_state_recv_pipe_rd_resp_val ) - ,.curr_tx_state_rd_resp_data (tx_state_recv_pipe_rd_resp_data ) - ,.curr_tx_state_rd_resp_rdy (recv_pipe_tx_state_rd_resp_rdy ) - - ,.rx_pipe_tx_state_wr_req_val (recv_pipe_tx_state_wr_req_val ) - ,.rx_pipe_tx_state_wr_req_flowid (recv_pipe_tx_state_wr_req_flowid ) - ,.rx_pipe_tx_state_wr_req_data (recv_pipe_tx_state_wr_req_data ) - ,.tx_state_rx_pipe_wr_req_rdy (tx_state_recv_pipe_wr_req_rdy ) - - ,.rx_pipe_rt_store_set_rt_flag_val (rx_pipe_rt_store_set_rt_flag_val ) - ,.rx_pipe_rt_store_set_rt_flag_flowid (rx_pipe_rt_store_set_rt_flag_flowid) - - ,.rx_pipe_tx_head_ptr_wr_req_val (rx_pipe_tx_head_ptr_wr_req_val ) - ,.rx_pipe_tx_head_ptr_wr_req_flowid (rx_pipe_tx_head_ptr_wr_req_flowid ) - ,.rx_pipe_tx_head_ptr_wr_req_data (rx_pipe_tx_head_ptr_wr_req_data ) - ,.tx_head_ptr_rx_pipe_wr_req_rdy (tx_head_ptr_rx_pipe_wr_req_rdy ) - - ,.rx_send_queue_enq_req_val (rx_send_queue_enq_req_val ) - ,.rx_send_queue_enq_req_data (rx_send_queue_enq_req_data ) - ,.send_queue_rx_full (send_queue_rx_full ) - - ,.rx_pipe_rx_head_ptr_rd_req_val (rx_pipe_rx_head_ptr_rd_req_val ) - ,.rx_pipe_rx_head_ptr_rd_req_addr (rx_pipe_rx_head_ptr_rd_req_addr ) - ,.rx_head_ptr_rx_pipe_rd_req_rdy (rx_head_ptr_rx_pipe_rd_req_rdy ) - - ,.rx_head_ptr_rx_pipe_rd_resp_val (rx_head_ptr_rx_pipe_rd_resp_val ) - ,.rx_head_ptr_rx_pipe_rd_resp_data (rx_head_ptr_rx_pipe_rd_resp_data ) - ,.rx_pipe_rx_head_ptr_rd_resp_rdy (rx_pipe_rx_head_ptr_rd_resp_rdy ) - - ,.rx_pipe_rx_commit_ptr_wr_req_val (rx_pipe_rx_commit_ptr_wr_req_val ) - ,.rx_pipe_rx_commit_ptr_wr_req_addr (rx_pipe_rx_commit_ptr_wr_req_addr ) - ,.rx_pipe_rx_commit_ptr_wr_req_data (rx_pipe_rx_commit_ptr_wr_req_data ) - ,.rx_commit_ptr_rx_pipe_wr_req_rdy (rx_commit_ptr_rx_pipe_wr_req_rdy ) - - ,.rx_pipe_rx_commit_ptr_rd_req_val (rx_pipe_rx_commit_ptr_rd_req_val ) - ,.rx_pipe_rx_commit_ptr_rd_req_addr (rx_pipe_rx_commit_ptr_rd_req_addr ) - ,.rx_commit_ptr_rx_pipe_rd_req_rdy (rx_commit_ptr_rx_pipe_rd_req_rdy ) - - ,.rx_commit_ptr_rx_pipe_rd_resp_val (rx_commit_ptr_rx_pipe_rd_resp_val ) - ,.rx_commit_ptr_rx_pipe_rd_resp_data (rx_commit_ptr_rx_pipe_rd_resp_data ) - ,.rx_pipe_rx_commit_ptr_rd_resp_rdy (rx_pipe_rx_commit_ptr_rd_resp_rdy ) - - ,.rx_pipe_rx_tail_ptr_wr_req_val (rx_pipe_rx_tail_ptr_wr_req_val ) - ,.rx_pipe_rx_tail_ptr_wr_req_addr (rx_pipe_rx_tail_ptr_wr_req_addr ) - ,.rx_pipe_rx_tail_ptr_wr_req_data (rx_pipe_rx_tail_ptr_wr_req_data ) - ,.rx_tail_ptr_rx_pipe_wr_req_rdy (rx_tail_ptr_rx_pipe_wr_req_rdy ) - - ,.rx_pipe_rx_tail_ptr_rd_req_val (rx_pipe_rx_tail_ptr_rd_req_val ) - ,.rx_pipe_rx_tail_ptr_rd_req_addr (rx_pipe_rx_tail_ptr_rd_req_addr ) - ,.rx_tail_ptr_rx_pipe_rd_req_rdy (rx_tail_ptr_rx_pipe_rd_req_rdy ) - - ,.rx_tail_ptr_rx_pipe_rd_resp_val (rx_tail_ptr_rx_pipe_rd_resp_val ) - ,.rx_tail_ptr_rx_pipe_rd_resp_data (rx_tail_ptr_rx_pipe_rd_resp_data ) - ,.rx_pipe_rx_tail_ptr_rd_resp_rdy (rx_pipe_rx_tail_ptr_rd_resp_rdy ) - - ,.store_buf_tmp_buf_store_rx_rd_req_val (store_buf_tmp_buf_store_rx_rd_req_val ) - ,.store_buf_tmp_buf_store_rx_rd_req_addr (store_buf_tmp_buf_store_rx_rd_req_addr ) - ,.tmp_buf_store_store_buf_rx_rd_req_rdy (tmp_buf_store_store_buf_rx_rd_req_rdy ) - - ,.tmp_buf_store_store_buf_rx_rd_resp_val (tmp_buf_store_store_buf_rx_rd_resp_val ) - ,.tmp_buf_store_store_buf_rx_rd_resp_data (tmp_buf_store_store_buf_rx_rd_resp_data ) - ,.store_buf_tmp_buf_store_rx_rd_resp_rdy (store_buf_tmp_buf_store_rx_rd_resp_rdy ) - - ,.store_buf_tmp_buf_free_slab_rx_req_val (store_buf_tmp_buf_free_slab_rx_req_val ) - ,.store_buf_tmp_buf_free_slab_rx_req_addr (store_buf_tmp_buf_free_slab_rx_req_addr ) - ,.tmp_buf_free_slab_store_buf_rx_req_rdy (tmp_buf_free_slab_store_buf_rx_req_rdy ) - ); - - - fifo_1r1w #( - .width_p (`RX_SEND_QUEUE_STRUCT_W) - ,.log2_els_p (2) - ) rx_send_queue ( - .clk (clk) - ,.rst (rst) - - ,.rd_req (rx_send_queue_deq_req_val ) - ,.empty (rx_send_queue_empty ) - ,.rd_data (rx_send_queue_deq_resp_data) - - ,.wr_req (rx_send_queue_enq_req_val ) - ,.wr_data (rx_send_queue_enq_req_data) - ,.full (send_queue_rx_full ) - ); - - send_merger send_merger ( - .tx_pipe_merger_tx_val (tx_pipe_dst_tx_val ) - ,.tx_pipe_merger_tx_flowid (tx_pipe_dst_tx_flowid ) - ,.tx_pipe_merger_tx_src_ip (tx_pipe_dst_tx_src_ip ) - ,.tx_pipe_merger_tx_dst_ip (tx_pipe_dst_tx_dst_ip ) - ,.tx_pipe_merger_tx_tcp_hdr (tx_pipe_dst_tx_tcp_hdr ) - ,.tx_pipe_merger_tx_payload (tx_pipe_dst_tx_payload ) - ,.merger_tx_pipe_tx_rdy (dst_tx_pipe_tx_rdy ) - - ,.rx_pipe_merger_tx_deq_req_val (rx_send_queue_deq_req_val ) - ,.rx_pipe_merger_tx_deq_resp_data (rx_send_queue_deq_resp_data) - ,.rx_pipe_merger_tx_empty (rx_send_queue_empty ) - - ,.send_dst_tx_val (send_dst_tx_val ) - ,.send_dst_tx_flowid (send_dst_tx_flowid ) - ,.send_dst_tx_src_ip (send_dst_tx_src_ip ) - ,.send_dst_tx_dst_ip (send_dst_tx_dst_ip ) - ,.send_dst_tx_tcp_hdr (send_dst_tx_tcp_hdr ) - ,.send_dst_tx_payload (send_dst_tx_payload ) - ,.dst_send_tx_rdy (dst_send_tx_rdy ) - ); - - rx_payload_ptrs rx_payload_qs ( - .clk (clk ) - ,.rst (rst ) - - ,.head_ptr_wr_req_val (app_rx_head_ptr_wr_req_val ) - ,.head_ptr_wr_req_addr (app_rx_head_ptr_wr_req_addr ) - ,.head_ptr_wr_req_data (app_rx_head_ptr_wr_req_data ) - ,.head_ptr_wr_req_rdy (rx_head_ptr_app_wr_req_rdy ) - - ,.head_ptr_rd0_req_val (rx_pipe_rx_head_ptr_rd_req_val ) - ,.head_ptr_rd0_req_addr (rx_pipe_rx_head_ptr_rd_req_addr ) - ,.head_ptr_rd0_req_rdy (rx_head_ptr_rx_pipe_rd_req_rdy ) - - ,.head_ptr_rd0_resp_val (rx_head_ptr_rx_pipe_rd_resp_val ) - ,.head_ptr_rd0_resp_data (rx_head_ptr_rx_pipe_rd_resp_data ) - ,.head_ptr_rd0_resp_rdy (rx_pipe_rx_head_ptr_rd_resp_rdy ) - - ,.head_ptr_rd1_req_val (app_rx_head_ptr_rd_req_val ) - ,.head_ptr_rd1_req_addr (app_rx_head_ptr_rd_req_addr ) - ,.head_ptr_rd1_req_rdy (rx_head_ptr_app_rd_req_rdy ) - - ,.head_ptr_rd1_resp_val (rx_head_ptr_app_rd_resp_val ) - ,.head_ptr_rd1_resp_data (rx_head_ptr_app_rd_resp_data ) - ,.head_ptr_rd1_resp_rdy (app_rx_head_ptr_rd_resp_rdy ) - - ,.commit_ptr_wr_req_val (rx_pipe_rx_commit_ptr_wr_req_val ) - ,.commit_ptr_wr_req_addr (rx_pipe_rx_commit_ptr_wr_req_addr ) - ,.commit_ptr_wr_req_data (rx_pipe_rx_commit_ptr_wr_req_data ) - ,.commit_ptr_wr_req_rdy (rx_commit_ptr_rx_pipe_wr_req_rdy ) - - ,.commit_ptr_rd0_req_val (rx_pipe_rx_commit_ptr_rd_req_val ) - ,.commit_ptr_rd0_req_addr (rx_pipe_rx_commit_ptr_rd_req_addr ) - ,.commit_ptr_rd0_req_rdy (rx_commit_ptr_rx_pipe_rd_req_rdy ) - - ,.commit_ptr_rd0_resp_val (rx_commit_ptr_rx_pipe_rd_resp_val ) - ,.commit_ptr_rd0_resp_data (rx_commit_ptr_rx_pipe_rd_resp_data ) - ,.commit_ptr_rd0_resp_rdy (rx_pipe_rx_commit_ptr_rd_resp_rdy ) - - ,.commit_ptr_rd1_req_val (app_rx_commit_ptr_rd_req_val ) - ,.commit_ptr_rd1_req_addr (app_rx_commit_ptr_rd_req_addr ) - ,.commit_ptr_rd1_req_rdy (rx_commit_ptr_app_rd_req_rdy ) - - ,.commit_ptr_rd1_resp_val (rx_commit_ptr_app_rd_resp_val ) - ,.commit_ptr_rd1_resp_data (rx_commit_ptr_app_rd_resp_data ) - ,.commit_ptr_rd1_resp_rdy (app_rx_commit_ptr_rd_resp_rdy ) - - ,.tail_ptr_wr_req_val (rx_pipe_rx_tail_ptr_wr_req_val ) - ,.tail_ptr_wr_req_addr (rx_pipe_rx_tail_ptr_wr_req_addr ) - ,.tail_ptr_wr_req_data (rx_pipe_rx_tail_ptr_wr_req_data ) - ,.tail_ptr_wr_req_rdy (rx_tail_ptr_rx_pipe_wr_req_rdy ) - - ,.tail_ptr_rd_req_val (rx_pipe_rx_tail_ptr_rd_req_val ) - ,.tail_ptr_rd_req_addr (rx_pipe_rx_tail_ptr_rd_req_addr ) - ,.tail_ptr_rd_req_rdy (rx_tail_ptr_rx_pipe_rd_req_rdy ) - - ,.tail_ptr_rd_resp_val (rx_tail_ptr_rx_pipe_rd_resp_val ) - ,.tail_ptr_rd_resp_data (rx_tail_ptr_rx_pipe_rd_resp_data ) - ,.tail_ptr_rd_resp_rdy (rx_pipe_rx_tail_ptr_rd_resp_rdy ) - - ,.new_flow_val (new_flow_val ) - ,.new_flow_flowid (new_flow_flowid ) - ,.new_rx_head_ptr ('0) - ,.new_rx_tail_ptr ('0) - ,.new_flow_rx_payload_ptrs_rdy (new_flow_rx_payload_ptrs_rdy ) - ); - -endmodule