diff --git a/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_assemble_header.vhd b/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_assemble_header.vhd index 3695122448a61b7269b3173561749dd5149419a9..7dbf44536ae3c60faa6be94109636d2fc364180c 100644 --- a/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_assemble_header.vhd +++ b/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_assemble_header.vhd @@ -21,25 +21,25 @@ -- Purpose: Assembles the RDMA header at snk_in.sop -- Description: -- The hdr_fields_slv output is set one st_clk cycle after snk_in.sop and will --- contain the RoCEv2 (RDMA over Converged Ethernet v2) header information for +-- contain the RoCEv2 (RDMA over Converged Ethernet v2) header information for -- the corresponding data frame. -- Remark -- . The incoming data frame on snk_in should consist of at least 2 clock cycles. --- i.e. two consecutive 1 cycle frames (sop + eop on the same clock cycle) +-- i.e. two consecutive 1 cycle frames (sop + eop on the same clock cycle) -- without a gap inbetween is not supported. library IEEE, common_lib, dp_lib, eth_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.common_field_pkg.all; -use dp_lib.dp_stream_pkg.all; -use dp_lib.dp_components_pkg.all; -use eth_lib.eth_pkg.all; -use eth_lib.eth_tester_pkg.all; -use work.rdma_packetiser_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.common_field_pkg.all; + use dp_lib.dp_stream_pkg.all; + use dp_lib.dp_components_pkg.all; + use eth_lib.eth_pkg.all; + use eth_lib.eth_tester_pkg.all; + use work.rdma_packetiser_pkg.all; entity rdma_packetiser_assemble_header is generic ( @@ -57,12 +57,12 @@ entity rdma_packetiser_assemble_header is immediate_data : in std_logic_vector(c_rdma_packetiser_roce_imm_len * c_octet_w - 1 downto 0) := (others => '0'); block_len : in std_logic_vector(c_halfword_w - 1 downto 0); -- in octets - nof_packets_in_msg : in std_logic_vector(c_word_w - 1 downto 0); - nof_msg : in std_logic_vector(c_word_w - 1 downto 0); + nof_packets_in_msg : in std_logic_vector(c_word_w - 1 downto 0); + nof_msg : in std_logic_vector(c_word_w - 1 downto 0); dma_len : in std_logic_vector(c_word_w - 1 downto 0); -- = block_len * nof_packets_in_msg start_address : in std_logic_vector(c_longword_w - 1 downto 0) - ); + ); end rdma_packetiser_assemble_header; architecture str of rdma_packetiser_assemble_header is @@ -89,7 +89,6 @@ architecture str of rdma_packetiser_assemble_header is constant c_reg_rst : t_reg := (s_idle, (others => '1'), (others => '0'), (others => '0'), (others => '0'), (others => '0'), 0, 0, 0, 0, 0); signal d, q : t_reg; begin - q <= d when rising_edge(st_clk); p_comb : process(st_rst, q, snk_in, nof_packets_in_msg, start_address, nof_msg, immediate_data, dma_len, block_len) @@ -145,7 +144,7 @@ begin v.opcode := c_rdma_packetiser_opcode_uc_write_last_im; end if; elsif snk_in.sop = '1' then - v.p_cnt := q.p_cnt + 1; + v.p_cnt := q.p_cnt + 1; end if; when s_last => @@ -157,11 +156,10 @@ begin v.msg_cnt := q.msg_cnt + 1; v.virtual_address := q.virtual_address + q.dma_len; end if; - end case; if st_rst = '1' then - v := c_reg_rst; + v := c_reg_rst; end if; d <= v; @@ -178,9 +176,9 @@ begin gen_use_msg_cnt : if g_use_msg_cnt_as_immediate generate hdr_fields_slv(field_hi(c_hdr_field_arr, "immediate_data") downto field_lo(c_hdr_field_arr, "immediate_data")) <= TO_UVEC(q.msg_cnt, 32); end generate; + gen_use_no_msg_cnt : if not g_use_msg_cnt_as_immediate generate hdr_fields_slv(field_hi(c_hdr_field_arr, "immediate_data") downto field_lo(c_hdr_field_arr, "immediate_data")) <= q.immediate_data; end generate; end generate; - end str; diff --git a/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_pkg.vhd b/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_pkg.vhd index cea6fea40982df396b6bc8bcfc79d5ab598972ab..c3f2a078aed2d799568c62bfba9dd952acde1438 100644 --- a/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_pkg.vhd +++ b/applications/rdma_demo/libraries/rdma_packetiser/src/vhdl/rdma_packetiser_pkg.vhd @@ -23,14 +23,13 @@ -- Description: -- library IEEE, common_lib; -use IEEE.std_logic_1164.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_field_pkg.all; -use common_lib.common_network_layers_pkg.all; + use IEEE.std_logic_1164.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_field_pkg.all; + use common_lib.common_network_layers_pkg.all; package rdma_packetiser_pkg is - type t_rdma_packetiser_bth_header is record opcode : std_logic_vector( 7 downto 0); se : std_logic_vector( 0 downto 0); @@ -48,9 +47,9 @@ package rdma_packetiser_pkg is end record; type t_rdma_packetiser_reth_header is record - virtual_address : std_logic_vector(63 downto 0); - r_key : std_logic_vector(31 downto 0); - dma_length : std_logic_vector(31 downto 0); + virtual_address : std_logic_vector(63 downto 0); + r_key : std_logic_vector(31 downto 0); + dma_length : std_logic_vector(31 downto 0); end record; type t_rdma_packetiser_roce_header is record @@ -89,49 +88,50 @@ package rdma_packetiser_pkg is constant c_rdma_packetiser_roce_nof_hdr_fields : natural := 3 + 12 + 4 + 13 + 3 + 1; constant c_rdma_packetiser_roce_hdr_field_sel : std_logic_vector(c_rdma_packetiser_roce_nof_hdr_fields - 1 downto 0) := "111" & "111011111001" & "0100" & "1111111111111" & "111" & "1"; - constant c_rdma_packetiser_roce_hdr_field_arr : t_common_field_arr(c_rdma_packetiser_roce_nof_hdr_fields - 1 downto 0) := ( - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), - - ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), - ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), - ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), - ( field_name_pad("ip_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path - ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), - ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), - ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), - ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), - ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), - ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_eth_tester_ip_dst_addr - - ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_eth_tester_udp_dst_port - ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path - ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), - - ( field_name_pad("bth_opcode" ), "RW", 8, field_default(x"FF") ), - ( field_name_pad("bth_se" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_m" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_pad" ), "RW", 2, field_default(0) ), - ( field_name_pad("bth_tver" ), "RW", 4, field_default(0) ), - ( field_name_pad("bth_partition_key" ), "RW", 16, field_default(65535) ), - ( field_name_pad("bth_fres" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_bres" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_reserved_a" ), "RW", 6, field_default(0) ), - ( field_name_pad("bth_dest_qp" ), "RW", 16, field_default(0) ), - ( field_name_pad("bth_ack_req" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_reserved_b" ), "RW", 7, field_default(0) ), - ( field_name_pad("bth_psn" ), "RW", 32, field_default(0) ), - - ( field_name_pad("reth_virtual_address"), "RW", 64, field_default(0) ), - ( field_name_pad("reth_r_key" ), "RW", 32, field_default(0) ), - ( field_name_pad("reth_dma_length" ), "RW", 32, field_default(0) ), - - ( field_name_pad("immediate_data" ), "RW", 32, field_default(0) ) - ); + constant c_rdma_packetiser_roce_hdr_field_arr : t_common_field_arr( + c_rdma_packetiser_roce_nof_hdr_fields - 1 downto 0) := ( + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), + + ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), + ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), + ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), + ( field_name_pad("ip_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path + ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), + ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), + ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), + ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), + ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), + ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_eth_tester_ip_dst_addr + + ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_eth_tester_udp_dst_port + ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path + ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), + + ( field_name_pad("bth_opcode" ), "RW", 8, field_default(x"FF") ), + ( field_name_pad("bth_se" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_m" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_pad" ), "RW", 2, field_default(0) ), + ( field_name_pad("bth_tver" ), "RW", 4, field_default(0) ), + ( field_name_pad("bth_partition_key" ), "RW", 16, field_default(65535) ), + ( field_name_pad("bth_fres" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_bres" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_reserved_a" ), "RW", 6, field_default(0) ), + ( field_name_pad("bth_dest_qp" ), "RW", 16, field_default(0) ), + ( field_name_pad("bth_ack_req" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_reserved_b" ), "RW", 7, field_default(0) ), + ( field_name_pad("bth_psn" ), "RW", 32, field_default(0) ), + + ( field_name_pad("reth_virtual_address"), "RW", 64, field_default(0) ), + ( field_name_pad("reth_r_key" ), "RW", 32, field_default(0) ), + ( field_name_pad("reth_dma_length" ), "RW", 32, field_default(0) ), + + ( field_name_pad("immediate_data" ), "RW", 32, field_default(0) ) + ); constant c_rdma_packetiser_roce_reg_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_packetiser_roce_hdr_field_arr, c_word_w)); constant c_rdma_packetiser_roce_reg_hdr_dat_addr_span : natural := 2**c_rdma_packetiser_roce_reg_hdr_dat_addr_w; @@ -140,47 +140,48 @@ package rdma_packetiser_pkg is constant c_rdma_packetiser_roce_no_imm_nof_hdr_fields : natural := 3 + 12 + 4 + 13 + 3; constant c_rdma_packetiser_roce_no_imm_hdr_field_sel : std_logic_vector(c_rdma_packetiser_roce_no_imm_nof_hdr_fields - 1 downto 0) := "111" & "111011111001" & "0100" & "1111111111111" & "111"; - constant c_rdma_packetiser_roce_no_imm_hdr_field_arr : t_common_field_arr(c_rdma_packetiser_roce_no_imm_nof_hdr_fields - 1 downto 0) := ( - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), - - ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), - ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), - ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), - ( field_name_pad("ip_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path - ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), - ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), - ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), - ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), - ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), - ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), - ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_eth_tester_ip_dst_addr - - ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_eth_tester_udp_dst_port - ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path - ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), - - ( field_name_pad("bth_opcode" ), "RW", 8, field_default(x"FF") ), - ( field_name_pad("bth_se" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_m" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_pad" ), "RW", 2, field_default(0) ), - ( field_name_pad("bth_tver" ), "RW", 4, field_default(0) ), - ( field_name_pad("bth_partition_key" ), "RW", 16, field_default(65535) ), - ( field_name_pad("bth_fres" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_bres" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_reserved_a" ), "RW", 6, field_default(0) ), - ( field_name_pad("bth_dest_qp" ), "RW", 16, field_default(0) ), - ( field_name_pad("bth_ack_req" ), "RW", 1, field_default(0) ), - ( field_name_pad("bth_reserved_b" ), "RW", 7, field_default(0) ), - ( field_name_pad("bth_psn" ), "RW", 32, field_default(0) ), - - ( field_name_pad("reth_virtual_address"), "RW", 64, field_default(0) ), - ( field_name_pad("reth_r_key" ), "RW", 32, field_default(0) ), - ( field_name_pad("reth_dma_length" ), "RW", 32, field_default(0) ) - ); + constant c_rdma_packetiser_roce_no_imm_hdr_field_arr : t_common_field_arr( + c_rdma_packetiser_roce_no_imm_nof_hdr_fields - 1 downto 0) := ( + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), + + ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), + ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), + ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), + ( field_name_pad("ip_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path + ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), + ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), + ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), + ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), + ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), + ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), + ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_eth_tester_ip_dst_addr + + ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_eth_tester_udp_dst_port + ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- depends on BG block size, so set by data path + ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), + + ( field_name_pad("bth_opcode" ), "RW", 8, field_default(x"FF") ), + ( field_name_pad("bth_se" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_m" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_pad" ), "RW", 2, field_default(0) ), + ( field_name_pad("bth_tver" ), "RW", 4, field_default(0) ), + ( field_name_pad("bth_partition_key" ), "RW", 16, field_default(65535) ), + ( field_name_pad("bth_fres" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_bres" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_reserved_a" ), "RW", 6, field_default(0) ), + ( field_name_pad("bth_dest_qp" ), "RW", 16, field_default(0) ), + ( field_name_pad("bth_ack_req" ), "RW", 1, field_default(0) ), + ( field_name_pad("bth_reserved_b" ), "RW", 7, field_default(0) ), + ( field_name_pad("bth_psn" ), "RW", 32, field_default(0) ), + + ( field_name_pad("reth_virtual_address"), "RW", 64, field_default(0) ), + ( field_name_pad("reth_r_key" ), "RW", 32, field_default(0) ), + ( field_name_pad("reth_dma_length" ), "RW", 32, field_default(0) ) + ); constant c_rdma_packetiser_roce_reg_no_imm_hdr_dat_addr_w : natural := ceil_log2(field_nof_words(c_rdma_packetiser_roce_no_imm_hdr_field_arr, c_word_w)); constant c_rdma_packetiser_roce_reg_no_imm_hdr_dat_addr_span : natural := 2**c_rdma_packetiser_roce_reg_no_imm_hdr_dat_addr_w; @@ -201,13 +202,12 @@ package rdma_packetiser_pkg is constant c_rdma_packetiser_opcode_uc_write_last_im : std_logic_vector := "001" & "01001"; constant c_rdma_packetiser_opcode_uc_write_only : std_logic_vector := "001" & "01010"; constant c_rdma_packetiser_opcode_uc_write_only_im : std_logic_vector := "001" & "01011"; - - function func_rdma_packetiser_map_header(hdr_fields_raw : std_logic_vector; use_immediate : boolean) return t_rdma_packetiser_roce_header; + + function func_rdma_packetiser_map_header(hdr_fields_raw : std_logic_vector; use_immediate : boolean) return t_rdma_packetiser_roce_header; end rdma_packetiser_pkg; package body rdma_packetiser_pkg is - function func_rdma_packetiser_map_header(hdr_fields_raw : std_logic_vector; use_immediate : boolean) return t_rdma_packetiser_roce_header is variable v : t_rdma_packetiser_roce_header; constant c_hdr_field_arr : t_common_field_arr := sel_a_b(use_immediate, c_rdma_packetiser_roce_hdr_field_arr, c_rdma_packetiser_roce_no_imm_hdr_field_arr); @@ -251,7 +251,7 @@ package body rdma_packetiser_pkg is v.bth.ack_req := hdr_fields_raw(field_hi(c_hdr_field_arr, "bth_ack_req") downto field_lo(c_hdr_field_arr, "bth_ack_req")); v.bth.reserved_b := hdr_fields_raw(field_hi(c_hdr_field_arr, "bth_reserved_b") downto field_lo(c_hdr_field_arr, "bth_reserved_b")); v.bth.psn := hdr_fields_raw(field_hi(c_hdr_field_arr, "bth_psn") downto field_lo(c_hdr_field_arr, "bth_psn")); - + -- reth header v.reth.virtual_address := hdr_fields_raw(field_hi(c_hdr_field_arr, "reth_virtual_address") downto field_lo(c_hdr_field_arr, "reth_virtual_address")); v.reth.r_key := hdr_fields_raw(field_hi(c_hdr_field_arr, "reth_r_key") downto field_lo(c_hdr_field_arr, "reth_r_key")); @@ -266,6 +266,4 @@ package body rdma_packetiser_pkg is return v; end func_rdma_packetiser_map_header; - - end rdma_packetiser_pkg; diff --git a/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_rdma_packetiser_assemble_header.vhd b/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_rdma_packetiser_assemble_header.vhd index 84fc97af8b55bea2172123e3801e26426ba0f3c5..9644b24454b1803bf9820a447a8113a797d07ea6 100644 --- a/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_rdma_packetiser_assemble_header.vhd +++ b/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_rdma_packetiser_assemble_header.vhd @@ -33,16 +33,16 @@ ------------------------------------------------------------------------------- library IEEE, common_lib, dp_lib; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use common_lib.common_pkg.all; -use common_lib.common_mem_pkg.all; -use common_lib.common_network_layers_pkg.all; -use common_lib.tb_common_pkg.all; -use common_lib.tb_common_mem_pkg.all; -use dp_lib.tb_dp_pkg.all; -use dp_lib.dp_stream_pkg.all; -use work.rdma_packetiser_pkg.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use common_lib.common_pkg.all; + use common_lib.common_mem_pkg.all; + use common_lib.common_network_layers_pkg.all; + use common_lib.tb_common_pkg.all; + use common_lib.tb_common_mem_pkg.all; + use dp_lib.tb_dp_pkg.all; + use dp_lib.dp_stream_pkg.all; + use work.rdma_packetiser_pkg.all; entity tb_rdma_packetiser_assemble_header is generic ( @@ -61,14 +61,15 @@ architecture tb of tb_rdma_packetiser_assemble_header is constant c_data_w : natural := c_word_w; constant c_data_init : natural := 13; constant c_hdr_fields_slv_rst : std_logic_vector(1023 downto 0) := (others => '0'); - constant c_rdma_hdr_len : natural := c_rdma_packetiser_roce_icrc_len + sel_a_b(g_use_immediate, - c_rdma_packetiser_roce_hdr_len, c_rdma_packetiser_roce_no_imm_hdr_len); + constant c_rdma_hdr_len : natural := c_rdma_packetiser_roce_icrc_len + sel_a_b( + g_use_immediate, + c_rdma_packetiser_roce_hdr_len, c_rdma_packetiser_roce_no_imm_hdr_len); constant c_block_len : natural := g_frame_len * (c_data_w / c_octet_w); constant c_dma_len : natural := c_block_len * g_nof_packets_in_msg; signal tb_end : std_logic := '0'; - signal dp_clk : std_logic := '1'; + signal dp_clk : std_logic := '1'; signal dp_rst : std_logic; signal immediate_data : std_logic_vector(c_word_w - 1 downto 0) := X"89ABCDEF"; @@ -85,24 +86,21 @@ architecture tb of tb_rdma_packetiser_assemble_header is signal snk_in : t_dp_sosi := c_dp_sosi_rst; signal snk_out : t_dp_siso := c_dp_siso_rdy; - - begin dp_rst <= '1', '0' after c_dp_clk_period * 7; dp_clk <= (not dp_clk) or tb_end after c_dp_clk_period / 2; - + rdma_header <= func_rdma_packetiser_map_header(hdr_fields_slv, g_use_immediate ); - + p_dp_stimuli : process begin - -- dp stimuli proc_common_wait_until_low(dp_clk, dp_rst); proc_common_wait_some_cycles(dp_clk, 100); in_en <= '1'; for rep in 0 to g_nof_rep - 1 loop proc_dp_gen_block_data(1, true, c_data_w, c_data_w, c_data_init, 0, 0, g_frame_len, 0, 0, '0', TO_DP_BSN(rep), dp_clk, in_en, snk_out, snk_in); - end loop; + end loop; proc_common_wait_some_cycles(dp_clk, 100); in_en <= '0'; wait; @@ -127,8 +125,8 @@ begin v_exp_bth_psn := v_p; v_exp_reth_virtual_address := g_start_address + to_unsigned((v_m mod g_nof_msg) * c_dma_len, c_longword_w); v_exp_reth_dma_length := c_dma_len; - v_exp_immediate_data := sel_a_b(g_use_immediate, - sel_a_b(g_use_msg_cnt_as_immediate, to_uvec((v_m mod g_nof_msg), c_word_w), immediate_data), to_uvec(0, c_word_w)); + v_exp_immediate_data := sel_a_b(g_use_immediate, + sel_a_b(g_use_msg_cnt_as_immediate, to_uvec((v_m mod g_nof_msg), c_word_w), immediate_data), to_uvec(0, c_word_w)); -- determine expected opcode if v_p mod g_nof_packets_in_msg = 0 then @@ -143,14 +141,14 @@ begin if g_use_immediate then v_exp_bth_opcode := c_rdma_packetiser_opcode_uc_write_last_im; end if; - else + else v_exp_bth_opcode := c_rdma_packetiser_opcode_uc_write_middle; end if; - + -- increase counters v_p := v_p + 1; v_m := v_p / g_nof_packets_in_msg; - + -- assign expected values to signal to view in wave window. exp_rdma_header.ip.total_length <= to_uvec(v_exp_ip_total_length, c_halfword_w); exp_rdma_header.udp.total_length <= to_uvec(v_exp_udp_total_length, c_halfword_w ); @@ -169,7 +167,6 @@ begin assert unsigned(rdma_header.reth.virtual_address) = v_exp_reth_virtual_address report "Wrong rdma_header.reth.virtual_address value" severity error; assert TO_UINT(rdma_header.reth.dma_length) = v_exp_reth_dma_length report "Wrong rdma_header.reth.dma_length value" severity error; assert rdma_header.immediate_data = v_exp_immediate_data report "Wrong rdma_header.immediate_data value" severity error; - end loop; proc_common_wait_some_cycles(dp_clk, 100); @@ -178,22 +175,22 @@ begin end process; u_dut: entity work.rdma_packetiser_assemble_header - generic map ( - g_use_immediate => g_use_immediate, - g_use_msg_cnt_as_immediate => g_use_msg_cnt_as_immediate - ) - port map ( - st_clk => dp_clk, - st_rst => dp_rst, - - snk_in => snk_in, - hdr_fields_slv => hdr_fields_slv, - - immediate_data => immediate_data, - block_len => block_len, - nof_packets_in_msg => nof_packets_in_msg, - nof_msg => nof_msg, - dma_len => dma_len, - start_address => start_address - ); + generic map ( + g_use_immediate => g_use_immediate, + g_use_msg_cnt_as_immediate => g_use_msg_cnt_as_immediate + ) + port map ( + st_clk => dp_clk, + st_rst => dp_rst, + + snk_in => snk_in, + hdr_fields_slv => hdr_fields_slv, + + immediate_data => immediate_data, + block_len => block_len, + nof_packets_in_msg => nof_packets_in_msg, + nof_msg => nof_msg, + dma_len => dma_len, + start_address => start_address + ); end tb; diff --git a/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_tb_rdma_packetiser_assemble_header.vhd b/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_tb_rdma_packetiser_assemble_header.vhd index b956b27c12a514df5dbb109d65b8987928b74b9e..4bc4b5ebe94a6a037caa0fbb4291cb775306dba2 100644 --- a/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_tb_rdma_packetiser_assemble_header.vhd +++ b/applications/rdma_demo/libraries/rdma_packetiser/tb/vhdl/tb_tb_rdma_packetiser_assemble_header.vhd @@ -19,7 +19,7 @@ ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- --- Author : R vd Walle +-- Author : R vd Walle -- Purpose: Verify multiple variations of tb_rdma_packetiser_assemble_header -- Description: -- Usage: @@ -28,8 +28,8 @@ ------------------------------------------------------------------------------- library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; entity tb_tb_rdma_packetiser_assemble_header is end tb_tb_rdma_packetiser_assemble_header; @@ -39,15 +39,14 @@ architecture tb of tb_tb_rdma_packetiser_assemble_header is constant c_high_start_addr : unsigned(63 downto 0) := X"CBA9876543210000"; -- arbitrary high start address signal tb_end : std_logic := '0'; -- declare tb_end to avoid 'No objects found' error on 'when -label tb_end' begin - --- All generics of TB --- g_use_immediate : boolean := true; --- g_use_msg_cnt_as_immediate : boolean := true; --- g_nof_rep : natural := 15; --- g_frame_len : natural := 15; --- g_start_address : unsigned(c_longword_w - 1 downto 0) := (others => '0'); --- g_nof_packets_in_msg : natural := 4; --- g_nof_msg : natural := 3 + -- All generics of TB + -- g_use_immediate : boolean := true; + -- g_use_msg_cnt_as_immediate : boolean := true; + -- g_nof_rep : natural := 15; + -- g_frame_len : natural := 15; + -- g_start_address : unsigned(c_longword_w - 1 downto 0) := (others => '0'); + -- g_nof_packets_in_msg : natural := 4; + -- g_nof_msg : natural := 3 u_lo_addr : entity work.tb_rdma_packetiser_assemble_header generic map( true, true, 20, 15, c_low_start_addr, 4, 5); u_hi_addr : entity work.tb_rdma_packetiser_assemble_header generic map( true, true, 20, 15, c_high_start_addr, 4, 5);