From e567cc5b6f429eb448ea604649faf83d149d1f41 Mon Sep 17 00:00:00 2001 From: Reinier van der Walle <walle@astron.nl> Date: Fri, 27 Nov 2020 12:19:50 +0100 Subject: [PATCH] processed review comments --- .../src/vhdl/lofar2_unb2b_beamformer.vhd | 35 ++++++------- .../sdp/src/vhdl/node_sdp_beamformer.vhd | 2 +- .../sdp/src/vhdl/sdp_beamformer_output.vhd | 51 ++++++++++--------- .../libraries/sdp/src/vhdl/sdp_bf_weights.vhd | 2 +- .../lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd | 16 +++--- .../sdp/src/vhdl/sdp_subband_equalizer.vhd | 2 +- .../base/dp/src/vhdl/mms_dp_gain_arr.vhd | 1 + 7 files changed, 54 insertions(+), 55 deletions(-) diff --git a/applications/lofar2/designs/lofar2_unb2b_beamformer/src/vhdl/lofar2_unb2b_beamformer.vhd b/applications/lofar2/designs/lofar2_unb2b_beamformer/src/vhdl/lofar2_unb2b_beamformer.vhd index 23a850b737..00f3c7f779 100644 --- a/applications/lofar2/designs/lofar2_unb2b_beamformer/src/vhdl/lofar2_unb2b_beamformer.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_beamformer/src/vhdl/lofar2_unb2b_beamformer.vhd @@ -51,7 +51,6 @@ ENTITY lofar2_unb2b_beamformer IS g_sim : BOOLEAN := FALSE; --Overridden by TB g_sim_unb_nr : NATURAL := 0; g_sim_node_nr : NATURAL := 0; - g_sim_model_ddr : BOOLEAN := FALSE; g_stamp_date : NATURAL := 0; -- Date (YYYYMMDD) -- set by QSF g_stamp_time : NATURAL := 0; -- Time (HHMMSS) -- set by QSF g_revision_id : STRING := ""; -- revision ID -- set by QSF @@ -95,13 +94,13 @@ ENTITY lofar2_unb2b_beamformer IS QSFP_LED : OUT STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0); -- back transceivers (Note: numbered from 0) - JESD204B_SERIAL_DATA : IN STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1 downto 0); + JESD204B_SERIAL_DATA : IN STD_LOGIC_VECTOR(c_sdp_S_pn-1 downto 0); -- Connect to the BCK_RX pins in the top wrapper JESD204B_REFCLK : IN STD_LOGIC; -- Connect to BCK_REF_CLK pin in the top level wrapper -- jesd204b syncronization signals JESD204B_SYSREF : IN STD_LOGIC; - JESD204B_SYNC_N : OUT STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1 DOWNTO 0) + JESD204B_SYNC_N : OUT STD_LOGIC_VECTOR(c_sdp_S_pn-1 DOWNTO 0) ); END lofar2_unb2b_beamformer; @@ -128,19 +127,19 @@ ARCHITECTURE str OF lofar2_unb2b_beamformer IS CONSTANT c_fifo_tx_fill : NATURAL := c_10GbE_block_size; CONSTANT c_fifo_tx_size : NATURAL := c_fifo_tx_fill + 11; -- Make fifo size large enough for adding header. - -- Address widths + -- Address widths of a single MM instance CONSTANT c_addr_w_ram_ss_ss_wide : NATURAL := ceil_log2(c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); CONSTANT c_addr_w_ram_bf_weights : NATURAL := ceil_log2(c_sdp_N_pol * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); CONSTANT c_addr_w_reg_bf_scale : NATURAL := 1; - CONSTANT c_addr_w_reg_hdr_dat : NATURAL := ceil_log2(field_nof_words(c_sdp_hdr_field_arr, c_word_w)); + CONSTANT c_addr_w_reg_hdr_dat : NATURAL := ceil_log2(field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); CONSTANT c_addr_w_reg_dp_xonoff : NATURAL := 1; CONSTANT c_addr_w_ram_st_bst : NATURAL := ceil_log2(c_sdp_S_sub_bf*c_sdp_N_pol*(c_longword_sz/c_word_sz)); -- Read only sdp_info values - CONSTANT c_sdp_info_f_adc : STD_LOGIC := '1'; -- '0' => 160M, '1' => 200M - CONSTANT c_sdp_info_fsub_type : STD_LOGIC := '0'; -- '0' => critical sampled PFB, '1' => oversampled PFB - SIGNAL sdp_info_gn_index : NATURAL := 0; + CONSTANT c_f_adc : STD_LOGIC := '1'; -- '0' => 160M, '1' => 200M + CONSTANT c_fsub_type : STD_LOGIC := '0'; -- '0' => critical sampled PFB, '1' => oversampled PFB + SIGNAL gn_index : NATURAL := 0; -- System @@ -729,7 +728,7 @@ BEGIN ----------------------------------------------------------------------------- -- SDP Info register ----------------------------------------------------------------------------- - sdp_info_gn_index <= TO_UINT(ID(c_sdp_W_gn_id-1 DOWNTO 0)); + gn_index <= TO_UINT(ID(c_sdp_W_gn_id-1 DOWNTO 0)); u_sdp_info : ENTITY lofar2_sdp_lib.sdp_info PORT MAP( @@ -744,9 +743,9 @@ BEGIN reg_miso => reg_sdp_info_miso, -- inputs from other blocks - gn_index => sdp_info_gn_index, - f_adc => c_sdp_info_f_adc, - fsub_type => c_sdp_info_fsub_type, + gn_index => gn_index, + f_adc => c_f_adc, + fsub_type => c_fsub_type, -- sdp info sdp_info => sdp_info @@ -885,6 +884,9 @@ BEGIN ----------------------------------------------------------------------------- -- DP MUX ----------------------------------------------------------------------------- + -- Assign hdr_fields to nw_10GbE for ARP/PING functionality. Only the fields: + -- eth_src_mac, ip_src_addr and ip_dst_addr are used. Which are identical for + -- both beamsets. nw_10GbE_hdr_fields_in_arr(0) <= bf_10GbE_hdr_fields_out_arr(0); u_dp_mux : ENTITY dp_lib.dp_mux @@ -963,7 +965,7 @@ BEGIN g_direction => "TX_RX", g_tx_fifo_fill => c_fifo_tx_fill, g_tx_fifo_size => c_fifo_tx_size, - g_ip_hdr_field_arr => c_sdp_hdr_field_arr + g_ip_hdr_field_arr => c_sdp_cep_hdr_field_arr ) PORT MAP ( @@ -1001,11 +1003,4 @@ BEGIN hdr_fields_in_arr => nw_10GbE_hdr_fields_in_arr ); - - - - - - - END str; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd index 2c52e75964..f453ee5fe4 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd @@ -75,7 +75,7 @@ ENTITY node_sdp_beamformer IS ip_src_addr : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); - hdr_fields_out : OUT STD_LOGIC_VECTOR(1023 DOWNTO 0) + hdr_fields_out : OUT STD_LOGIC_VECTOR(1023 DOWNTO 0) -- Needed by nw_10GbE for PING/ARP ); END node_sdp_beamformer; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd index 0cf99e4ee0..34652ab691 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd @@ -76,7 +76,7 @@ ARCHITECTURE str OF sdp_beamformer_output IS CONSTANT c_data_w : NATURAL := c_nof_complex*c_sdp_W_beamlet; --16b CONSTANT c_beamlet_id : NATURAL := g_beamset_id * c_sdp_S_sub_bf; - CONSTANT c_fifo_fill : NATURAL := c_sdp_nof_blocks_per_packet * c_sdp_nof_beamlets_per_block / 4; -- 4 beamlets fit in 1 64bit longword + CONSTANT c_fifo_fill : NATURAL := c_sdp_cep_nof_blocks_per_packet * c_sdp_cep_nof_beamlets_per_block / 4; -- Size of packet: 4 beamlets fit in 1 64bit longword CONSTANT c_fifo_size : NATURAL := c_fifo_fill*2; -- Make fifo size large enough for adding header and muxing beamsets. SIGNAL snk_in_concat : t_dp_sosi; @@ -134,7 +134,7 @@ BEGIN ------------------------------------------------------------------------------- u_dp_packet_merge : ENTITY dp_lib.dp_packet_merge GENERIC MAP( - g_nof_pkt => c_sdp_nof_blocks_per_packet + g_nof_pkt => c_sdp_cep_nof_blocks_per_packet ) PORT MAP( rst => dp_rst, @@ -153,6 +153,8 @@ BEGIN -- source. -- . Also, we need a fill FIFO here because 16b->64b will introduce gaps in our -- TX stream (not allowed by 10G TX MAC). + -- . The fill fifo waits until c_fifo_fill words are received before enabling the + -- output. The total number of words in the fifo is determained by the backpressure. ------------------------------------------------------------------------------- u_dp_fifo_fill_sc : ENTITY dp_lib.dp_fifo_fill_sc GENERIC MAP ( @@ -176,8 +178,9 @@ BEGIN src_in => dp_fifo_sc_src_in ); - -- Simple fifo to store the payload error at eop. - common_fifo_rd_req <= dp_fifo_sc_src_out.sop AND dp_fifo_sc_src_out.valid; + -- Simple fifo to store the payload error at eop of FIFO input to be used at sop of FIFO output. + -- It can then be used in the packet header. + common_fifo_rd_req <= dp_fifo_sc_src_out.sop; u_common_fifo_sc : ENTITY common_lib.common_fifo_sc GENERIC MAP ( g_dat_w => 1, @@ -195,25 +198,25 @@ BEGIN ------------------------------------------------------------------------------- -- Assemble offload info ------------------------------------------------------------------------------- - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_hdr_field_arr, "udp_src_port")) <= udp_src_port; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; - - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_observation_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_station_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_station_id" )) <= sdp_info.station_id; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_antenna_band_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_f_adc" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_fsub_type" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(sdp_info.fsub_type); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_payload_error" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_payload_error" )) <= payload_err; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_repositioning_flag" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_source_info_gn_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_source_info_gn_id" )) <= gn_id; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_reserved" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_reserved" )) <= (OTHERS => '0'); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_beamlet_scale" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_beamlet_scale" )) <= sdp_info.beamlet_scale; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_beamlet_id" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_beamlet_id" )) <= TO_UVEC(c_beamlet_id, c_halfword_w); - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "sdp_block_period" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "udp_src_port")) <= udp_src_port; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; + + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_observation_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_station_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_station_id" )) <= sdp_info.station_id; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(sdp_info.fsub_type); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" )) <= payload_err; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_repositioning_flag" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" )) <= gn_id; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_reserved" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_reserved" )) <= (OTHERS => '0'); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" )) <= sdp_info.beamlet_scale; + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_id" )) <= TO_UVEC(c_beamlet_id, c_halfword_w); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_block_period" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; - dp_offload_tx_hdr_fields(field_hi(c_sdp_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_sdp_hdr_field_arr, "dp_bsn" )) <= dp_fifo_sc_src_out.bsn(63 DOWNTO 0); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "dp_bsn" )) <= dp_fifo_sc_src_out.bsn(63 DOWNTO 0); ------------------------------------------------------------------------------- @@ -224,8 +227,8 @@ BEGIN g_nof_streams => 1, g_data_w => c_longword_w, g_symbol_w => c_byte_w, - g_hdr_field_arr => c_sdp_hdr_field_arr, - g_hdr_field_sel => c_sdp_hdr_field_sel + g_hdr_field_arr => c_sdp_cep_hdr_field_arr, + g_hdr_field_sel => c_sdp_cep_hdr_field_sel ) PORT MAP ( mm_rst => mm_rst, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd index 3de1f2fda9..4588db0590 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd @@ -83,7 +83,7 @@ BEGIN cnt <= 0; v_Q_fft := 0; v_S_sub_bf := 0; - ELSIF rising_edge(dp_clk) THEN + ELSIF rising_edge(dp_clk) AND in_sosi_arr(0).valid = '1' THEN IF in_sosi_arr(0).eop = '1' THEN v_Q_fft := 0; v_S_sub_bf := 0; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index a9e8096779..f62cfa0e44 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -144,12 +144,12 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_ram_st_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_S_sub_bf*c_sdp_N_pol*(c_longword_sz/c_word_sz)); -- 10GbE offload - CONSTANT c_sdp_nof_blocks_per_packet : NATURAL := 4; - CONSTANT c_sdp_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; - CONSTANT c_sdp_nof_hdr_fields : NATURAL := 3+12+4+18+1; -- 592b; 9.25 64b words - CONSTANT c_sdp_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"110000000010000110"&"0"; + CONSTANT c_sdp_cep_nof_blocks_per_packet : NATURAL := 4; + CONSTANT c_sdp_cep_nof_beamlets_per_block : NATURAL := c_sdp_N_pol * c_sdp_S_sub_bf; + CONSTANT c_sdp_cep_nof_hdr_fields : NATURAL := 3+12+4+18+1; -- 592b; 9.25 64b words + CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"110000000010000110"&"0"; - CONSTANT c_sdp_hdr_field_arr : t_common_field_arr(c_sdp_nof_hdr_fields-1 DOWNTO 0) := ( + CONSTANT c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"00074306C700") ), -- 00074306C700=DOP36-eth0 ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), @@ -184,14 +184,14 @@ PACKAGE sdp_pkg is ( field_name_pad("sdp_reserved" ), "RW", 40, field_default(0) ), ( field_name_pad("sdp_beamlet_scale" ), "RW", 16, field_default(2**15) ), ( field_name_pad("sdp_beamlet_id" ), "RW", 16, field_default(0) ), - ( field_name_pad("sdp_nof_blocks_per_packet" ), "RW", 8, field_default(c_sdp_nof_blocks_per_packet) ), - ( field_name_pad("sdp_nof_beamlets_per_block" ), "RW", 16, field_default(c_sdp_nof_beamlets_per_block) ), + ( field_name_pad("sdp_nof_blocks_per_packet" ), "RW", 8, field_default(c_sdp_cep_nof_blocks_per_packet) ), + ( field_name_pad("sdp_nof_beamlets_per_block" ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ), ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(5120) ), ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) ); -- 10GbE MM address widths - CONSTANT c_sdp_reg_hdr_dat_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(field_nof_words(c_sdp_hdr_field_arr, c_word_w)); + CONSTANT c_sdp_reg_hdr_dat_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(field_nof_words(c_sdp_cep_hdr_field_arr, c_word_w)); CONSTANT c_sdp_reg_nw_10GbE_mac_addr_w : NATURAL := 13; CONSTANT c_sdp_reg_nw_10GbE_eth10g_addr_w : NATURAL := 1; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd index 207b9330ef..f4048ce943 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd @@ -83,7 +83,7 @@ BEGIN cnt <= 0; v_Q_fft := 0; v_N_sub := 0; - ELSIF rising_edge(dp_clk) THEN + ELSIF rising_edge(dp_clk) AND in_sosi_arr(0).valid = '1' THEN IF in_sosi_arr(0).eop = '1' THEN v_Q_fft := 0; v_N_sub := 0; diff --git a/libraries/base/dp/src/vhdl/mms_dp_gain_arr.vhd b/libraries/base/dp/src/vhdl/mms_dp_gain_arr.vhd index 7e5d8e3673..90716d3e5e 100644 --- a/libraries/base/dp/src/vhdl/mms_dp_gain_arr.vhd +++ b/libraries/base/dp/src/vhdl/mms_dp_gain_arr.vhd @@ -49,6 +49,7 @@ -- time multiplexed data, then a new component is necessary. The gains per -- stream may then be stored in a MM RAM, because they are used sequentially. -- . see also reqant_selection_compensation.m +-- . A dp_pipeline is used to pass through the dp_control_fields. LIBRARY IEEE, common_lib, common_mult_lib, technology_lib; USE IEEE.STD_LOGIC_1164.ALL; -- GitLab