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

Verify prgrammable CEP beamlet output src and dst MAC, IP, UDP port.

parent 200b898d
No related branches found
No related tags found
1 merge request!283Resolve L2SDP-696
Pipeline #36808 passed
...@@ -127,10 +127,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS ...@@ -127,10 +127,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin
-- header fields -- 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_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_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_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 ...@@ -252,8 +248,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
-- MM -- MM
SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst;
SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); 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_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_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); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0);
-- WG -- WG
...@@ -609,17 +608,53 @@ BEGIN ...@@ -609,17 +608,53 @@ BEGIN
-- ); -- );
v_offset := bset * c_mm_span_reg_hdr_dat; v_offset := bset * c_mm_span_reg_hdr_dat;
-- . Use defaults, so no need to write -- Default destination MAC/IP/UDP = 0
-- . Read -- . 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 + 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 + 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 + 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); 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); proc_common_wait_some_cycles(tb_clk, 1);
-- verify read -- . verify read back
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_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_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_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_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 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) -- Enable beamlet UDP offload (dp_xonoff)
...@@ -1000,7 +1035,7 @@ BEGIN ...@@ -1000,7 +1035,7 @@ BEGIN
p_exp_sdp_cep_header : PROCESS(exp_dp_bsn) p_exp_sdp_cep_header : PROCESS(exp_dp_bsn)
BEGIN BEGIN
-- eth header -- 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.src_mac <= c_cep_eth_src_mac;
exp_sdp_cep_header.eth.eth_type <= x"0800"; exp_sdp_cep_header.eth.eth_type <= x"0800";
...@@ -1016,11 +1051,11 @@ BEGIN ...@@ -1016,11 +1051,11 @@ BEGIN
exp_sdp_cep_header.ip.protocol <= TO_UVEC( 17, c_network_ip_protocol_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.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.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 -- udp header
exp_sdp_cep_header.udp.src_port <= c_cep_udp_src_port; 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.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); exp_sdp_cep_header.udp.checksum <= TO_UVEC( 0, c_network_udp_checksum_w);
......
...@@ -200,13 +200,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS ...@@ -200,13 +200,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS
CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin
-- header fields -- 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_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_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 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_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_dst_port; -- 5000 CONSTANT c_cep_udp_src_port : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_sdp_cep_udp_src_port_15_8 & c_id;
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_exp_ip_header_checksum : NATURAL := 16#5BDE#; -- value obtained from rx_sdp_cep_header.ip.header_checksum in wave window 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 ...@@ -384,8 +380,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS
-- MM -- MM
SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst;
SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); 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_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_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); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0);
-- WG -- WG
...@@ -714,7 +713,7 @@ BEGIN ...@@ -714,7 +713,7 @@ BEGIN
-- . write -- . write
v_offset := bset * c_mm_span_reg_bf_scale; 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); 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 -- . readback
mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk); mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk);
...@@ -771,17 +770,54 @@ BEGIN ...@@ -771,17 +770,54 @@ BEGIN
-- ); -- );
v_offset := bset * c_mm_span_reg_hdr_dat; v_offset := bset * c_mm_span_reg_hdr_dat;
-- . Use defaults, so no need to write -- Default destination MAC/IP/UDP = 0
-- . Read -- . 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 + 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 + 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 + 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); 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); proc_common_wait_some_cycles(tb_clk, 1);
-- verify read -- . 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 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 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 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 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 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) -- Enable BST offload (not verified here, but only for view in Wave window)
...@@ -1212,71 +1248,15 @@ BEGIN ...@@ -1212,71 +1248,15 @@ BEGIN
test_sync_cnt <= in_sync_cnt - 1; -- optionally adjust to fit rx_beamlet_sosi 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 -- 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, exp_sdp_cep_header <= func_sdp_compose_cep_header(c_exp_ip_header_checksum,
c_cep_eth_src_mac,
c_cep_ip_src_addr,
c_cep_ip_dst_addr,
c_exp_ip_header_checksum,
c_exp_sdp_info, c_exp_sdp_info,
c_gn_index, c_gn_index,
c_exp_beamlet_scale, c_exp_beamlet_scale,
c_exp_beamlet_index, c_exp_beamlet_index,
exp_dp_bsn); 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); rx_sdp_cep_header <= func_sdp_map_cep_header(rx_hdr_fields_raw);
p_verify_cep_header : PROCESS p_verify_cep_header : PROCESS
......
...@@ -176,9 +176,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS ...@@ -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_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
CONSTANT c_fw_version : t_unb2c_board_fw_version := (1, 0); 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_eth_clk_period : TIME := 8 ns; -- 125 MHz XO on UniBoard
CONSTANT c_ext_clk_period : TIME := 5 ns; CONSTANT c_ext_clk_period : TIME := 5 ns;
CONSTANT c_mm_clk_period : TIME := 10 ns; -- 100 MHz internal mm_clk 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 ...@@ -202,17 +199,14 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS
CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin CONSTANT c_beamlet_output_delta : INTEGER := 2; -- +-delta margin
-- header fields -- 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_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_dst_addr : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_sdp_cep_ip_dst_addr; -- C0A80001 = '192.168.0.1' = DOP36-eth0 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_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_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_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_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 := ( CONSTANT c_exp_sdp_info : t_sdp_info := (
TO_UVEC(601, 16), -- station_id TO_UVEC(601, 16), -- station_id
...@@ -385,6 +379,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS ...@@ -385,6 +379,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS
-- MM -- MM
SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst; SIGNAL rd_sdp_info : t_sdp_info := c_sdp_info_rst;
SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); 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_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0);
SIGNAL rd_cep_ip_dst_addr : STD_LOGIC_VECTOR(31 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); SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0);
...@@ -810,18 +807,54 @@ BEGIN ...@@ -810,18 +807,54 @@ BEGIN
-- ); -- );
v_offset := bset * c_mm_span_reg_hdr_dat; v_offset := bset * c_mm_span_reg_hdr_dat;
-- . Use defaults, so no need to write -- Default destination MAC/IP/UDP = 0
-- . Read -- . 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 + 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 + 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 + 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); 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); proc_common_wait_some_cycles(tb_clk, 1);
-- . verify read
-- 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 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 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 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 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 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 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) -- Enable BST offload on end node (not verified here, but only for view in Wave window)
...@@ -1291,59 +1324,14 @@ BEGIN ...@@ -1291,59 +1324,14 @@ BEGIN
test_sync_cnt <= in_sync_cnt - 1; -- optionally adjust to fit rx_beamlet_sosi 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 -- 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.
p_exp_sdp_cep_header : PROCESS(exp_dp_bsn) exp_sdp_cep_header <= func_sdp_compose_cep_header(c_exp_ip_header_checksum,
BEGIN c_exp_sdp_info,
-- eth header c_gn_index,
exp_sdp_cep_header.eth.dst_mac <= c_cep_eth_dst_mac; c_exp_beamlet_scale,
exp_sdp_cep_header.eth.src_mac <= c_cep_eth_src_mac; c_exp_beamlet_index,
exp_sdp_cep_header.eth.eth_type <= x"0800"; exp_dp_bsn);
-- 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); rx_sdp_cep_header <= func_sdp_map_cep_header(rx_hdr_fields_raw);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment