diff --git a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator_nodes.vhd b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator_nodes.vhd index fd46bfef9d84d44384fbc877a1e3763cb05ea444..09249f2e0338615723fb9f1b9f7d5cc2d2d652d8 100644 --- a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator_nodes.vhd +++ b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator_nodes.vhd @@ -63,7 +63,6 @@ ENTITY apertif_unb1_correlator_nodes IS GENERIC ( g_design_name : STRING := "apertif_unb1_correlator"; g_design_note : STRING := "revision info"; - g_use_bg : BOOLEAN := FALSE; -- Overridden (TRUE) by TB but still a valid synthesis option; this replaces the 10GbE input stage with block gens. g_sim : BOOLEAN := FALSE; -- Overridden by TB g_sim_level : NATURAL := 0; g_sim_fast : BOOLEAN := TRUE; -- TRUE = fast accumulator model and no inter-channel delay in the correlator output stream. @@ -134,8 +133,6 @@ ARCHITECTURE str OF apertif_unb1_correlator_nodes IS -- Firmware version x.y CONSTANT c_fw_version : t_unb1_board_fw_version := (0, 6); - -- Enable block generators - CONSTANT c_use_phy : t_c_unb1_board_use_phy := (1, sel_a_b(g_use_bg, 0, 1), 0, 0, 0, 0, 0, 1); CONSTANT c_nof_nodes : NATURAL := 8; CONSTANT c_nof_10GbE_streams : NATURAL := 3; -- The number of 10G input streams @@ -154,11 +151,19 @@ ARCHITECTURE str OF apertif_unb1_correlator_nodes IS CONSTANT c_use_wpfb : BOOLEAN := func_rev_selector(g_design_name, "c_use_wpfb"); CONSTANT c_use_cor : BOOLEAN := func_rev_selector(g_design_name, "c_use_cor"); CONSTANT c_use_repack : BOOLEAN := func_rev_selector(g_design_name, "c_use_repack"); + CONSTANT c_use_chan_stats : BOOLEAN := func_rev_selector(g_design_name, "c_use_chan_stats"); + CONSTANT c_use_bg_processing : BOOLEAN := func_rev_selector(g_design_name, "c_use_bg_processing"); CONSTANT c_mesh_data_w : NATURAL := sel_a_b(g_design_name = "apertif_unb1_correlator_mesh_ref", 16, 48); + -- Enable block generators + CONSTANT c_use_phy : t_c_unb1_board_use_phy := (1, sel_a_b(c_use_bg_input, 0, 1), 0, 0, 0, 0, 0, 1); + + CONSTANT c_usr_data_w : NATURAL := 16; - CONSTANT c_bg_file_name_prefix : STRING := sel_a_b(g_design_name = "apertif_unb1_correlator_mesh_dis", "hex/node" & NATURAL'IMAGE(g_sim_node_nr) & "/bg_in_data_mesh_distr", "hex/composite_signals"); + CONSTANT c_bg_file_name_prefix : STRING := sel_a_b(g_design_name = "apertif_unb1_correlator_mesh_dis" OR g_design_name = "apertif_unb1_correlator_filter", + "hex/node" & NATURAL'IMAGE(g_sim_node_nr) & "/bg_in_data_mesh_distr", + "hex/composite_signals"); -- BSN Alignern + FIFO's CONSTANT c_block_period : NATURAL := 186; --256; --FIXME: first block size was 176/256. Now 128/186,18 (non-integer...), assuming 186 is OK. @@ -220,6 +225,8 @@ ARCHITECTURE str OF apertif_unb1_correlator_nodes IS SIGNAL eth1g_tse_miso : t_mem_miso; SIGNAL reg_diag_bg_input_mosi : t_mem_mosi; SIGNAL reg_diag_bg_input_miso : t_mem_miso; + SIGNAL ram_diag_bg_input_mosi : t_mem_mosi; + SIGNAL ram_diag_bg_input_miso : t_mem_miso; SIGNAL reg_diag_bg_mesh_mosi : t_mem_mosi; SIGNAL reg_diag_bg_mesh_miso : t_mem_miso; SIGNAL ram_diag_bg_mesh_mosi : t_mem_mosi; @@ -252,20 +259,24 @@ ARCHITECTURE str OF apertif_unb1_correlator_nodes IS SIGNAL reg_tr_10gbe_miso : t_mem_miso; SIGNAL reg_tr_xaui_mosi : t_mem_mosi; SIGNAL reg_tr_xaui_miso : t_mem_miso; - SIGNAL reg_bsn_monitor_mosi : t_mem_mosi; - SIGNAL reg_bsn_monitor_miso : t_mem_miso; + SIGNAL reg_bsn_monitor_input_mosi : t_mem_mosi; + SIGNAL reg_bsn_monitor_input_miso : t_mem_miso; + SIGNAL reg_bsn_monitor_proc_mosi : t_mem_mosi; + SIGNAL reg_bsn_monitor_proc_miso : t_mem_miso; SIGNAL reg_diag_data_buf_proc_mosi : t_mem_mosi; SIGNAL reg_diag_data_buf_proc_miso : t_mem_miso; SIGNAL ram_diag_data_buf_proc_mosi : t_mem_mosi; - SIGNAL ram_diag_data_buf_proc_miso : t_mem_miso; - + SIGNAL ram_diag_data_buf_proc_miso : t_mem_miso; + SIGNAL ram_st_sst_mosi : t_mem_mosi; + SIGNAL ram_st_sst_miso : t_mem_miso; + SIGNAL reg_diag_bg_proc_mosi : t_mem_mosi; + SIGNAL reg_diag_bg_proc_miso : t_mem_miso; + SIGNAL ram_diag_bg_proc_mosi : t_mem_mosi; + SIGNAL ram_diag_bg_proc_miso : t_mem_miso; + SIGNAL reg_mdio_mosi_arr : t_mem_mosi_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); SIGNAL reg_mdio_miso_arr : t_mem_miso_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); - -- BSN monitors - SIGNAL dp_bsn_monitor_in_siso_arr : t_dp_siso_arr(c_nof_10GbE_streams+1+1-1 DOWNTO 0); - SIGNAL dp_bsn_monitor_in_sosi_arr : t_dp_sosi_arr(c_nof_10GbE_streams+1+1-1 DOWNTO 0); - SIGNAL dp_offload_tx_src_out_arr : t_dp_sosi_arr(c_nof_visibility_streams-1 DOWNTO 0); SIGNAL dp_offload_tx_src_in_arr : t_dp_siso_arr(c_nof_visibility_streams-1 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); @@ -289,31 +300,36 @@ BEGIN ) PORT MAP ( -- System - mm_rst => mm_rst, - mm_clk => mm_clk, - dp_rst => dp_rst, - dp_clk => dp_clk, - - -- Output array - data_src_out_arr => mesh_data_in_sosi_arr, - data_src_in_arr => mesh_data_in_siso_arr, - - -- MM - reg_diag_bg_mosi => reg_diag_bg_input_mosi, - reg_diag_bg_miso => reg_diag_bg_input_miso, - reg_tr_10GbE_mosi => reg_tr_10GbE_mosi, - reg_tr_10GbE_miso => reg_tr_10GbE_miso, - reg_tr_xaui_mosi => reg_tr_xaui_mosi, - reg_tr_xaui_miso => reg_tr_xaui_miso, - reg_mdio_mosi_arr => reg_mdio_mosi_arr, - reg_mdio_miso_arr => reg_mdio_miso_arr, + mm_rst => mm_rst, + mm_clk => mm_clk, + dp_rst => dp_rst, + dp_clk => dp_clk, + + -- Output array + data_src_out_arr => mesh_data_in_sosi_arr, + data_src_in_arr => mesh_data_in_siso_arr, + + -- MM + reg_diag_bg_mosi => reg_diag_bg_input_mosi, + reg_diag_bg_miso => reg_diag_bg_input_miso, + ram_diag_bg_mosi => ram_diag_bg_input_mosi, + ram_diag_bg_miso => ram_diag_bg_input_miso, + reg_tr_10GbE_mosi => reg_tr_10GbE_mosi, + reg_tr_10GbE_miso => reg_tr_10GbE_miso, + reg_tr_xaui_mosi => reg_tr_xaui_mosi, + reg_tr_xaui_miso => reg_tr_xaui_miso, + reg_mdio_mosi_arr => reg_mdio_mosi_arr, + reg_mdio_miso_arr => reg_mdio_miso_arr, ram_diag_data_buf_mosi => ram_diag_data_buf_input_mosi, ram_diag_data_buf_miso => ram_diag_data_buf_input_miso, reg_diag_data_buf_mosi => reg_diag_data_buf_input_mosi, reg_diag_data_buf_miso => reg_diag_data_buf_input_miso, + reg_bsn_monitor_mosi => reg_bsn_monitor_input_mosi, + reg_bsn_monitor_miso => reg_bsn_monitor_input_miso, + reg_dp_offload_rx_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, - reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, - + reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, + -- Transceiver clocks SA_CLK => SA_CLK, @@ -378,8 +394,6 @@ BEGIN reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, reg_diagnostics_mosi => reg_diagnostics_mosi, reg_diagnostics_miso => reg_diagnostics_miso, - reg_bsn_monitor_mosi => reg_bsn_monitor_mosi, - reg_bsn_monitor_miso => reg_bsn_monitor_miso, ram_diag_data_buf_mosi => ram_diag_data_buf_mesh_mosi, ram_diag_data_buf_miso => ram_diag_data_buf_mesh_miso, reg_diag_data_buf_mosi => reg_diag_data_buf_mesh_mosi, @@ -407,8 +421,10 @@ BEGIN g_sim => g_sim, g_sim_fast => g_sim_fast, g_use_db => c_use_db_processing, + g_use_bg => c_use_bg_processing, g_use_wpfb => c_use_wpfb, - g_use_cor => c_use_cor, + g_use_cor => c_use_cor, + g_use_chan_stats => c_use_chan_stats, g_usr_data_w => c_usr_data_w, g_nof_input_streams => c_nof_nodes, g_nof_output_streams => c_nof_visibility_streams @@ -431,55 +447,24 @@ BEGIN data_src_in_arr => dp_offload_tx_src_in_arr, -- MM + ram_st_sst_mosi => ram_st_sst_mosi, + ram_st_sst_miso => ram_st_sst_miso, ram_fil_coefs_mosi => ram_fil_coefs_mosi, ram_fil_coefs_miso => ram_fil_coefs_miso, + reg_bsn_monitor_mosi => reg_bsn_monitor_proc_mosi, + reg_bsn_monitor_miso => reg_bsn_monitor_proc_miso, ram_diag_data_buf_mosi => ram_diag_data_buf_proc_mosi, ram_diag_data_buf_miso => ram_diag_data_buf_proc_miso, reg_diag_data_buf_mosi => reg_diag_data_buf_proc_mosi, reg_diag_data_buf_miso => reg_diag_data_buf_proc_miso, + reg_diag_bg_mosi => reg_diag_bg_proc_mosi, + reg_diag_bg_miso => reg_diag_bg_proc_miso, + ram_diag_bg_mosi => ram_diag_bg_proc_mosi, + ram_diag_bg_miso => ram_diag_bg_proc_miso, reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso ); END GENERATE; - - ----------------------------------------------------------------------------- - -- RX: BSN monitors at several stages in the stream - ----------------------------------------------------------------------------- --- u_dp_bsn_monitor : ENTITY dp_lib.mms_dp_bsn_monitor --- GENERIC MAP ( --- g_nof_streams => 5, --- g_sync_timeout => c_bsn_sync_time_out, --- g_log_first_bsn => TRUE --- ) --- PORT MAP ( --- mm_rst => mm_rst, --- mm_clk => mm_clk, --- reg_mosi => reg_bsn_monitor_mosi, --- reg_miso => reg_bsn_monitor_miso, --- --- dp_rst => dp_rst, --- dp_clk => dp_clk, --- in_siso_arr => dp_bsn_monitor_in_siso_arr, --- in_sosi_arr => dp_bsn_monitor_in_sosi_arr --- ); --- --- -- 0) Monitor the BSN-aligned output --- dp_bsn_monitor_in_sosi_arr(0) <= dp_bsn_align_src_out_arr(0); --- dp_bsn_monitor_in_siso_arr(0) <= dp_bsn_align_src_in_arr(0); --- -- 1) Monitor the rewired/reinterleaver stage output / WPFB input --- dp_bsn_monitor_in_sosi_arr(1) <= wpfb_snk_in_arr(0); --- dp_bsn_monitor_in_siso_arr(1) <= c_dp_siso_rdy; --- -- 2) Monitor the WPFB output / correlator input --- dp_bsn_monitor_in_sosi_arr(2) <= wpfb_src_out_arr(0); --- dp_bsn_monitor_in_siso_arr(2) <= c_dp_siso_rdy; --- -- 3) Monitor the correlator output / visibility offload input --- dp_bsn_monitor_in_sosi_arr(3) <= correlator_src_out_arr(0); --- dp_bsn_monitor_in_siso_arr(3) <= c_dp_siso_rdy; --- -- 3) Monitor the correlator output / visibility offload input --- dp_bsn_monitor_in_sosi_arr(4) <= dp_offload_tx_src_out_arr(0); --- dp_bsn_monitor_in_siso_arr(4) <= dp_offload_tx_src_in_arr(0); - - ----------------------------------------------------------------------------- -- General control function @@ -589,75 +574,85 @@ BEGIN ----------------------------------------------------------------------------- -- MM master ----------------------------------------------------------------------------- - inst_mmm_apertif_unb1_correlator : ENTITY work.mmm_apertif_unb1_correlator - GENERIC MAP( - g_sim => g_sim, - g_sim_unb_nr => g_sim_unb_nr, - g_sim_node_nr => g_sim_node_nr - ) - PORT MAP( - mm_clk => mm_clk, - mm_rst => mm_rst, - pout_wdi => pout_wdi, - reg_wdi_mosi => reg_wdi_mosi, - reg_wdi_miso => reg_wdi_miso, - reg_unb_system_info_mosi => reg_unb_system_info_mosi, - reg_unb_system_info_miso => reg_unb_system_info_miso, - rom_unb_system_info_mosi => rom_unb_system_info_mosi, - rom_unb_system_info_miso => rom_unb_system_info_miso, - reg_unb_sens_mosi => reg_unb_sens_mosi, - reg_unb_sens_miso => reg_unb_sens_miso, - reg_ppsh_mosi => reg_ppsh_mosi, - reg_ppsh_miso => reg_ppsh_miso, - eth1g_mm_rst => eth1g_mm_rst, - eth1g_reg_interrupt => eth1g_reg_interrupt, - eth1g_ram_mosi => eth1g_ram_mosi, - eth1g_ram_miso => eth1g_ram_miso, - eth1g_reg_mosi => eth1g_reg_mosi, - eth1g_reg_miso => eth1g_reg_miso, - eth1g_tse_mosi => eth1g_tse_mosi, - eth1g_tse_miso => eth1g_tse_miso, - reg_diag_bg_input_mosi => reg_diag_bg_input_mosi, - reg_diag_bg_input_miso => reg_diag_bg_input_miso, - reg_diag_bg_mesh_mosi => reg_diag_bg_mesh_mosi, - reg_diag_bg_mesh_miso => reg_diag_bg_mesh_miso, - ram_diag_bg_mesh_mosi => ram_diag_bg_mesh_mosi, - ram_diag_bg_mesh_miso => ram_diag_bg_mesh_miso, - reg_diagnostics_mosi => reg_diagnostics_mosi, - reg_diagnostics_miso => reg_diagnostics_miso, - reg_tr_nonbonded_mosi => reg_tr_nonbonded_mosi, - reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, - reg_diag_data_buf_input_mosi => reg_diag_data_buf_input_mosi, - reg_diag_data_buf_input_miso => reg_diag_data_buf_input_miso, - ram_diag_data_buf_input_mosi => ram_diag_data_buf_input_mosi, - ram_diag_data_buf_input_miso => ram_diag_data_buf_input_miso, - reg_diag_data_buf_mesh_mosi => reg_diag_data_buf_mesh_mosi, - reg_diag_data_buf_mesh_miso => reg_diag_data_buf_mesh_miso, - ram_diag_data_buf_mesh_mosi => ram_diag_data_buf_mesh_mosi, - ram_diag_data_buf_mesh_miso => ram_diag_data_buf_mesh_miso, - ram_fil_coefs_mosi => ram_fil_coefs_mosi, - ram_fil_coefs_miso => ram_fil_coefs_miso, - reg_mdio_0_mosi => reg_mdio_0_mosi, - reg_mdio_0_miso => reg_mdio_0_miso, - reg_mdio_1_mosi => reg_mdio_1_mosi, - reg_mdio_1_miso => reg_mdio_1_miso, - reg_mdio_2_mosi => reg_mdio_2_mosi, - reg_mdio_2_miso => reg_mdio_2_miso, - reg_dp_offload_rx_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, - reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, - reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, - reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, - reg_tr_10gbe_mosi => reg_tr_10gbe_mosi, - reg_tr_10gbe_miso => reg_tr_10gbe_miso, - reg_tr_xaui_mosi => reg_tr_xaui_mosi, - reg_tr_xaui_miso => reg_tr_xaui_miso, - reg_bsn_monitor_mosi => reg_bsn_monitor_mosi, - reg_bsn_monitor_miso => reg_bsn_monitor_miso, - reg_diag_data_buf_proc_mosi => reg_diag_data_buf_proc_mosi, - reg_diag_data_buf_proc_miso => reg_diag_data_buf_proc_miso, - ram_diag_data_buf_proc_mosi => ram_diag_data_buf_proc_mosi, - ram_diag_data_buf_proc_miso => ram_diag_data_buf_proc_miso - ); + u_inst_mmm_apertif_unb1_correlator : ENTITY work.mmm_apertif_unb1_correlator + GENERIC MAP( + g_sim => g_sim, + g_sim_unb_nr => g_sim_unb_nr, + g_sim_node_nr => g_sim_node_nr + ) + PORT MAP( + mm_clk => mm_clk, + mm_rst => mm_rst, + pout_wdi => pout_wdi, + reg_wdi_mosi => reg_wdi_mosi, + reg_wdi_miso => reg_wdi_miso, + reg_unb_system_info_mosi => reg_unb_system_info_mosi, + reg_unb_system_info_miso => reg_unb_system_info_miso, + rom_unb_system_info_mosi => rom_unb_system_info_mosi, + rom_unb_system_info_miso => rom_unb_system_info_miso, + reg_unb_sens_mosi => reg_unb_sens_mosi, + reg_unb_sens_miso => reg_unb_sens_miso, + reg_ppsh_mosi => reg_ppsh_mosi, + reg_ppsh_miso => reg_ppsh_miso, + eth1g_mm_rst => eth1g_mm_rst, + eth1g_reg_interrupt => eth1g_reg_interrupt, + eth1g_ram_mosi => eth1g_ram_mosi, + eth1g_ram_miso => eth1g_ram_miso, + eth1g_reg_mosi => eth1g_reg_mosi, + eth1g_reg_miso => eth1g_reg_miso, + eth1g_tse_mosi => eth1g_tse_mosi, + eth1g_tse_miso => eth1g_tse_miso, + reg_diag_bg_input_mosi => reg_diag_bg_input_mosi, + reg_diag_bg_input_miso => reg_diag_bg_input_miso, + ram_diag_bg_input_mosi => ram_diag_bg_input_mosi, + ram_diag_bg_input_miso => ram_diag_bg_input_miso, + reg_diag_bg_mesh_mosi => reg_diag_bg_mesh_mosi, + reg_diag_bg_mesh_miso => reg_diag_bg_mesh_miso, + ram_diag_bg_mesh_mosi => ram_diag_bg_mesh_mosi, + ram_diag_bg_mesh_miso => ram_diag_bg_mesh_miso, + reg_diagnostics_mosi => reg_diagnostics_mosi, + reg_diagnostics_miso => reg_diagnostics_miso, + reg_tr_nonbonded_mosi => reg_tr_nonbonded_mosi, + reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, + reg_diag_data_buf_input_mosi => reg_diag_data_buf_input_mosi, + reg_diag_data_buf_input_miso => reg_diag_data_buf_input_miso, + ram_diag_data_buf_input_mosi => ram_diag_data_buf_input_mosi, + ram_diag_data_buf_input_miso => ram_diag_data_buf_input_miso, + reg_diag_data_buf_mesh_mosi => reg_diag_data_buf_mesh_mosi, + reg_diag_data_buf_mesh_miso => reg_diag_data_buf_mesh_miso, + ram_diag_data_buf_mesh_mosi => ram_diag_data_buf_mesh_mosi, + ram_diag_data_buf_mesh_miso => ram_diag_data_buf_mesh_miso, + ram_fil_coefs_mosi => ram_fil_coefs_mosi, + ram_fil_coefs_miso => ram_fil_coefs_miso, + reg_mdio_0_mosi => reg_mdio_0_mosi, + reg_mdio_0_miso => reg_mdio_0_miso, + reg_mdio_1_mosi => reg_mdio_1_mosi, + reg_mdio_1_miso => reg_mdio_1_miso, + reg_mdio_2_mosi => reg_mdio_2_mosi, + reg_mdio_2_miso => reg_mdio_2_miso, + reg_dp_offload_rx_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, + reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, + reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, + reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, + reg_tr_10gbe_mosi => reg_tr_10gbe_mosi, + reg_tr_10gbe_miso => reg_tr_10gbe_miso, + reg_tr_xaui_mosi => reg_tr_xaui_mosi, + reg_tr_xaui_miso => reg_tr_xaui_miso, + reg_bsn_monitor_input_mosi => reg_bsn_monitor_input_mosi, + reg_bsn_monitor_input_miso => reg_bsn_monitor_input_miso, + reg_bsn_monitor_proc_mosi => reg_bsn_monitor_proc_mosi, + reg_bsn_monitor_proc_miso => reg_bsn_monitor_proc_miso, + reg_diag_data_buf_proc_mosi => reg_diag_data_buf_proc_mosi, + reg_diag_data_buf_proc_miso => reg_diag_data_buf_proc_miso, + ram_diag_data_buf_proc_mosi => ram_diag_data_buf_proc_mosi, + ram_diag_data_buf_proc_miso => ram_diag_data_buf_proc_miso, + ram_st_sst_mosi => ram_st_sst_mosi, + ram_st_sst_miso => ram_st_sst_miso, + reg_diag_bg_proc_mosi => reg_diag_bg_proc_mosi, + reg_diag_bg_proc_miso => reg_diag_bg_proc_miso, + ram_diag_bg_proc_mosi => ram_diag_bg_proc_mosi, + ram_diag_bg_proc_miso => ram_diag_bg_proc_miso + ); reg_mdio_mosi_arr(0) <= reg_mdio_0_mosi; reg_mdio_mosi_arr(1) <= reg_mdio_1_mosi;