Skip to content
Snippets Groups Projects
Commit 200b898d authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on gn_index.

parent d514e092
No related branches found
No related tags found
1 merge request!283Resolve L2SDP-696
......@@ -32,14 +32,17 @@ USE common_lib.common_network_layers_pkg.ALL;
USE work.sdp_pkg.ALL;
PACKAGE tb_sdp_pkg is
-----------------------------------------------------------------------------
-- Derive low part of MAC, IP from global node (GN) index
-----------------------------------------------------------------------------
FUNCTION func_sdp_gn_index_to_mac_15_0(gn_index : NATURAL) RETURN STD_LOGIC_VECTOR;
FUNCTION func_sdp_gn_index_to_ip_15_0(gn_index : NATURAL) RETURN STD_LOGIC_VECTOR;
-----------------------------------------------------------------------------
-- Statistics offload
-----------------------------------------------------------------------------
FUNCTION func_sdp_compose_stat_header(eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); -- eth header
eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0);
ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); -- ip header
ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0);
sdp_info : t_sdp_info; -- app header
FUNCTION func_sdp_compose_stat_header(sdp_info : t_sdp_info; -- app header
g_statistics_type : STRING;
weighted_subbands_flag : STD_LOGIC;
gn_index : NATURAL;
......@@ -56,11 +59,7 @@ PACKAGE tb_sdp_pkg is
-----------------------------------------------------------------------------
-- Beamlet output via 10GbE to CEP (= central processor)
-----------------------------------------------------------------------------
FUNCTION func_sdp_compose_cep_header(eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); -- eth header
eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0);
ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); -- ip header
ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0);
ip_header_checksum : NATURAL;
FUNCTION func_sdp_compose_cep_header(ip_header_checksum : NATURAL;
sdp_info : t_sdp_info; -- app header
gn_index : NATURAL;
beamlet_scale : NATURAL;
......@@ -74,11 +73,23 @@ END PACKAGE tb_sdp_pkg;
PACKAGE BODY tb_sdp_pkg IS
FUNCTION func_sdp_compose_stat_header(eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); -- eth header
eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0);
ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); -- ip header
ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0);
sdp_info : t_sdp_info; -- app header
FUNCTION func_sdp_gn_index_to_mac_15_0(gn_index : NATURAL) RETURN STD_LOGIC_VECTOR IS
CONSTANT c_unb_nr : NATURAL := gn_index / 4; -- 4 PN per Uniboard2
CONSTANT c_node_nr : NATURAL := gn_index MOD 4;
CONSTANT c_mac_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr, 8);
BEGIN
RETURN c_mac_15_0;
END func_sdp_gn_index_to_mac_15_0;
FUNCTION func_sdp_gn_index_to_ip_15_0(gn_index : NATURAL) RETURN STD_LOGIC_VECTOR IS
CONSTANT c_unb_nr : NATURAL := gn_index / 4; -- 4 PN per Uniboard2
CONSTANT c_node_nr : NATURAL := gn_index MOD 4;
CONSTANT c_ip_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr+1, 8); -- +1 to avoid IP = *.*.*.0
BEGIN
RETURN c_ip_15_0;
END func_sdp_gn_index_to_ip_15_0;
FUNCTION func_sdp_compose_stat_header(sdp_info : t_sdp_info; -- app header
g_statistics_type : STRING;
weighted_subbands_flag : STD_LOGIC;
gn_index : NATURAL;
......@@ -89,6 +100,10 @@ PACKAGE BODY tb_sdp_pkg IS
xst_signal_input_A : NATURAL;
xst_signal_input_B : NATURAL;
dp_bsn : NATURAL) RETURN t_sdp_stat_header IS
-- Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on gn_index
CONSTANT c_mac_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := func_sdp_gn_index_to_mac_15_0(gn_index);
CONSTANT c_ip_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := func_sdp_gn_index_to_ip_15_0(gn_index);
CONSTANT c_nof_statistics_per_packet : NATURAL := func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type);
CONSTANT c_udp_total_length : NATURAL := func_sdp_get_stat_udp_total_length(g_statistics_type);
CONSTANT c_ip_total_length : NATURAL := func_sdp_get_stat_ip_total_length(g_statistics_type);
......@@ -98,8 +113,8 @@ PACKAGE BODY tb_sdp_pkg IS
VARIABLE v_hdr : t_sdp_stat_header;
BEGIN
-- eth header
v_hdr.eth.dst_mac := eth_dst_mac;
v_hdr.eth.src_mac := eth_src_mac;
v_hdr.eth.dst_mac := c_sdp_stat_eth_dst_mac;
v_hdr.eth.src_mac := c_sdp_stat_eth_src_mac_47_16 & c_mac_15_0;
v_hdr.eth.eth_type := x"0800";
-- ip header
......@@ -112,18 +127,13 @@ PACKAGE BODY tb_sdp_pkg IS
v_hdr.ip.fragment_offset := TO_UVEC( 0, c_network_ip_fragment_offset_w);
v_hdr.ip.time_to_live := TO_UVEC( 127, c_network_ip_time_to_live_w);
v_hdr.ip.protocol := TO_UVEC( 17, c_network_ip_protocol_w);
-- the IP header check sum is calculated in IO eth, so still 0 here
v_hdr.ip.header_checksum := TO_UVEC( 0, c_network_ip_header_checksum_w);
v_hdr.ip.src_ip_addr := ip_src_addr; -- c_network_ip_addr_w
v_hdr.ip.dst_ip_addr := ip_dst_addr; -- c_network_ip_addr_w
v_hdr.ip.src_ip_addr := c_sdp_stat_ip_src_addr_31_16 & c_ip_15_0; -- c_network_ip_addr_w
v_hdr.ip.dst_ip_addr := c_sdp_stat_ip_dst_addr; -- c_network_ip_addr_w
-- udp header
IF g_statistics_type = "SST" OR g_statistics_type = "SST_OS" THEN
v_hdr.udp.src_port := c_sdp_sst_udp_src_port_15_8 & TO_UVEC(gn_index, 8);
ELSIF g_statistics_type = "BST" THEN
v_hdr.udp.src_port := c_sdp_bst_udp_src_port_15_8 & TO_UVEC(gn_index, 8);
ELSIF g_statistics_type = "XST" THEN
v_hdr.udp.src_port := c_sdp_xst_udp_src_port_15_8 & TO_UVEC(gn_index, 8);
END IF;
v_hdr.udp.src_port := func_sdp_get_stat_udp_src_port(g_statistics_type, gn_index);
v_hdr.udp.dst_port := c_sdp_stat_udp_dst_port;
v_hdr.udp.total_length := TO_UVEC(c_udp_total_length, c_network_udp_port_w);
v_hdr.udp.checksum := TO_UVEC( 0, c_network_udp_checksum_w);
......@@ -237,21 +247,21 @@ PACKAGE BODY tb_sdp_pkg IS
END func_sdp_verify_stat_header;
FUNCTION func_sdp_compose_cep_header(eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); -- eth header
eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0);
ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); -- ip header
ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0);
ip_header_checksum : NATURAL;
FUNCTION func_sdp_compose_cep_header(ip_header_checksum : NATURAL;
sdp_info : t_sdp_info; -- app header
gn_index : NATURAL;
beamlet_scale : NATURAL;
beamlet_index : NATURAL;
dp_bsn : NATURAL) RETURN t_sdp_cep_header IS
-- Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on gn_index
CONSTANT c_mac_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := func_sdp_gn_index_to_mac_15_0(gn_index);
CONSTANT c_ip_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := func_sdp_gn_index_to_ip_15_0(gn_index);
VARIABLE v_hdr : t_sdp_cep_header;
BEGIN
-- eth header
v_hdr.eth.dst_mac := eth_dst_mac;
v_hdr.eth.src_mac := eth_src_mac;
v_hdr.eth.dst_mac := c_sdp_cep_eth_dst_mac;
v_hdr.eth.src_mac := c_sdp_cep_eth_src_mac_47_16 & c_mac_15_0;
v_hdr.eth.eth_type := x"0800";
-- ip header
......@@ -265,8 +275,8 @@ PACKAGE BODY tb_sdp_pkg IS
v_hdr.ip.time_to_live := TO_UVEC( 127, c_network_ip_time_to_live_w);
v_hdr.ip.protocol := TO_UVEC( 17, c_network_ip_protocol_w);
v_hdr.ip.header_checksum := TO_UVEC( ip_header_checksum, c_network_ip_header_checksum_w);
v_hdr.ip.src_ip_addr := ip_src_addr; -- c_network_ip_addr_w
v_hdr.ip.dst_ip_addr := ip_dst_addr; -- c_network_ip_addr_w
v_hdr.ip.src_ip_addr := c_sdp_cep_ip_src_addr_31_16 & c_ip_15_0; -- c_network_ip_addr_w
v_hdr.ip.dst_ip_addr := c_sdp_cep_ip_dst_addr; -- c_network_ip_addr_w
-- udp header
v_hdr.udp.src_port := c_sdp_cep_udp_src_port_15_8 & TO_UVEC(gn_index, 8);
......
......@@ -82,10 +82,10 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
CONSTANT c_offload_time : NATURAL := g_offload_time * g_gn_index;
-- In this tb simply use fixed network src addresses
CONSTANT c_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0) := x"123456789ABC";
CONSTANT c_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0) := x"0A090807";
CONSTANT c_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0) := func_sdp_get_stat_udp_src_port(g_statistics_type, g_gn_index);
-- Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on g_gn_index
CONSTANT c_node_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_stat_eth_src_mac_47_16 & func_sdp_gn_index_to_mac_15_0(g_gn_index);
CONSTANT c_node_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_stat_ip_src_addr_31_16 & func_sdp_gn_index_to_ip_15_0(g_gn_index);
CONSTANT c_node_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := func_sdp_get_stat_udp_src_port(g_statistics_type, g_gn_index);
-- Used mm_adresses on mm bus "enable_mosi/miso".
CONSTANT c_reg_enable_mm_addr_enable : NATURAL := 0;
......@@ -385,11 +385,7 @@ BEGIN
-- . prepare expected XST signal_input_B index, assume crosslet transport in positive direction
exp_xst_signal_input_B <= (source_gn MOD c_sdp_N_pn_max) * c_sdp_S_pn;
exp_sdp_stat_header <= func_sdp_compose_stat_header(c_sdp_stat_eth_dst_mac,
c_eth_src_mac,
c_ip_src_addr,
c_sdp_stat_ip_dst_addr,
exp_sdp_info,
exp_sdp_stat_header <= func_sdp_compose_stat_header(exp_sdp_info,
g_statistics_type,
weighted_subbands_flag,
gn_index,
......@@ -671,9 +667,9 @@ BEGIN
out_siso => sdp_offload_siso,
-- Inputs from other blocks
eth_src_mac => c_eth_src_mac,
udp_src_port => c_udp_src_port,
ip_src_addr => c_ip_src_addr,
eth_src_mac => c_node_eth_src_mac,
udp_src_port => c_node_udp_src_port,
ip_src_addr => c_node_ip_src_addr,
gn_index => gn_index,
ring_info => c_exp_ring_info,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment