diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/disturb2_unb2b_sdp_station_full_wg/tb_disturb2_unb2b_sdp_station_full_wg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/disturb2_unb2b_sdp_station_full_wg/tb_disturb2_unb2b_sdp_station_full_wg.vhd index add612046c21acb3512352a156ecb351b11d6154..60428a055e448e8e801f1175f61dd8ded567acb8 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/disturb2_unb2b_sdp_station_full_wg/tb_disturb2_unb2b_sdp_station_full_wg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/disturb2_unb2b_sdp_station_full_wg/tb_disturb2_unb2b_sdp_station_full_wg.vhd @@ -177,12 +177,20 @@ ARCHITECTURE tb OF tb_disturb2_unb2b_sdp_station_full_wg IS SIGNAL rd_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); -- 10GbE + -- . header fields + SIGNAL rx_beamlet_scale : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL rx_beamlet_index_offset : NATURAL := 0; + SIGNAL rx_blocks_per_packet : STD_LOGIC_VECTOR(7 DOWNTO 0); + SIGNAL rx_beamlets_per_block : STD_LOGIC_VECTOR(15 DOWNTO 0); + SIGNAL rx_block_period : STD_LOGIC_VECTOR(15 DOWNTO 0); + SIGNAL rx_bsn : STD_LOGIC_VECTOR(63 DOWNTO 0); + -- . payload indices and data arrays SIGNAL rx_beamlet_blk : NATURAL := 0; SIGNAL rx_beamlet_cnt : NATURAL := 0; SIGNAL rx_beamlet_valid : STD_LOGIC := '0'; SIGNAL rx_beamlet_sop : STD_LOGIC := '0'; + SIGNAL beamlet_arr2_re : t_slv_8_arr(c_sdp_R_os * c_sdp_N_pol_bf * c_sdp_cep_nof_beamlets_per_block-1 DOWNTO 0); SIGNAL beamlet_arr2_im : t_slv_8_arr(c_sdp_R_os * c_sdp_N_pol_bf * c_sdp_cep_nof_beamlets_per_block-1 DOWNTO 0); @@ -411,18 +419,26 @@ BEGIN -- Read 3 packets to make sure we get 1 from each beamset. It can happen that two packets -- (but not three) from the same beamset are received back to back. - FOR packet IN 0 TO 24 LOOP + FOR packet IN 0 TO 10 LOOP -- Get beamlet_index from packet header proc_common_wait_until_high(ext_clk, tr_10GbE_src_out.sop); FOR I IN 0 TO 8 LOOP -- Packet header is 9.25 words wide, which can be discarded IF I = 7 THEN + rx_beamlet_scale <= tr_10GbE_src_out.data(55 DOWNTO 40); v_beamlet_index_offset := c_sdp_N_pol_bf * TO_UINT(tr_10GbE_src_out.data(39 DOWNTO 24)); -- Read beamlet index rx_beamlet_index_offset <= v_beamlet_index_offset; + rx_blocks_per_packet <= tr_10GbE_src_out.data(23 DOWNTO 16); + rx_beamlets_per_block <=tr_10GbE_src_out.data(15 DOWNTO 0); + END IF; + IF I = 8 THEN + rx_block_period <= tr_10GbE_src_out.data(63 DOWNTO 48); + rx_bsn(63 DOWNTO 16) <= tr_10GbE_src_out.data(47 DOWNTO 0); END IF; proc_common_wait_until_high(ext_clk, tr_10GbE_src_out.valid); proc_common_wait_some_cycles(ext_clk, 1); END LOOP; - + rx_bsn(15 DOWNTO 0) <= tr_10GbE_src_out.data(63 DOWNTO 48); + -- Get all c_sdp_cep_nof_blocks_per_packet = 4 blocks from the packet FOR blk IN 0 TO c_sdp_cep_nof_blocks_per_packet-1 LOOP -- . First word contains 1 header part of two bytes and 3 beamlets [0:2].