From 142d16c3e1ac25e7c127d0248763646b239fcfa0 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Mon, 3 Oct 2022 14:27:19 +0200 Subject: [PATCH] Verify prgrammable CEP beamlet output src and dst MAC, IP, UDP port. --- .../tb_lofar2_unb2b_sdp_station_bf.vhd | 59 +++++++-- .../tb_lofar2_unb2c_sdp_station_bf.vhd | 122 +++++++---------- .../tb_lofar2_unb2c_sdp_station_bf_ring.vhd | 124 ++++++++---------- 3 files changed, 154 insertions(+), 151 deletions(-) diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd index db72ccae4f..817983875c 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd @@ -127,10 +127,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin -- header fields - CONSTANT c_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_dst_mac; -- 00074306C700 = DOP36-eth0 - CONSTANT c_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_dst_port; -- 5000 - CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_src_mac_47_16 & c_mac_15_0; -- x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_src_addr_31_16 & c_ip_15_0; -- C0A80001 = '192.168.0.1' = DOP36-eth0 CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_src_port_15_8 & c_id; -- D0 & c_id @@ -252,8 +248,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS -- MM SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); + SIGNAL rd_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); SIGNAL rd_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL rd_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL rd_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL rd_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0); -- WG @@ -609,17 +608,53 @@ BEGIN -- ); v_offset := bset * c_mm_span_reg_hdr_dat; - -- . Use defaults, so no need to write + -- Default destination MAC/IP/UDP = 0 -- . Read + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); + proc_common_wait_some_cycles(tb_clk, 1); + -- . verify read + ASSERT UNSIGNED(rd_cep_eth_src_mac) = 0 REPORT "Wrong MM read rd_cep_eth_src_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_src_addr) = 0 REPORT "Wrong MM read rd_cep_ip_src_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_src_port) = 0 REPORT "Wrong MM read rd_cep_udp_src_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_eth_dst_mac) = 0 REPORT "Wrong MM read rd_cep_eth_dst_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_dst_addr) = 0 REPORT "Wrong MM read rd_cep_ip_dst_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_dst_port) = 0 REPORT "Wrong MM read rd_cep_udp_dst_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + + -- Write tb defaults + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 39, TO_UINT(c_cep_eth_src_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 38, TO_SINT(c_cep_eth_src_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 26, TO_SINT(c_cep_ip_src_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 24, TO_UINT(c_cep_udp_src_port), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 41, TO_UINT(c_sdp_cep_eth_dst_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 40, TO_SINT(c_sdp_cep_eth_dst_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 25, TO_SINT(c_sdp_cep_ip_dst_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 23, TO_UINT(c_sdp_cep_udp_dst_port), tb_clk); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period, c_common_cross_clock_domain_latency*2); + + -- . Read back + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); proc_common_wait_some_cycles(tb_clk, 1); - -- verify read - ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 00074306C700 = DOP36-eth0 - ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 5000 + -- . verify read back + ASSERT rd_cep_eth_src_mac = c_cep_eth_src_mac REPORT "Wrong MM read rd_cep_eth_src_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_src_addr = c_cep_ip_src_addr REPORT "Wrong MM read rd_cep_ip_src_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_src_port = c_cep_udp_src_port REPORT "Wrong MM read rd_cep_udp_src_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; ---------------------------------------------------------------------------- -- Enable beamlet UDP offload (dp_xonoff) @@ -1000,7 +1035,7 @@ BEGIN p_exp_sdp_cep_header : PROCESS(exp_dp_bsn) BEGIN -- eth header - exp_sdp_cep_header.eth.dst_mac <= c_cep_eth_dst_mac; + exp_sdp_cep_header.eth.dst_mac <= c_sdp_cep_eth_dst_mac; exp_sdp_cep_header.eth.src_mac <= c_cep_eth_src_mac; exp_sdp_cep_header.eth.eth_type <= x"0800"; @@ -1016,11 +1051,11 @@ BEGIN exp_sdp_cep_header.ip.protocol <= TO_UVEC( 17, c_network_ip_protocol_w); exp_sdp_cep_header.ip.header_checksum <= TO_UVEC( c_exp_ip_header_checksum, c_network_ip_header_checksum_w); exp_sdp_cep_header.ip.src_ip_addr <= c_cep_ip_src_addr; -- c_network_ip_addr_w - exp_sdp_cep_header.ip.dst_ip_addr <= c_cep_ip_dst_addr; -- c_network_ip_addr_w + exp_sdp_cep_header.ip.dst_ip_addr <= c_sdp_cep_ip_dst_addr; -- c_network_ip_addr_w -- udp header exp_sdp_cep_header.udp.src_port <= c_cep_udp_src_port; - exp_sdp_cep_header.udp.dst_port <= c_cep_udp_dst_port; + exp_sdp_cep_header.udp.dst_port <= c_sdp_cep_udp_dst_port; exp_sdp_cep_header.udp.total_length <= c_sdp_cep_udp_total_length; -- 7848, see ICD STAT-CEP exp_sdp_cep_header.udp.checksum <= TO_UVEC( 0, c_network_udp_checksum_w); diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd index da901213a2..ead55fbb6a 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd @@ -200,13 +200,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin -- header fields - CONSTANT c_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_dst_mac; -- 00074306C700 = DOP36-eth0 - CONSTANT c_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_dst_port; -- 5000 - - CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_src_mac_47_16 & c_mac_15_0; -- x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node - CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_src_addr_31_16 & c_ip_15_0; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_src_port_15_8 & c_id; -- D0 & c_id + CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_src_mac_47_16 & func_sdp_gn_index_to_mac_15_0(c_gn_index); + CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_src_addr_31_16 & func_sdp_gn_index_to_ip_15_0(c_gn_index); + CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_src_port_15_8 & c_id; CONSTANT c_exp_ip_header_checksum : NATURAL := 16#5BDE#; -- value obtained from rx_sdp_cep_header.ip.header_checksum in wave window @@ -384,8 +380,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS -- MM SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); + SIGNAL rd_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); SIGNAL rd_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL rd_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL rd_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); + SIGNAL rd_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0); -- WG @@ -714,7 +713,7 @@ BEGIN -- . write v_offset := bset * c_mm_span_reg_bf_scale; mmf_mm_bus_wr(c_mm_file_reg_bf_scale, v_offset + 0, c_exp_beamlet_scale, tb_clk); - proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period, c_common_cross_clock_domain_latency*2); -- . readback mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk); @@ -771,17 +770,54 @@ BEGIN -- ); v_offset := bset * c_mm_span_reg_hdr_dat; - -- . Use defaults, so no need to write + -- Default destination MAC/IP/UDP = 0 -- . Read + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); proc_common_wait_some_cycles(tb_clk, 1); - -- verify read - ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 00074306C700 = DOP36-eth0 - ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 5000 + -- . verify read + ASSERT UNSIGNED(rd_cep_eth_src_mac) = 0 REPORT "Wrong MM read rd_cep_eth_src_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_src_addr) = 0 REPORT "Wrong MM read rd_cep_ip_src_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_src_port) = 0 REPORT "Wrong MM read rd_cep_udp_src_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_eth_dst_mac) = 0 REPORT "Wrong MM read rd_cep_eth_dst_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_dst_addr) = 0 REPORT "Wrong MM read rd_cep_ip_dst_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_dst_port) = 0 REPORT "Wrong MM read rd_cep_udp_dst_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + + -- Write tb defaults + -- . Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on c_gn_index + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 39, TO_UINT(c_cep_eth_src_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 38, TO_SINT(c_cep_eth_src_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 26, TO_SINT(c_cep_ip_src_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 24, TO_UINT(c_cep_udp_src_port), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 41, TO_UINT(c_sdp_cep_eth_dst_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 40, TO_SINT(c_sdp_cep_eth_dst_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 25, TO_SINT(c_sdp_cep_ip_dst_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 23, TO_UINT(c_sdp_cep_udp_dst_port), tb_clk); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period, c_common_cross_clock_domain_latency*2); + + -- . Read back + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); + proc_common_wait_some_cycles(tb_clk, 1); + -- . verify read back + ASSERT rd_cep_eth_src_mac = c_cep_eth_src_mac REPORT "Wrong MM read rd_cep_eth_src_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_src_addr = c_cep_ip_src_addr REPORT "Wrong MM read rd_cep_ip_src_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_src_port = c_cep_udp_src_port REPORT "Wrong MM read rd_cep_udp_src_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; ---------------------------------------------------------------------------- -- Enable BST offload (not verified here, but only for view in Wave window) @@ -1212,71 +1248,15 @@ BEGIN test_sync_cnt <= in_sync_cnt - 1; -- optionally adjust to fit rx_beamlet_sosi -- Prepare exp_sdp_cep_header before rx_beamlet_sosi.eop, so that - -- p_exp_sdp_cep_header can verify it at rx_beamlet_sosi.eop. + -- p_verify_cep_header can verify it at rx_beamlet_sosi.eop. - exp_sdp_cep_header <= func_sdp_compose_cep_header(c_cep_eth_dst_mac, - c_cep_eth_src_mac, - c_cep_ip_src_addr, - c_cep_ip_dst_addr, - c_exp_ip_header_checksum, + exp_sdp_cep_header <= func_sdp_compose_cep_header(c_exp_ip_header_checksum, c_exp_sdp_info, c_gn_index, c_exp_beamlet_scale, c_exp_beamlet_index, exp_dp_bsn); - --p_exp_sdp_cep_header : PROCESS(exp_dp_bsn) - --BEGIN - -- -- eth header - -- exp_sdp_cep_header.eth.dst_mac <= c_cep_eth_dst_mac; - -- exp_sdp_cep_header.eth.src_mac <= c_cep_eth_src_mac; - -- exp_sdp_cep_header.eth.eth_type <= x"0800"; - -- - -- -- ip header - -- exp_sdp_cep_header.ip.version <= TO_UVEC( 4, c_network_ip_version_w); - -- exp_sdp_cep_header.ip.header_length <= TO_UVEC( 5, c_network_ip_header_length_w); - -- exp_sdp_cep_header.ip.services <= TO_UVEC( 0, c_network_ip_services_w); - -- exp_sdp_cep_header.ip.total_length <= c_sdp_cep_ip_total_length; -- 7868, see ICD STAT-CEP - -- exp_sdp_cep_header.ip.identification <= TO_UVEC( 0, c_network_ip_identification_w); - -- exp_sdp_cep_header.ip.flags <= TO_UVEC( 2, c_network_ip_flags_w); - -- exp_sdp_cep_header.ip.fragment_offset <= TO_UVEC( 0, c_network_ip_fragment_offset_w); - -- exp_sdp_cep_header.ip.time_to_live <= TO_UVEC( 127, c_network_ip_time_to_live_w); - -- exp_sdp_cep_header.ip.protocol <= TO_UVEC( 17, c_network_ip_protocol_w); - -- exp_sdp_cep_header.ip.header_checksum <= TO_UVEC( c_exp_ip_header_checksum, c_network_ip_header_checksum_w); - -- exp_sdp_cep_header.ip.src_ip_addr <= c_cep_ip_src_addr; -- c_network_ip_addr_w - -- exp_sdp_cep_header.ip.dst_ip_addr <= c_cep_ip_dst_addr; -- c_network_ip_addr_w - -- - -- -- udp header - -- exp_sdp_cep_header.udp.src_port <= c_cep_udp_src_port; - -- exp_sdp_cep_header.udp.dst_port <= c_cep_udp_dst_port; - -- exp_sdp_cep_header.udp.total_length <= c_sdp_cep_udp_total_length; -- 7848, see ICD STAT-CEP - -- exp_sdp_cep_header.udp.checksum <= TO_UVEC( 0, c_network_udp_checksum_w); - -- - -- -- app header - -- exp_sdp_cep_header.app.sdp_marker <= TO_UVEC(c_sdp_marker_beamlets, 8); -- 98 = x"62" = 'b' - -- exp_sdp_cep_header.app.sdp_version_id <= TO_UVEC(c_sdp_cep_version_id, 8); -- 5 - -- exp_sdp_cep_header.app.sdp_observation_id <= c_exp_sdp_info.observation_id; - -- exp_sdp_cep_header.app.sdp_station_id <= c_exp_sdp_info.station_id; - -- - -- exp_sdp_cep_header.app.sdp_source_info_antenna_band_id <= slv(c_exp_sdp_info.antenna_band_index); - -- exp_sdp_cep_header.app.sdp_source_info_nyquist_zone_id <= c_exp_sdp_info.nyquist_zone_index; - -- exp_sdp_cep_header.app.sdp_source_info_f_adc <= slv(c_exp_sdp_info.f_adc); - -- exp_sdp_cep_header.app.sdp_source_info_fsub_type <= slv(c_exp_sdp_info.fsub_type); - -- exp_sdp_cep_header.app.sdp_source_info_payload_error <= TO_UVEC(0, 1); - -- exp_sdp_cep_header.app.sdp_source_info_repositioning_flag <= slv(c_exp_sdp_info.beam_repositioning_flag); - -- exp_sdp_cep_header.app.sdp_source_info_beamlet_width <= TO_UVEC(c_sdp_W_beamlet, 4); - -- exp_sdp_cep_header.app.sdp_source_info_gn_id <= TO_UVEC(c_gn_index, 5); - -- - -- exp_sdp_cep_header.app.sdp_reserved <= TO_UVEC( 0, 40); - -- exp_sdp_cep_header.app.sdp_beamlet_scale <= TO_UVEC( c_exp_beamlet_scale, 16); - -- exp_sdp_cep_header.app.sdp_beamlet_index <= TO_UVEC( 0, 16); -- depends on bset - -- exp_sdp_cep_header.app.sdp_nof_blocks_per_packet <= TO_UVEC( c_sdp_cep_nof_blocks_per_packet, 8); - -- exp_sdp_cep_header.app.sdp_nof_beamlets_per_block <= TO_UVEC(c_sdp_cep_nof_beamlets_per_block, 16); - -- exp_sdp_cep_header.app.sdp_block_period <= c_exp_sdp_info.block_period; - -- - -- exp_sdp_cep_header.app.dp_bsn <= TO_UVEC(exp_dp_bsn, 64); -- depends on bset and time - --END PROCESS; - rx_sdp_cep_header <= func_sdp_map_cep_header(rx_hdr_fields_raw); p_verify_cep_header : PROCESS diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd index 859fae39cb..84baf1ad8b 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd @@ -176,9 +176,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; CONSTANT c_fw_version : t_unb2c_board_fw_version := (1, 0); - CONSTANT c_mac_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr + c_last_unb_nr, 8) & TO_UVEC(c_last_rn_nr MOD c_quad, 8); - CONSTANT c_ip_15_0 : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr + c_last_unb_nr, 8) & TO_UVEC((c_last_rn_nr MOD c_quad) +1, 8); -- +1 to avoid IP = *.*.*.0 - CONSTANT c_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard CONSTANT c_ext_clk_period : TIME := 5 ns; CONSTANT c_mm_clk_period : TIME := 10 ns; -- 100 MHz internal mm_clk @@ -202,17 +199,14 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin -- header fields - CONSTANT c_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_dst_mac; -- 00074306C700 = DOP36-eth0 - CONSTANT c_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - CONSTANT c_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_dst_port; -- 5000 - - CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_src_mac_47_16 & c_mac_15_0; -- x"00228608"; -- 47:16, 15:8 = backplane, 7:0 = node - CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_src_addr_31_16 & c_ip_15_0; -- C0A80001 = '192.168.0.1' = DOP36-eth0 + CONSTANT c_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_sdp_cep_eth_src_mac_47_16 & func_sdp_gn_index_to_mac_15_0(c_gn_index); + CONSTANT c_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_src_addr_31_16 & func_sdp_gn_index_to_ip_15_0(c_gn_index); CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_src_port_15_8 & c_id; -- D0 & c_id CONSTANT c_exp_ip_header_checksum : NATURAL := 16#5BDD#; -- value obtained from rx_sdp_cep_header.ip.header_checksum in wave window for c_nof_rn = 2. CONSTANT c_exp_beamlet_scale : NATURAL := NATURAL(g_beamlet_scale * REAL(c_sdp_unit_beamlet_scale)); -- c_sdp_unit_beamlet_scale = 2**15; + CONSTANT c_exp_beamlet_index : NATURAL := 0; -- depends on beamset bset * c_sdp_S_sub_bf CONSTANT c_exp_sdp_info : t_sdp_info := ( TO_UVEC(601, 16), -- station_id @@ -385,6 +379,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS -- MM SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); + SIGNAL rd_cep_eth_src_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL rd_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); + SIGNAL rd_cep_ip_src_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL rd_cep_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0); SIGNAL rd_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0); @@ -810,18 +807,54 @@ BEGIN -- ); v_offset := bset * c_mm_span_reg_hdr_dat; - -- . Use defaults, so no need to write + -- Default destination MAC/IP/UDP = 0 -- . Read + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); proc_common_wait_some_cycles(tb_clk, 1); - - -- verify read - ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 00074306C700 = DOP36-eth0 - ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- C0A80001 = '192.168.0.1' = DOP36-eth0 - ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; -- 5000 + -- . verify read + ASSERT UNSIGNED(rd_cep_eth_src_mac) = 0 REPORT "Wrong MM read rd_cep_eth_src_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_src_addr) = 0 REPORT "Wrong MM read rd_cep_ip_src_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_src_port) = 0 REPORT "Wrong MM read rd_cep_udp_src_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_eth_dst_mac) = 0 REPORT "Wrong MM read rd_cep_eth_dst_mac != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_ip_dst_addr) = 0 REPORT "Wrong MM read rd_cep_ip_dst_addr != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT UNSIGNED(rd_cep_udp_dst_port) = 0 REPORT "Wrong MM read rd_cep_udp_dst_port != 0 for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + + -- Write tb defaults + -- . Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and based on c_gn_index + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 39, TO_UINT(c_cep_eth_src_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 38, TO_SINT(c_cep_eth_src_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 26, TO_SINT(c_cep_ip_src_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 24, TO_UINT(c_cep_udp_src_port), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 41, TO_UINT(c_sdp_cep_eth_dst_mac(47 DOWNTO 32)), tb_clk); + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 40, TO_SINT(c_sdp_cep_eth_dst_mac(31 DOWNTO 0)), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 25, TO_SINT(c_sdp_cep_ip_dst_addr), tb_clk); -- use signed to fit 32 b in INTEGER + mmf_mm_bus_wr(c_mm_file_reg_hdr_dat, v_offset + 23, TO_UINT(c_sdp_cep_udp_dst_port), tb_clk); + proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period, c_common_cross_clock_domain_latency*2); + + -- . Read back + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 39, rd_data, tb_clk); rd_cep_eth_src_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 38, rd_data, tb_clk); rd_cep_eth_src_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 26, rd_data, tb_clk); rd_cep_ip_src_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 24, rd_data, tb_clk); rd_cep_udp_src_port <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0); + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO 0) <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data; + mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0); + proc_common_wait_some_cycles(tb_clk, 1); + -- . verify read back + ASSERT rd_cep_eth_src_mac = c_cep_eth_src_mac REPORT "Wrong MM read rd_cep_eth_src_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_src_addr = c_cep_ip_src_addr REPORT "Wrong MM read rd_cep_ip_src_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_src_port = c_cep_udp_src_port REPORT "Wrong MM read rd_cep_udp_src_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_eth_dst_mac = c_sdp_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_ip_dst_addr = c_sdp_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; + ASSERT rd_cep_udp_dst_port = c_sdp_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR; ---------------------------------------------------------------------------- -- Enable BST offload on end node (not verified here, but only for view in Wave window) @@ -1291,59 +1324,14 @@ BEGIN test_sync_cnt <= in_sync_cnt - 1; -- optionally adjust to fit rx_beamlet_sosi -- Prepare exp_sdp_cep_header before rx_beamlet_sosi.eop, so that - -- p_exp_sdp_cep_header can verify it at rx_beamlet_sosi.eop. - - p_exp_sdp_cep_header : PROCESS(exp_dp_bsn) - BEGIN - -- eth header - exp_sdp_cep_header.eth.dst_mac <= c_cep_eth_dst_mac; - exp_sdp_cep_header.eth.src_mac <= c_cep_eth_src_mac; - exp_sdp_cep_header.eth.eth_type <= x"0800"; - - -- ip header - exp_sdp_cep_header.ip.version <= TO_UVEC( 4, c_network_ip_version_w); - exp_sdp_cep_header.ip.header_length <= TO_UVEC( 5, c_network_ip_header_length_w); - exp_sdp_cep_header.ip.services <= TO_UVEC( 0, c_network_ip_services_w); - exp_sdp_cep_header.ip.total_length <= c_sdp_cep_ip_total_length; -- 7868, see ICD STAT-CEP - exp_sdp_cep_header.ip.identification <= TO_UVEC( 0, c_network_ip_identification_w); - exp_sdp_cep_header.ip.flags <= TO_UVEC( 2, c_network_ip_flags_w); - exp_sdp_cep_header.ip.fragment_offset <= TO_UVEC( 0, c_network_ip_fragment_offset_w); - exp_sdp_cep_header.ip.time_to_live <= TO_UVEC( 127, c_network_ip_time_to_live_w); - exp_sdp_cep_header.ip.protocol <= TO_UVEC( 17, c_network_ip_protocol_w); - exp_sdp_cep_header.ip.header_checksum <= TO_UVEC( c_exp_ip_header_checksum, c_network_ip_header_checksum_w); - exp_sdp_cep_header.ip.src_ip_addr <= c_cep_ip_src_addr; -- c_network_ip_addr_w - exp_sdp_cep_header.ip.dst_ip_addr <= c_cep_ip_dst_addr; -- c_network_ip_addr_w - - -- udp header - exp_sdp_cep_header.udp.src_port <= c_cep_udp_src_port; - exp_sdp_cep_header.udp.dst_port <= c_cep_udp_dst_port; - exp_sdp_cep_header.udp.total_length <= c_sdp_cep_udp_total_length; -- 7848, see ICD STAT-CEP - exp_sdp_cep_header.udp.checksum <= TO_UVEC( 0, c_network_udp_checksum_w); - - -- app header - exp_sdp_cep_header.app.sdp_marker <= TO_UVEC(c_sdp_marker_beamlets, 8); -- 98 = x"62" = 'b' - exp_sdp_cep_header.app.sdp_version_id <= TO_UVEC(c_sdp_cep_version_id, 8); -- 5 - exp_sdp_cep_header.app.sdp_observation_id <= c_exp_sdp_info.observation_id; - exp_sdp_cep_header.app.sdp_station_id <= c_exp_sdp_info.station_id; - - exp_sdp_cep_header.app.sdp_source_info_antenna_band_id <= slv(c_exp_sdp_info.antenna_band_index); - exp_sdp_cep_header.app.sdp_source_info_nyquist_zone_id <= c_exp_sdp_info.nyquist_zone_index; - exp_sdp_cep_header.app.sdp_source_info_f_adc <= slv(c_exp_sdp_info.f_adc); - exp_sdp_cep_header.app.sdp_source_info_fsub_type <= slv(c_exp_sdp_info.fsub_type); - exp_sdp_cep_header.app.sdp_source_info_payload_error <= TO_UVEC(0, 1); - exp_sdp_cep_header.app.sdp_source_info_repositioning_flag <= slv(c_exp_sdp_info.beam_repositioning_flag); - exp_sdp_cep_header.app.sdp_source_info_beamlet_width <= TO_UVEC(c_sdp_W_beamlet, 4); - exp_sdp_cep_header.app.sdp_source_info_gn_id <= TO_UVEC(c_gn_index, 5); - - exp_sdp_cep_header.app.sdp_reserved <= TO_UVEC( 0, 40); - exp_sdp_cep_header.app.sdp_beamlet_scale <= TO_UVEC( c_exp_beamlet_scale, 16); - exp_sdp_cep_header.app.sdp_beamlet_index <= TO_UVEC( 0, 16); -- depends on bset - exp_sdp_cep_header.app.sdp_nof_blocks_per_packet <= TO_UVEC( c_sdp_cep_nof_blocks_per_packet, 8); - exp_sdp_cep_header.app.sdp_nof_beamlets_per_block <= TO_UVEC(c_sdp_cep_nof_beamlets_per_block, 16); - exp_sdp_cep_header.app.sdp_block_period <= c_exp_sdp_info.block_period; - - exp_sdp_cep_header.app.dp_bsn <= TO_UVEC(exp_dp_bsn, 64); -- depends on bset and time - END PROCESS; + -- p_verify_cep_header can verify it at rx_beamlet_sosi.eop. + + exp_sdp_cep_header <= func_sdp_compose_cep_header(c_exp_ip_header_checksum, + c_exp_sdp_info, + c_gn_index, + c_exp_beamlet_scale, + c_exp_beamlet_index, + exp_dp_bsn); rx_sdp_cep_header <= func_sdp_map_cep_header(rx_hdr_fields_raw); -- GitLab