Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions fluid/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def __init__(self, name):
self.add_control("parser_meta_csr_readdata", 32, Direction.OUTPUT)
self.add_control("stats_incomp_out_meta", 32, Direction.OUTPUT)
self.add_control("stats_parser_out_meta", 32, Direction.OUTPUT)
self.add_control("stats_parser_out_bytes", 64, Direction.OUTPUT)
self.add_control("stats_ft_in_meta", 32, Direction.OUTPUT)
self.add_control("stats_ft_out_meta", 32, Direction.OUTPUT)
self.add_control("stats_emptylist_in", 32, Direction.OUTPUT)
Expand All @@ -39,6 +40,7 @@ def __init__(self, name):
self.add_control("stats_dm_in_check_meta", 32, Direction.OUTPUT)
self.add_control("stats_dm_in_ooo_meta", 32, Direction.OUTPUT)
self.add_control("stats_dm_in_forward_ooo_meta", 32, Direction.OUTPUT)
self.add_control("stats_dm_out_bytes", 64, Direction.OUTPUT)
self.add_control("stats_nopayload_pkt", 32, Direction.OUTPUT)
self.add_control("stats_dm_check_pkt", 32, Direction.OUTPUT)

Expand Down
136 changes: 119 additions & 17 deletions pigasus.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,22 +137,34 @@ def struct_s():
`ifndef STRUCT_S
`define STRUCT_S

//`define SIM
// `define SIM
`define USE_BRAM
`define BRAM_CHECKPKT_BUF
`define NO_C2F
//`define DISABLE_NF_BYPASS
// `define DISABLE_NF_BYPASS
// `define NO_BP
// `define ENABLE_SURGEPROTECTOR

// Reassembler scheduling policy
`ifdef ENABLE_SURGEPROTECTOR""")
SCHEDULER_REASSEMBLY_POLICY = Param("WSJF")
T("`else")
SCHEDULER_REASSEMBLY_POLICY = Param("FCFS")
T("""`endif

// Packet buffer
// STORE 1024 pkts, each pkt takes 32 * 512 bits = 2 KB.
// 32 * 1024 = 32768 entries.
`ifdef USE_BRAM""")
`ifdef USE_BRAM
`ifdef PKT_NUM
parameter PKT_NUM = `PKT_NUM;
`else""")
PKT_NUM = Param(PKT_NUM_BRAM_V)
T("`else")
T("""`endif
`else""")
PKT_NUM = Param(PKT_NUM_V)
T("`endif")
T("""`endif""")

PKTBUF_AWIDTH = Param(clog2(PKT_NUM) + 5)
PKTBUF_DEPTH = Param(32 * PKT_NUM)
PKT_AWIDTH = Param(clog2(PKT_NUM))
Expand Down Expand Up @@ -181,7 +193,7 @@ def struct_s():
ETH_IP = Param(ETH_IP_V)
ETH_META = Param(ETH_META_V)
ETH_USR = Param(ETH_USR_V)

PROT_ETH = Param(PROT_ETH_V)
IP_V4 = Param(IP_V4_V)
PROT_TCP = Param(PROT_TCP_V)
Expand Down Expand Up @@ -244,7 +256,6 @@ def struct_s():
} flit_meta_t;""")

# Linked list entry
LL_DWIDTH = Param(1 + 32 + 16 + 16 + PKT_AWIDTH + 1 + 56)
T("""
typedef struct packed {
logic valid; // Valid
Expand All @@ -256,18 +267,108 @@ def struct_s():
logic last; // Last
logic [55:0] last_7_bytes; // Last
} entry_t;""")
LL_DWIDTH = Param(1 + 32 + 16 + LL_AWIDTH + PKT_AWIDTH + 5 + 1 + 56)

# Tuple
TUPLE_DWIDTH = Param(32 + 32 + 16 + 16)
T("""
typedef struct packed {
logic [31:0] sIP;
logic [31:0] dIP;
logic [15:0] sPort;
logic [15:0] dPort;
} tuple_t;
} tuple_t;""")
TUPLE_DWIDTH = Param(32 + 32 + 16 + 16)

T("""
/**
* Reassembler service.
*/
// OOO flow IDs""")
MAX_NUM_OOO_FLOWS = Param(1024)
OOO_FLOW_ID_AWIDTH = Param(clog2(MAX_NUM_OOO_FLOWS))
T("""// Service Queue""")
HEAP_BITMAP_WIDTH = Param(32)
HEAP_MAX_NUM_ENTRIES = Param(MAX_NUM_OOO_FLOWS)
HEAP_NUM_PRIORITIES = Param(HEAP_BITMAP_WIDTH ** 2)
HEAP_PRIORITY_AWIDTH = Param(clog2(HEAP_NUM_PRIORITIES))
HEAP_LOG_MAX_NUM_ENTRIES = Param(clog2(HEAP_MAX_NUM_ENTRIES))
T("""// Scheduler""")
OOO_FLOW_LL_MAX_NUM_ENTRIES = Param(PKT_NUM / 2)
OOO_FLOW_LL_ENTRY_AWIDTH = Param(clog2(OOO_FLOW_LL_MAX_NUM_ENTRIES))
OOO_FLOW_LL_ENTRY_PTR_T_WIDTH = Param(OOO_FLOW_LL_ENTRY_AWIDTH + 1)

T("""
typedef logic [OOO_FLOW_ID_AWIDTH-1:0] ooo_flow_id_t;
typedef logic [HEAP_LOG_MAX_NUM_ENTRIES:0] heap_size_t;
typedef logic [HEAP_PRIORITY_AWIDTH-1:0] heap_priority_t;
typedef logic [OOO_FLOW_LL_ENTRY_PTR_T_WIDTH-1:0] ooo_flow_ll_entry_ptr_t;""")

# Scheduler token
T("""
typedef struct packed {
tuple_t tuple;
ooo_flow_id_t ooo_flow_id;
} scheduler_token_t;""")
SCHEDULER_TOKEN_T_WIDTH = Param(TUPLE_DWIDTH + OOO_FLOW_ID_AWIDTH)

T("""
typedef struct packed {
ooo_flow_ll_entry_ptr_t head;
ooo_flow_ll_entry_ptr_t tail;
} ooo_flow_list_t;""")
OOO_FLOW_LIST_T_WIDTH = Localparam(2 * OOO_FLOW_LL_ENTRY_PTR_T_WIDTH)

T("""
typedef struct packed {
logic valid;
tuple_t tuple;
logic [31:0] seq;
logic ll_valid;
logic [LL_AWIDTH-1:0] pointer;
logic [LL_AWIDTH-1:0] ll_size;
logic [55:0] last_7_bytes;
logic [FT_AWIDTH-1:0] addr0;
logic [FT_AWIDTH-1:0] addr1;
logic [FT_AWIDTH-1:0] addr2;
logic [FT_AWIDTH-1:0] addr3;
ooo_flow_list_t ooo_flow_ll;
} ooo_flow_fc_entry_t;""")
OOO_FLOW_FC_ENTRY_T_WIDTH = Localparam(1 + TUPLE_DWIDTH + 32 + 1 + LL_AWIDTH + LL_AWIDTH +
56 + (4 * FT_AWIDTH) + OOO_FLOW_LIST_T_WIDTH)

T("""
typedef struct packed {
tuple_t tuple;
logic is_delete;
logic [31:0] seq;
logic [FT_AWIDTH-1:0] addr0;
logic [FT_AWIDTH-1:0] addr1;
logic [FT_AWIDTH-1:0] addr2;
logic [FT_AWIDTH-1:0] addr3;
logic [PKT_AWIDTH-1:0] rel_pkt_cnt;
} ft_update_t;""")
FT_UPDATE_T_WIDTH = Localparam(TUPLE_DWIDTH + 1 + 32 + (4 * FT_AWIDTH) + PKT_AWIDTH)

T("""
typedef struct packed {
ooo_flow_id_t ooo_flow_id;
tuple_t tuple;
logic [FT_AWIDTH-1:0] addr0;
logic [FT_AWIDTH-1:0] addr1;
logic [FT_AWIDTH-1:0] addr2;
logic [FT_AWIDTH-1:0] addr3;
} reassembly_gc_meta_t;""")
REASSEMBLY_GC_META_T_WIDTH = Localparam(OOO_FLOW_ID_AWIDTH + TUPLE_DWIDTH + (4 * FT_AWIDTH))

T("""
typedef struct packed {
logic ll_valid;
logic [LL_AWIDTH-1:0] pointer;
reassembly_gc_meta_t meta;
} reassembly_gc_req_t;""")
REASSEMBLY_GC_REQ_T_WIDTH = Localparam(1 + LL_AWIDTH + REASSEMBLY_GC_META_T_WIDTH)

T("""
typedef struct packed {
logic [31:0] c2f_kmem_high_1; // higher 32 bit of kernel memory, FPGA read only
logic [31:0] c2f_kmem_low_1; // lower 32 bit of kernel memory, FPGA read only
Expand All @@ -290,22 +391,23 @@ def struct_s():
logic [31:0] f2c_tail; // tail pointer, CPU read only
} pcie_block_t;""")

FT_DWIDTH = Param(1 + TUPLE_DWIDTH + 32 + LL_AWIDTH + 1 + PKT_AWIDTH + 56 + (4 * FT_AWIDTH))
T("""
typedef struct packed {
logic valid;
tuple_t tuple;
logic [31:0] seq;
logic [LL_AWIDTH-1:0] pointer;
logic ll_valid;
logic [PKT_AWIDTH-1:0] slow_cnt;
logic [55:0] last_7_bytes;
logic [FT_AWIDTH-1:0] addr0;
logic [FT_AWIDTH-1:0] addr1;
logic [FT_AWIDTH-1:0] addr2;
logic [FT_AWIDTH-1:0] addr3;
} fce_t; // Flow context entry
logic ooo_flow_id_valid;
logic [OOO_FLOW_ID_AWIDTH-1:0] ooo_flow_id;
} fce_t; // Flow context entry""")
FT_DWIDTH = Param(1 + TUPLE_DWIDTH + 32 + PKT_AWIDTH + 56 + (4 * FT_AWIDTH) + 1 + OOO_FLOW_ID_AWIDTH)

T("""
typedef struct packed {
tuple_t tuple;
logic [FT_AWIDTH-1:0] addr0;
Expand Down Expand Up @@ -499,7 +601,7 @@ def struct_s():
# super().__init__("identity", SourceType.SYSTEM_VERILOG, name)
# self.add_extern_connection("clk", "clk_pcie")
# self.add_extern_connection("rst_n", "rst_n_pcie")

# self.add_provides("in_pkt", 32, 512, channel_type="Packet")
# self.add_provides("in_meta", 32, 512, channel_type="Meta")
# self.add_provides("in_usr", 32, 512, channel_type="Usr")
Expand All @@ -509,7 +611,7 @@ def struct_s():
# self.add_requires("out_usr", channel_type="Usr")





# Start constructing the application
Expand Down Expand Up @@ -633,7 +735,7 @@ def struct_s():
# like an identity function
# identity = Identity("id")

# FIFO to and from example module
# FIFO to and from example module
#identity_cf = make_channel_fifo("clk_pcie", "rst_n_pcie", "identity_fill_level")
#identity_cf2 = make_channel_fifo("clk_pcie", "rst_n_pcie", "identity2_fill_level")

Expand Down
3 changes: 2 additions & 1 deletion pigasus/hardware/rtl_sim/run_vsim.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ cd ./src/non_fast_pattern_matcher/
./update.sh
cd ../../

vlog +define+SIM +define+PKT_FILE=\"$PKT_FILE\" +define+PKT_FILE_NB_LINES=$PKT_FILE_NB_LINES ./src/*.*v -sv
vlog +define+SIM +define+PKT_FILE=\"$PKT_FILE\" +define+PKT_FILE_NB_LINES=$PKT_FILE_NB_LINES ./src/*.*v -sv
#vlog *.v
vlog +define+SIM ./src/common/*.sv -sv
vlog +define+SIM ./src/common/*.v
Expand All @@ -45,6 +45,7 @@ vlog +define+SIM ./src/parser/*.sv -sv
vlog +define+SIM ./src/pcie/*.sv -sv
vlog +define+SIM ./src/port_group/*.sv -sv
vlog +define+SIM ./src/reassembly/*.sv -sv
vlog +define+SIM ./src/reassembly/surge_protector/*.sv -sv
vlog +define+SIM ./src/services/*.sv -sv

#GUI full debug
Expand Down
Loading