Skip to content
Snippets Groups Projects
Commit 6466aa89 authored by Pieter Donker's avatar Pieter Donker
Browse files

L2SDP-200, some changes.

parent c72935be
No related branches found
No related tags found
2 merge requests!100Removed text for XSub that is now written in Confluence Subband correlator...,!67Resolve L2SDP-200
...@@ -55,8 +55,8 @@ ENTITY tb_sdp_statistics_offload IS ...@@ -55,8 +55,8 @@ ENTITY tb_sdp_statistics_offload IS
END tb_sdp_statistics_offload; END tb_sdp_statistics_offload;
ARCHITECTURE tb OF tb_sdp_statistics_offload IS ARCHITECTURE tb OF tb_sdp_statistics_offload IS
CONSTANT c_dp_clk_period : TIME := 5 ns; -- 200 MHz CONSTANT c_dp_clk_period : TIME := 5 ns; -- 200 MHz
CONSTANT c_mm_clk_period : TIME := 20 ns; -- 50 MHz CONSTANT c_mm_clk_period : TIME := 20 ns; -- 50 MHz
CONSTANT c_cross_clock_domain_latency : NATURAL := 20; CONSTANT c_cross_clock_domain_latency : NATURAL := 20;
...@@ -64,29 +64,30 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS ...@@ -64,29 +64,30 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
CONSTANT c_ip_src_addr : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0) := x"0A090807"; 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) := x"D001"; CONSTANT c_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0) := x"D001";
-- used mm_adresses on mm bus "enable_mosi/miso" -- Used mm_adresses on mm bus "enable_mosi/miso".
CONSTANT c_reg_enable_mm_addr_enable : NATURAL := 0; CONSTANT c_reg_enable_mm_addr_enable : NATURAL := 0;
-- used mm_adresses on mm bus "hdr_dat_mosi/miso"
-- Used mm_adresses on mm bus "hdr_dat_mosi/miso".
CONSTANT c_hdr_dat_mm_addr_eth_src_mac : NATURAL := 1; CONSTANT c_hdr_dat_mm_addr_eth_src_mac : NATURAL := 1;
CONSTANT c_hdr_dat_mm_addr_ip_src_addr : NATURAL := 13; CONSTANT c_hdr_dat_mm_addr_ip_src_addr : NATURAL := 13;
CONSTANT c_hdr_dat_mm_addr_udp_src_port : NATURAL := 15; CONSTANT c_hdr_dat_mm_addr_udp_src_port : NATURAL := 15;
-- Define SST RAM structure -- Define SST RAM structure.
CONSTANT c_nof_data : NATURAL := 512; CONSTANT c_nof_data : NATURAL := 512;
CONSTANT c_data_size : NATURAL := 2; CONSTANT c_data_size : NATURAL := 2;
CONSTANT c_step_size : NATURAL := 4; CONSTANT c_step_size : NATURAL := 4;
-- Define SST RAM size for g_nof_signal_inputs_per_pn -- Define SST RAM size for g_nof_signal_inputs_per_pn.
CONSTANT c_ram_size : NATURAL := c_nof_data * c_data_size * g_nof_signal_inputs_per_pn; CONSTANT c_ram_size : NATURAL := c_nof_data * c_data_size * g_nof_signal_inputs_per_pn;
CONSTANT c_ram_w : NATURAL := ceil_log2(c_ram_size); CONSTANT c_ram_w : NATURAL := ceil_log2(c_ram_size);
--CONSTANT c_ram_buf : t_c_mem := (c_mem_ram_rd_latency, c_ram_w, 32, 2**c_ram_w, 'X'); --CONSTANT c_ram_buf : t_c_mem := (c_mem_ram_rd_latency, c_ram_w, 32, 2**c_ram_w, 'X');
CONSTANT c_ram_buf : t_c_mem := (1, c_ram_w, 32, 2**c_ram_w, 'X'); CONSTANT c_ram_buf : t_c_mem := (1, c_ram_w, 32, 2**c_ram_w, 'X');
-- Define block timing -- Define block timing.
CONSTANT c_nof_block_per_sync : NATURAL := 20; -- sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval CONSTANT c_nof_block_per_sync : NATURAL := 20; -- Sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval.
CONSTANT c_nof_clk_per_block : NATURAL := c_nof_data * c_data_size; CONSTANT c_nof_clk_per_block : NATURAL := c_nof_data * c_data_size;
-- based on g_statistics_type: 'S'=0x53="SST", 'B'=0x42="BST", 'X'=0x58="XST" -- Based on g_statistics_type: 'S'=0x53="SST", 'B'=0x42="BST", 'X'=0x58="XST".
CONSTANT c_marker : NATURAL := sel_a_b(g_statistics_type="BST", c_sdp_marker_bst, CONSTANT c_marker : NATURAL := sel_a_b(g_statistics_type="BST", c_sdp_marker_bst,
sel_a_b(g_statistics_type="XST", c_sdp_marker_xst, sel_a_b(g_statistics_type="XST", c_sdp_marker_xst,
c_sdp_marker_sst)); -- SST c_sdp_marker_sst)); -- SST
...@@ -100,20 +101,19 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS ...@@ -100,20 +101,19 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
c_sdp_N_sub)); -- SST c_sdp_N_sub)); -- SST
CONSTANT c_nof_valid_per_block : NATURAL := c_nof_data * c_data_size; CONSTANT c_nof_valid_per_block : NATURAL := c_nof_data * c_data_size;
CONSTANT c_nof_sync : NATURAL := 5;
CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync * c_nof_clk_per_block;
CONSTANT c_nof_sync : NATURAL := 5; SIGNAL tb_end : STD_LOGIC := '0';
CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync * c_nof_clk_per_block;
SIGNAL tb_end : STD_LOGIC := '0';
SIGNAL dp_clk : STD_LOGIC := '1'; -- digital data path clock = 200 MHz (deser factor 4); SIGNAL dp_clk : STD_LOGIC := '1'; -- Digital data path clock = 200 MHz (deser factor 4);
SIGNAL dp_rst : STD_LOGIC; SIGNAL dp_rst : STD_LOGIC;
SIGNAL mm_clk : STD_LOGIC := '1'; -- MM control clock = 50 MHz SIGNAL mm_clk : STD_LOGIC := '1'; -- MM control clock = 50 MHz
SIGNAL mm_rst : STD_LOGIC; SIGNAL mm_rst : STD_LOGIC;
SIGNAL master_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL master_mosi : t_mem_mosi := c_mem_mosi_rst;
SIGNAL master_miso : t_mem_miso; SIGNAL master_miso : t_mem_miso;
SIGNAL enable_mosi : t_mem_mosi := c_mem_mosi_rst; SIGNAL enable_mosi : t_mem_mosi := c_mem_mosi_rst;
SIGNAL enable_miso : t_mem_miso; SIGNAL enable_miso : t_mem_miso;
...@@ -134,7 +134,7 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS ...@@ -134,7 +134,7 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
SIGNAL rx_hdr_fields_out : STD_LOGIC_VECTOR(1023 DOWNTO 0); SIGNAL rx_hdr_fields_out : STD_LOGIC_VECTOR(1023 DOWNTO 0);
SIGNAL rx_hdr_fields_raw : STD_LOGIC_VECTOR(1023 DOWNTO 0) := (OTHERS => '0'); SIGNAL rx_hdr_fields_raw : STD_LOGIC_VECTOR(1023 DOWNTO 0) := (OTHERS => '0');
-- signals used to change settings of sdp_info -- Signals used to change settings of sdp_info.
SIGNAL gn_index : NATURAL := 1; -- select > 0 to see effect of g_offload_time SIGNAL gn_index : NATURAL := 1; -- select > 0 to see effect of g_offload_time
SIGNAL sdp_info : t_sdp_info := ( SIGNAL sdp_info : t_sdp_info := (
...@@ -154,16 +154,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS ...@@ -154,16 +154,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
x"0000" -- beamlet_scale x"0000" -- beamlet_scale
); );
-- signals used for starting processes -- Signals used for starting processes.
SIGNAL ram_wr_data : STD_LOGIC_VECTOR(c_ram_buf.dat_w-1 DOWNTO 0); SIGNAL ram_wr_data : STD_LOGIC_VECTOR(c_ram_buf.dat_w-1 DOWNTO 0);
SIGNAL ram_wr_addr : STD_LOGIC_VECTOR(c_ram_buf.adr_w-1 DOWNTO 0); SIGNAL ram_wr_addr : STD_LOGIC_VECTOR(c_ram_buf.adr_w-1 DOWNTO 0);
SIGNAL ram_wr_en : STD_LOGIC; SIGNAL ram_wr_en : STD_LOGIC;
SIGNAL init_ram_done : STD_LOGIC := '0'; SIGNAL init_ram_done : STD_LOGIC := '0';
SIGNAL rx_request : STD_LOGIC := '0'; SIGNAL in_sync_hold : STD_LOGIC := '0';
SIGNAL rx_prev_bsn : NATURAL := 0; SIGNAL rx_prev_bsn : NATURAL := 0;
SIGNAL rx_bsn : NATURAL := 0; SIGNAL rx_bsn : NATURAL := 0;
SIGNAL rx_data_id : NATURAL := 0;
SIGNAL rx_block_cnt : NATURAL := 0; SIGNAL rx_block_cnt : NATURAL := 0;
SIGNAL rx_valid_clk_cnt : NATURAL := 0; SIGNAL rx_valid_clk_cnt : NATURAL := 0;
...@@ -174,11 +173,11 @@ BEGIN ...@@ -174,11 +173,11 @@ BEGIN
mm_rst <= '1', '0' AFTER c_mm_clk_period*7; mm_rst <= '1', '0' AFTER c_mm_clk_period*7;
mm_clk <= (NOT mm_clk) OR tb_end AFTER c_mm_clk_period/2; mm_clk <= (NOT mm_clk) OR tb_end AFTER c_mm_clk_period/2;
-- fill ram with data, data is same as address number. -- Fill ram with data, data is same as address number.
p_mm_statistics_ram : PROCESS p_mm_statistics_ram : PROCESS
BEGIN BEGIN
ram_wr_en <= '0'; ram_wr_en <= '0';
-- initialyze -- Initialyze
proc_common_wait_until_low(mm_clk, mm_rst); proc_common_wait_until_low(mm_clk, mm_rst);
proc_common_wait_some_cycles(mm_clk, 10); proc_common_wait_some_cycles(mm_clk, 10);
...@@ -198,7 +197,7 @@ BEGIN ...@@ -198,7 +197,7 @@ BEGIN
p_enable_trigger : PROCESS p_enable_trigger : PROCESS
BEGIN BEGIN
proc_common_wait_until_high(mm_clk, init_ram_done); proc_common_wait_until_high(mm_clk, init_ram_done);
-- enable common variabel delay -- Enable common variabel delay.
proc_mem_mm_bus_wr(c_reg_enable_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi); proc_mem_mm_bus_wr(c_reg_enable_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi);
proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency); proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency);
WAIT; WAIT;
...@@ -238,105 +237,110 @@ BEGIN ...@@ -238,105 +237,110 @@ BEGIN
WAIT; WAIT;
END PROCESS; END PROCESS;
p_verify_header : PROCESS p_verify_header : PROCESS(test_offload_sosi)
BEGIN BEGIN
proc_common_wait_until_high(mm_clk, init_ram_done); IF test_offload_sosi.eop = '1' THEN
proc_common_wait_until_high(mm_clk, test_offload_sosi.sop); -- bsn is not fully received (bit 0-15 is missing) because 32 bit allignment not working in dp_offload_rx.vhd.
-- bsn is not fully received (bit 0-15 is missing) because 32 bit allignment not working in dp_offload_rx.vhd. -- Check fixed settings.
-- check fixed settings ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"00074306C700"
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"00074306C700" REPORT "wrong eth_dst_mac" SEVERITY ERROR;
REPORT "wrong eth_dst_mac" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_type")) = x"0800"
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_type")) = x"0800" REPORT "wrong eth_type" SEVERITY ERROR;
REPORT "wrong eth_type" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_version") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_version")) = TO_UVEC(4, 4)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_version") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_version")) = TO_UVEC(4, 4) REPORT "wrong ip_version" SEVERITY ERROR;
REPORT "wrong ip_version" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_header_length")) = TO_UVEC(5, 4)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_header_length")) = TO_UVEC(5, 4) REPORT "wrong ip_header_length" SEVERITY ERROR;
REPORT "wrong ip_header_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8) REPORT "wrong ip_services" SEVERITY ERROR;
REPORT "wrong ip_services" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(7868, 16)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(7868, 16) REPORT "wrong ip_total_length" SEVERITY ERROR;
REPORT "wrong ip_total_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16) REPORT "wrong ip_identification" SEVERITY ERROR;
REPORT "wrong ip_identification" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_flags") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_flags")) = TO_UVEC(2, 3)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_flags") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_flags")) = TO_UVEC(2, 3) REPORT "wrong ip_flags" SEVERITY ERROR;
REPORT "wrong ip_flags" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_fragment_offset") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_fragment_offset")) = TO_UVEC(0, 13)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_fragment_offset") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_fragment_offset")) = TO_UVEC(0, 13) REPORT "wrong ip_fragment_offset" SEVERITY ERROR;
REPORT "wrong ip_fragment_offset" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_time_to_live") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_time_to_live")) = TO_UVEC(127, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_time_to_live") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_time_to_live")) = TO_UVEC(127, 8) REPORT "wrong ip_time_to_live" SEVERITY ERROR;
REPORT "wrong ip_time_to_live" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")) = TO_UVEC(17, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")) = TO_UVEC(17, 8) REPORT "wrong ip_protocol" SEVERITY ERROR;
REPORT "wrong ip_protocol" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"C0A80001"
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"C0A80001" REPORT "wrong ip_dst_addr" SEVERITY ERROR;
REPORT "wrong ip_dst_addr" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(0, 16)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(0, 16) REPORT "wrong udp_dst_port" SEVERITY ERROR;
REPORT "wrong udp_dst_port" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(7848, 16)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(7848, 16) REPORT "wrong udp_total_length" SEVERITY ERROR;
REPORT "wrong udp_total_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8) REPORT "wrong sdp_version_id" SEVERITY ERROR;
REPORT "wrong sdp_version_id" SEVERITY ERROR;
-- Check settings set by mm interface in this test bench.
-- check settings set by mm interface in this test bench ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac")) = c_eth_src_mac
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac")) = c_eth_src_mac REPORT "wrong eth_src_mac" SEVERITY ERROR;
REPORT "wrong eth_src_mac" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr")) = c_ip_src_addr
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr")) = c_ip_src_addr REPORT "wrong ip_src_addr" SEVERITY ERROR;
REPORT "wrong ip_src_addr" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port")) = c_udp_src_port
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port")) = c_udp_src_port REPORT "wrong udp_src_port" SEVERITY ERROR;
REPORT "wrong udp_src_port" SEVERITY ERROR;
-- Check g_statistics_type settings set by sdp_statistics_offload.vhd.
-- check g_statistics_type settings set by sdp_statistics_offload.vhd ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker")) = TO_UVEC(c_marker, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker")) = TO_UVEC(c_marker, 8) REPORT "wrong sdp_marker" SEVERITY ERROR;
REPORT "wrong sdp_marker" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs")) = TO_UVEC(c_nof_signal_inputs, 8)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs")) = TO_UVEC(c_nof_signal_inputs, 8) REPORT "wrong sdp_nof_signal_inputs" SEVERITY ERROR;
REPORT "wrong sdp_nof_signal_inputs" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet")) = TO_UVEC(c_nof_statistics_per_packet, 16)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet")) = TO_UVEC(c_nof_statistics_per_packet, 16) REPORT "wrong sdp_nof_statistics_per_packet: " SEVERITY ERROR;
REPORT "wrong sdp_nof_statistics_per_packet: " SEVERITY ERROR;
-- Check some values from sdp_source_info.
-- check some values from sdp_source_info ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id")) = sdp_info.observation_id
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id")) = sdp_info.observation_id REPORT "wrong sdp_observation_id" SEVERITY ERROR;
REPORT "wrong sdp_observation_id" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_id")) = sdp_info.station_id
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_id")) = sdp_info.station_id REPORT "wrong sdp_station_id" SEVERITY ERROR;
REPORT "wrong sdp_station_id" SEVERITY ERROR; ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id"))) = sdp_info.antenna_band_index
ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id"))) = sdp_info.antenna_band_index REPORT "wrong sdp_source_info_antenna_band_id" SEVERITY ERROR;
REPORT "wrong sdp_source_info_antenna_band_id" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id")) = sdp_info.nyquist_zone_index
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id")) = sdp_info.nyquist_zone_index REPORT "wrong sdp_source_info_nyquist_zone_id" SEVERITY ERROR;
REPORT "wrong sdp_source_info_nyquist_zone_id" SEVERITY ERROR; ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc"))) = sdp_info.f_adc
ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc"))) = sdp_info.f_adc REPORT "wrong sdp_source_info_f_adc" SEVERITY ERROR;
REPORT "wrong sdp_source_info_f_adc" SEVERITY ERROR; ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type"))) = sdp_info.fsub_type
ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type"))) = sdp_info.fsub_type REPORT "wrong sdp_source_info_fsub_type" SEVERITY ERROR;
REPORT "wrong sdp_source_info_fsub_type" SEVERITY ERROR; ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag"))) = sdp_info.beam_repositioning_flag
ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag"))) = sdp_info.beam_repositioning_flag REPORT "wrong sdp_source_info_beam_repositioning_flag" SEVERITY ERROR;
REPORT "wrong sdp_source_info_beam_repositioning_flag" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id")) = TO_UVEC(gn_index, 5)
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id")) = TO_UVEC(gn_index, 5) REPORT "wrong sdp_source_info_gn_id" SEVERITY ERROR;
REPORT "wrong sdp_source_info_gn_id" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")) = sdp_info.block_period
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")) = sdp_info.block_period REPORT "wrong sdp_block_period" SEVERITY ERROR;
REPORT "wrong sdp_block_period" SEVERITY ERROR;
WAIT; -- Check variable header info.
ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")) = TO_UVEC(rx_block_cnt + c_sdp_S_pn * gn_index, 32)
REPORT "wrong block count number, received data_id not same as counted blocks" SEVERITY ERROR;
END IF;
END PROCESS; END PROCESS;
-- Count number of blocks in a sync interval, rx_request is used to start counting from 0. -- Count number of blocks in a sync interval.
-- There is no active test_offload_sosi.sync to restart the count. Therefore capture the in_sosi.sync in in_sync_hold, and
-- use in_sync_hold with test_offload_sosi.sop to start counting blocks (packets) from 0, at the start of every sync interval.
p_rx_block_cnt : PROCESS(dp_clk) p_rx_block_cnt : PROCESS(dp_clk)
BEGIN BEGIN
IF rising_edge(dp_clk) THEN IF rising_edge(dp_clk) THEN
IF test_offload_sosi.sop = '1' THEN IF test_offload_sosi.sop = '1' THEN
IF rx_request = '1' THEN IF in_sync_hold = '1' THEN
rx_block_cnt <= 0; rx_block_cnt <= 0;
rx_request <= '0'; in_sync_hold <= '0';
ELSE ELSE
rx_block_cnt <= rx_block_cnt + 1; rx_block_cnt <= rx_block_cnt + 1;
END IF; END IF;
END IF; END IF;
IF in_sosi.sync = '1' THEN IF in_sosi.sync = '1' THEN
rx_request <= '1'; in_sync_hold <= '1';
END IF; END IF;
END IF; END IF;
END PROCESS; END PROCESS;
-- Capture rx_bsn from header -- Capture rx_bsn from header.
rx_bsn <= TO_UINT(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn")+16)); rx_bsn <= TO_UINT(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn")+16));
-- Keep rx_bsn from previous header -- Keep rx_bsn from previous header.
rx_prev_bsn <= rx_bsn WHEN rising_edge(dp_clk); rx_prev_bsn <= rx_bsn WHEN rising_edge(dp_clk);
-- verify number of blocks between 2 syncs and between 2 changed bsn numbers -- Verify number of blocks between 2 syncs and between 2 changed bsn numbers.
p_verify_nof_blocks : PROCESS(dp_clk) p_verify_nof_blocks : PROCESS(dp_clk)
BEGIN BEGIN
IF rising_edge(dp_clk) THEN IF rising_edge(dp_clk) THEN
...@@ -346,17 +350,11 @@ BEGIN ...@@ -346,17 +350,11 @@ BEGIN
ASSERT rx_block_cnt = g_nof_signal_inputs_per_pn - 1 REPORT "wrong number of blocks between 2 sync" SEVERITY ERROR; ASSERT rx_block_cnt = g_nof_signal_inputs_per_pn - 1 REPORT "wrong number of blocks between 2 sync" SEVERITY ERROR;
END IF; END IF;
-- rx_prev_bsn > 0 is needed for the first time , when there is no previous BSN. -- rx_prev_bsn > 0 is needed for the first time, when there is no previous BSN.
-- rx_bsn > rx_prev_bsn is needed to detect a new rx_bsn. -- rx_bsn > rx_prev_bsn is needed to detect a new rx_bsn.
IF rx_prev_bsn > 0 AND rx_bsn > rx_prev_bsn THEN IF rx_prev_bsn > 0 AND rx_bsn > rx_prev_bsn THEN
ASSERT (rx_bsn - rx_prev_bsn) = c_nof_block_per_sync REPORT "wrong number of blocks between 2 bsn numbers" SEVERITY ERROR; ASSERT (rx_bsn - rx_prev_bsn) = c_nof_block_per_sync REPORT "wrong number of blocks between 2 bsn numbers" SEVERITY ERROR;
END IF; END IF;
rx_data_id <= TO_UINT(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")));
IF test_offload_sosi.eop = '1' THEN
ASSERT rx_data_id = rx_block_cnt + c_sdp_S_pn * gn_index REPORT "wrong block count number, received data_id not same as counted blocks" SEVERITY ERROR;
END IF;
END IF; END IF;
test_offload_siso <= c_dp_siso_rdy; test_offload_siso <= c_dp_siso_rdy;
END IF; END IF;
...@@ -379,7 +377,7 @@ BEGIN ...@@ -379,7 +377,7 @@ BEGIN
BEGIN BEGIN
proc_common_wait_until_low(mm_clk, mm_rst); proc_common_wait_until_low(mm_clk, mm_rst);
proc_common_wait_some_cycles(mm_clk, 10); proc_common_wait_some_cycles(mm_clk, 10);
-- write ethernet destinations via reg_hdr_dat_mosi -- Write ethernet destinations via reg_hdr_dat_mosi.
proc_mem_mm_bus_wr(c_hdr_dat_mm_addr_udp_src_port, TO_UINT(c_udp_src_port), mm_clk, hdr_dat_miso, hdr_dat_mosi); proc_mem_mm_bus_wr(c_hdr_dat_mm_addr_udp_src_port, TO_UINT(c_udp_src_port), mm_clk, hdr_dat_miso, hdr_dat_mosi);
proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency); proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency);
...@@ -404,14 +402,14 @@ BEGIN ...@@ -404,14 +402,14 @@ BEGIN
g_ram => c_ram_buf g_ram => c_ram_buf
) )
PORT MAP ( PORT MAP (
-- MM write port clock domain -- MM write port clock domain.
rst_a => mm_rst, rst_a => mm_rst,
clk_a => mm_clk, clk_a => mm_clk,
wr_en_a => ram_wr_en, wr_en_a => ram_wr_en,
wr_dat_a => ram_wr_data, wr_dat_a => ram_wr_data,
adr_a => ram_wr_addr, adr_a => ram_wr_addr,
-- DP read only port clock domain -- DP read only port clock domain.
rst_b => dp_rst, rst_b => dp_rst,
clk_b => dp_clk, clk_b => dp_clk,
adr_b => master_mosi.address(c_ram_buf.adr_w-1 DOWNTO 0), adr_b => master_mosi.address(c_ram_buf.adr_w-1 DOWNTO 0),
......
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