diff --git a/applications/unb1_fn_bf/src/vhdl/unb1_fn_bf.vhd b/applications/unb1_fn_bf/src/vhdl/unb1_fn_bf.vhd index de6e4f2a80fdbe268c2f1e126b09546f68a00027..49a8c6eac08578876ceb76eb3734780491b64272 100644 --- a/applications/unb1_fn_bf/src/vhdl/unb1_fn_bf.vhd +++ b/applications/unb1_fn_bf/src/vhdl/unb1_fn_bf.vhd @@ -32,11 +32,13 @@ USE tse_lib.tse_pkg.ALL; USE tse_lib.eth_pkg.ALL; USE bf_lib.bf_pkg.ALL; -ENTITY fn_bf IS +ENTITY unb1_fn_bf IS GENERIC ( + g_design_name : STRING := "unb1_fn_bf"; + g_design_note : STRING := "UNUSED"; g_sim : BOOLEAN := FALSE; --Overridden by TB g_sim_unb_nr : NATURAL := 0; - g_sim_node_nr : NATURAL := 4; + g_sim_node_nr : NATURAL := 0; g_stamp_date : NATURAL := 0; -- Date (YYYYMMDD) -- set by QSF g_stamp_time : NATURAL := 0; -- Time (HHMMSS) -- set by QSF g_stamp_svn : NATURAL := 0; -- SVN revision -- set by QSF @@ -64,25 +66,22 @@ ENTITY fn_bf IS ETH_SGIN : IN STD_LOGIC; ETH_SGOUT : OUT STD_LOGIC ); -END fn_bf; +END unb1_fn_bf; -ARCHITECTURE str OF fn_bf IS +ARCHITECTURE str OF unb1_fn_bf IS - CONSTANT c_design_name : STRING := "fn_bf"; - CONSTANT c_bf_offload : BOOLEAN := FALSE; -- Offload BF out(0) datapath to 1GbE UDP TX port - CONSTANT c_use_phy : t_c_unb_use_phy := (1, 0, 0, 0, 0, 0, 0, 1); - CONSTANT c_fw_version : t_unb_fw_version := (2, 3); -- firmware version x.y - CONSTANT c_nof_streams : NATURAL := c_eth_nof_udp_ports; - - CONSTANT c_app_led_en : BOOLEAN := TRUE; - CONSTANT c_weights_write_only : BOOLEAN := TRUE; -- When set to TRUE the M9K blocks are forced to Simple Dual Port mode. When FALSE it is True Dual Port. + CONSTANT c_bf_offload : BOOLEAN := FALSE; -- Offload BF out(0) datapath to 1GbE UDP TX port + CONSTANT c_use_phy : t_c_unb_use_phy := (1, 0, 0, 0, 0, 0, 0, 1); + CONSTANT c_fw_version : t_unb_fw_version := (2, 3); -- firmware version x.y + CONSTANT c_nof_streams : NATURAL := c_eth_nof_udp_ports; + CONSTANT c_weights_write_only : BOOLEAN := TRUE; -- When set to TRUE the M9K blocks are forced to Simple Dual Port mode. When FALSE it is True Dual Port. -- Use default RAM inti files. The RAM init file for simulation lies one ../ level further way then for synthesis - CONSTANT c_bf_weights_file_name : STRING := sel_a_b(g_sim, "../", "") & "../../../../../dsp/bf/build/data/weights"; - CONSTANT c_ss_wide_file_prefix : STRING := sel_a_b(g_sim, "../", "") & "../../../../../dsp/bf/src/hex/ss_wide"; - CONSTANT c_block_gen_file_prefix : STRING := sel_a_b(g_sim, "../", "") & "../../../../../modules/Lofar/diag/src/data/bf_in_data"; + CONSTANT c_bf_weights_file_name : STRING := sel_a_b(g_sim, "../", "") & "../../../../../dsp/bf/build/data/weights"; + CONSTANT c_ss_wide_file_prefix : STRING := sel_a_b(g_sim, "../", "") & "../../../../../dsp/bf/src/hex/ss_wide"; + CONSTANT c_block_gen_file_prefix : STRING := sel_a_b(g_sim, "../", "") & "../../../../../modules/Lofar/diag/src/data/bf_in_data"; -- BF offload CONSTANT c_hdr_nof_words : NATURAL := c_eth_total_header_nof_words; @@ -106,7 +105,6 @@ ARCHITECTURE str OF fn_bf IS SIGNAL app_led_green : STD_LOGIC := '1'; -- PIOs - SIGNAL pout_debug_wave : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); SIGNAL pout_wdi : STD_LOGIC; -- WDI override @@ -186,106 +184,95 @@ BEGIN ----------------------------------------------------------------------------- -- General control function ----------------------------------------------------------------------------- - u_ctrl : ENTITY unb_common_lib.ctrl_unb_common + u_ctrl : ENTITY unb1_board_lib.ctrl_unb1_board GENERIC MAP ( - -- General g_sim => g_sim, - g_design_name => c_design_name, + g_design_name => g_design_name, + g_design_note => g_design_note, g_stamp_date => g_stamp_date, g_stamp_time => g_stamp_time, g_stamp_svn => g_stamp_svn, g_fw_version => c_fw_version, - g_mm_clk_freq => c_unb_mm_clk_freq_50M, - g_app_led_red => c_app_led_en, - g_app_led_green => c_app_led_en, + g_mm_clk_freq => c_unb1_board_mm_clk_freq_50M, g_use_phy => c_use_phy, g_udp_offload => sel_a_b(c_bf_offload, TRUE, FALSE), + g_aux => c_unb1_board_aux, g_udp_offload_nof_streams => c_nof_streams ) PORT MAP ( - -- - -- >>> SOPC system with conduit peripheral MM bus - -- - -- System - cs_sim => cs_sim, - xo_clk => xo_clk, - xo_rst_n => xo_rst_n, - mm_clk => mm_clk, - mm_locked => mm_locked, - mm_rst => mm_rst, - - dp_rst => dp_rst, - dp_clk => dp_clk, - dp_pps => dp_pps, - dp_rst_in => dp_rst, - dp_clk_in => dp_clk, - - this_chip_id => OPEN, - this_bck_id => OPEN, - - app_led_red => app_led_red, - app_led_green => app_led_green, - - -- PIOs - pout_debug_wave => pout_debug_wave, - pout_wdi => pout_wdi, + -- Clock an reset signals + cs_sim => cs_sim, + xo_clk => xo_clk, + xo_rst => xo_rst, + xo_rst_n => xo_rst_n, - -- Manual WDI override - reg_wdi_mosi => reg_wdi_mosi, - reg_wdi_miso => reg_wdi_miso, + mm_clk => mm_clk, + mm_locked => mm_locked, + mm_rst => mm_rst, - -- system_info + dp_rst => st_rst, + dp_clk => st_clk, + dp_pps => OPEN, + dp_rst_in => st_rst, + dp_clk_in => st_clk, + + -- Toggle WDI + pout_wdi => pout_wdi, + + -- MM buses + -- . Manual WDI override + reg_wdi_mosi => reg_wdi_mosi, + reg_wdi_miso => reg_wdi_miso, + + -- . System_info 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, - - -- UniBoard I2C sensors - reg_unb_sens_mosi => reg_unb_sens_mosi, - reg_unb_sens_miso => reg_unb_sens_miso, - - -- PPSH - reg_ppsh_mosi => reg_ppsh_mosi, - reg_ppsh_miso => reg_ppsh_miso, + + -- . UniBoard I2C sensors + reg_unb_sens_mosi => reg_unb_sens_mosi, + reg_unb_sens_miso => reg_unb_sens_miso, + + -- . PPSH + reg_ppsh_mosi => reg_ppsh_mosi, + reg_ppsh_miso => reg_ppsh_miso, -- eth1g - eth1g_tse_clk => eth1g_tse_clk, - eth1g_mm_rst => eth1g_mm_rst, - eth1g_tse_mosi => eth1g_tse_mosi, - eth1g_tse_miso => eth1g_tse_miso, - eth1g_reg_mosi => eth1g_reg_mosi, - eth1g_reg_miso => eth1g_reg_miso, - eth1g_reg_interrupt => eth1g_reg_interrupt, - eth1g_ram_mosi => eth1g_ram_mosi, - eth1g_ram_miso => eth1g_ram_miso, - + eth1g_tse_clk => eth1g_tse_clk, -- 125 MHz from xo_clk PLL in SOPC system + eth1g_mm_rst => eth1g_mm_rst, + eth1g_tse_mosi => eth1g_tse_mosi, + eth1g_tse_miso => eth1g_tse_miso, + eth1g_reg_mosi => eth1g_reg_mosi, + eth1g_reg_miso => eth1g_reg_miso, + eth1g_reg_interrupt => eth1g_reg_interrupt, + eth1g_ram_mosi => eth1g_ram_mosi, + eth1g_ram_miso => eth1g_ram_miso, + -- eth1g UDP streaming ports to offload BF out udp_tx_sosi_arr => eth1g_udp_tx_sosi_arr, udp_tx_siso_arr => eth1g_udp_tx_siso_arr, - - -- - -- >>> Ctrl FPGA pins - -- - -- General - CLK => CLK, - PPS => PPS, - WDI => WDI, - INTA => INTA, - INTB => INTB, - - -- Others - VERSION => VERSION, - ID => ID, - TESTIO => TESTIO, - - -- I2C Interface to Sensors - sens_sc => sens_sc, - sens_sd => sens_sd, - - ETH_clk => ETH_clk, - ETH_SGIN => ETH_SGIN, - ETH_SGOUT => ETH_SGOUT - ); + + -- FPGA pins + -- . General + CLK => CLK, + PPS => PPS, + WDI => WDI, + INTA => INTA, + INTB => INTB, + -- . Others + VERSION => VERSION, + ID => ID, + TESTIO => TESTIO, + -- . I2C Interface to Sensors + sens_sc => sens_sc, + sens_sd => sens_sd, + -- . 1GbE Control Interface + ETH_clk => ETH_clk, + ETH_SGIN => ETH_SGIN, + ETH_SGOUT => ETH_SGOUT + ); + ----------------------------------------------------------------------------- -- MM master @@ -409,21 +396,6 @@ BEGIN bf_out_offload_tx_sosi_arr => eth1g_udp_tx_sosi_arr, bf_out_offload_tx_siso_arr => eth1g_udp_tx_siso_arr ); - - -- Debug - gen_app_led : IF c_app_led_en=TRUE GENERATE - u_toggle : ENTITY common_lib.common_toggle - PORT MAP ( - rst => dp_rst, - clk => dp_clk, - in_dat => beams_sosi_arr(0).sync, - in_val => beams_sosi_arr(0).valid, - out_dat => app_led_red - ); - - app_led_green <= beams_sosi_arr(0).valid; - END GENERATE; - END; diff --git a/applications/unb1_fn_bf/src/vhdl/unb1_mmm_fn_bf.vhd b/applications/unb1_fn_bf/src/vhdl/unb1_mmm_fn_bf.vhd new file mode 100644 index 0000000000000000000000000000000000000000..84e33f5ff39d2dcc29430aea68308d3c5e0d84a0 --- /dev/null +++ b/applications/unb1_fn_bf/src/vhdl/unb1_mmm_fn_bf.vhd @@ -0,0 +1,464 @@ +------------------------------------------------------------------------------ +-- +-- Copyright (C) 2012 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +LIBRARY IEEE, common_lib, unb_common_lib, mm_lib, tse_lib, bf_lib; +USE IEEE.STD_LOGIC_1164.ALL; +USE IEEE.NUMERIC_STD.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE unb_common_lib.unb_common_pkg.ALL; +USE unb_common_lib.unb_peripherals_pkg.ALL; +USE mm_lib.mm_file_pkg.ALL; +USE mm_lib.mm_file_unb_pkg.ALL; +USE common_lib.tb_common_mem_pkg.ALL; +USE tse_lib.tse_pkg.ALL; +USE tse_lib.tb_tse_pkg.ALL; +USE tse_lib.eth_pkg.ALL; +USE tse_lib.eth_layers_pkg.ALL; +USE bf_lib.bf_pkg.ALL; + +ENTITY mmm_fn_bf IS + GENERIC ( + g_sim : BOOLEAN := FALSE; --FALSE: use SOPC; TRUE: use mm_file I/O + g_sim_unb_nr : NATURAL := 0; + g_sim_node_nr : NATURAL := 0; + g_bf : t_c_bf := c_bf + ); + PORT ( + xo_clk : IN STD_LOGIC; + xo_rst_n : IN STD_LOGIC; + xo_rst : IN STD_LOGIC; + + mm_rst : IN STD_LOGIC; + mm_clk : OUT STD_LOGIC; + mm_locked : OUT STD_LOGIC; + + pout_wdi : OUT STD_LOGIC; + + -- Manual WDI override + reg_wdi_mosi : OUT t_mem_mosi; + reg_wdi_miso : IN t_mem_miso; + + -- system_info + reg_unb_system_info_mosi : OUT t_mem_mosi; + reg_unb_system_info_miso : IN t_mem_miso; + rom_unb_system_info_mosi : OUT t_mem_mosi; + rom_unb_system_info_miso : IN t_mem_miso; + + -- UniBoard I2C sensors + reg_unb_sens_mosi : OUT t_mem_mosi; + reg_unb_sens_miso : IN t_mem_miso; + + -- Diagnostics + reg_diagnostics_mosi : OUT t_mem_mosi; + reg_diagnostics_miso : IN t_mem_miso; + + -- Beamformer Node + -- . block generator + reg_diag_bg_mosi : OUT t_mem_mosi; + reg_diag_bg_miso : IN t_mem_miso; + ram_diag_bg_mosi : OUT t_mem_mosi; + ram_diag_bg_miso : IN t_mem_miso; + -- . beam former + ram_ss_ss_wide_mosi : OUT t_mem_mosi; + ram_ss_ss_wide_miso : IN t_mem_miso; + ram_bf_weights_mosi : OUT t_mem_mosi; + ram_bf_weights_miso : IN t_mem_miso; + ram_st_sst_bf_mosi : OUT t_mem_mosi; + ram_st_sst_bf_miso : IN t_mem_miso; + reg_st_sst_bf_mosi : OUT t_mem_mosi; + reg_st_sst_bf_miso : IN t_mem_miso; + + -- dp_offload + reg_dp_ram_from_mm_mosi : OUT t_mem_mosi; + reg_dp_ram_from_mm_miso : IN t_mem_miso; + ram_dp_ram_from_mm_mosi : OUT t_mem_mosi; + ram_dp_ram_from_mm_miso : IN t_mem_miso; + -- . Nof words to offload selection + reg_dp_split_mosi : OUT t_mem_mosi := c_mem_mosi_rst; + reg_dp_split_miso : IN t_mem_miso; + reg_dp_pkt_merge_mosi : OUT t_mem_mosi := c_mem_mosi_rst; + reg_dp_pkt_merge_miso : IN t_mem_miso; + + -- eth1g + eth1g_tse_clk : OUT STD_LOGIC; + eth1g_mm_rst : OUT STD_LOGIC; + eth1g_tse_mosi : OUT t_mem_mosi; + eth1g_tse_miso : IN t_mem_miso; + eth1g_reg_mosi : OUT t_mem_mosi; + eth1g_reg_miso : IN t_mem_miso; + eth1g_reg_interrupt : IN STD_LOGIC; + eth1g_ram_mosi : OUT t_mem_mosi; + eth1g_ram_miso : IN t_mem_miso + + ); +END mmm_fn_bf; + + +ARCHITECTURE str OF mmm_fn_bf IS + + -- Application specific constants (or generics) + CONSTANT c_bg_diag_wave_period : NATURAL := 4; + + -- Actual MM address widths, the MM data width is fixed at the default c_word_w=32 + CONSTANT c_reg_diag_bg_addr_w : NATURAL := 3; + CONSTANT c_ram_diag_bg_addr_w : NATURAL := ceil_log2(c_bg_diag_wave_period) + ceil_log2(g_bf.nof_subbands*g_bf.nof_signal_paths/g_bf.nof_input_streams)+ceil_log2(g_bf.nof_input_streams); + CONSTANT c_ram_bf_weights_addr_w : NATURAL := ceil_log2(c_bf_max_nof_bf_units*g_bf.nof_signal_paths*g_bf.nof_weights); + CONSTANT c_ram_st_sst_bf_addr_w : NATURAL := ceil_log2(c_bf_max_nof_bf_units*g_bf.stat_data_sz*g_bf.nof_weights*c_nof_complex); + CONSTANT c_reg_st_sst_bf_addr_w : NATURAL := ceil_log2(c_bf_max_nof_bf_units)*2; -- 2 bits reserved for single reg_st_sst. + CONSTANT c_ram_ss_ss_wide_addr_w : NATURAL := ceil_log2(c_bf_max_nof_bf_units*g_bf.nof_weights*g_bf.nof_signal_paths); + -- BF offload + CONSTANT c_hdr_nof_words : NATURAL := c_eth_total_header_nof_words; + CONSTANT c_dp_ram_mm_nof_words : NATURAL := c_hdr_nof_words * (c_tse_data_w/c_word_w); + CONSTANT c_dp_ram_mm_adr_w : NATURAL := ceil_log2(c_dp_ram_mm_nof_words); + + -- Simulation + CONSTANT c_mm_clk_period : TIME := 8 ns; + CONSTANT c_tse_clk_period : TIME := 8 ns; + + CONSTANT c_sim_node_type : STRING(1 TO 2):= sel_a_b(g_sim_node_nr<4, "FN", "BN"); + CONSTANT c_sim_node_nr : NATURAL := sel_a_b(c_sim_node_type="BN", g_sim_node_nr-4, g_sim_node_nr); + + SIGNAL i_mm_clk : STD_LOGIC := '1'; + SIGNAL i_tse_clk : STD_LOGIC := '1'; + + ---------------------------------------------------------------------------- + -- mm_file component + ---------------------------------------------------------------------------- + COMPONENT mm_file + GENERIC( + g_file_prefix : STRING; + g_mm_clk_period : TIME := c_mm_clk_period; + g_update_on_change : BOOLEAN := FALSE; + g_mm_rd_latency : NATURAL := 1 + ); + PORT ( + mm_rst : IN STD_LOGIC; + mm_clk : IN STD_LOGIC; + mm_master_out : OUT t_mem_mosi; + mm_master_in : IN t_mem_miso + ); + END COMPONENT; + + CONSTANT c_dut_src_mac : STD_LOGIC_VECTOR(c_eth_mac_slv'RANGE) := X"002286080001"; + SIGNAL eth_psc_access : STD_LOGIC; + + CONSTANT c_dut_control_rx_en : NATURAL := 2**c_eth_mm_reg_control_bi.rx_en; + + SIGNAL reg_ppsh_mosi : t_mem_mosi := c_mem_mosi_rst; + SIGNAL reg_ppsh_miso : t_mem_miso := c_mem_miso_rst; + + SIGNAL i_eth1g_reg_mosi : t_mem_mosi; + SIGNAL i_eth1g_reg_miso : t_mem_miso; + + SIGNAL eth1g_reg_proc_mosi : t_mem_mosi; + SIGNAL eth1g_reg_proc_miso : t_mem_miso; + + SIGNAL mm_bus_switch : STD_LOGIC; + + + +BEGIN + + mm_clk <= i_mm_clk; + eth1g_tse_clk <= i_tse_clk; + + ---------------------------------------------------------------------------- + -- MM <-> file I/O for simulation. The files are created in $UPE/sim. + ---------------------------------------------------------------------------- + gen_mm_file_io : IF g_sim = TRUE GENERATE + + i_mm_clk <= NOT i_mm_clk AFTER c_mm_clk_period/2; + mm_locked <= '0', '1' AFTER c_mm_clk_period*5; + + i_tse_clk <= NOT i_tse_clk AFTER c_tse_clk_period/2; + eth1g_mm_rst <= '1', '0' AFTER c_tse_clk_period*5; + + u_mm_file_reg_unb_system_info : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") + PORT MAP(mm_rst, i_mm_clk, reg_unb_system_info_mosi, reg_unb_system_info_miso ); + + u_mm_file_rom_unb_system_info : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") + PORT MAP(mm_rst, i_mm_clk, rom_unb_system_info_mosi, rom_unb_system_info_miso ); + + u_mm_file_reg_wdi : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") + PORT MAP(mm_rst, i_mm_clk, reg_wdi_mosi, reg_wdi_miso ); + + u_mm_file_reg_unb_sens : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_SENS") + PORT MAP(mm_rst, i_mm_clk, reg_unb_sens_mosi, reg_unb_sens_miso ); + + u_mm_file_reg_diagnostics : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAGNOSTICS") + PORT MAP(mm_rst, i_mm_clk, reg_diagnostics_mosi, reg_diagnostics_miso ); + + u_mm_file_reg_dp_ram_from_mm : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_RAM_FROM_MM") + PORT MAP(mm_rst, i_mm_clk, reg_dp_ram_from_mm_mosi, reg_dp_ram_from_mm_miso ); + + u_mm_file_ram_dp_ram_from_mm : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DP_RAM_FROM_MM") + PORT MAP(mm_rst, i_mm_clk, ram_dp_ram_from_mm_mosi, ram_dp_ram_from_mm_miso ); + +-- u_mm_file_ram_dp_ram_to_mm : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DP_RAM_TO_MM") +-- PORT MAP(mm_rst, i_mm_clk, ram_dp_ram_to_mm_mosi, ram_dp_ram_to_mm_miso ); + + u_mm_file_reg_dp_split : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_SPLIT") + PORT MAP(mm_rst, i_mm_clk, reg_dp_split_mosi, reg_dp_split_miso ); + + u_mm_file_reg_dp_pkt_merge : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_PKT_MERGE") + PORT MAP(mm_rst, i_mm_clk, reg_dp_pkt_merge_mosi, reg_dp_pkt_merge_miso ); + + u_mm_file_reg_eth : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") + PORT MAP(mm_rst, i_mm_clk, i_eth1g_reg_mosi, eth1g_reg_miso ); + + u_mm_file_ram_bf_weights : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_BF_WEIGHTS") + PORT MAP(mm_rst, i_mm_clk, ram_bf_weights_mosi, ram_bf_weights_miso ); + + u_mm_file_ram_ss_ss_wide : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_SS_SS_WIDE") + PORT MAP(mm_rst, i_mm_clk, ram_ss_ss_wide_mosi, ram_ss_ss_wide_miso ); + + u_mm_file_ram_st_sst_bf : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_ST_SST") + PORT MAP(mm_rst, i_mm_clk, ram_st_sst_bf_mosi, ram_st_sst_bf_miso ); + + u_mm_file_reg_st_sst_bf : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_ST_SST") + PORT MAP(mm_rst, i_mm_clk, reg_st_sst_bf_mosi, reg_st_sst_bf_miso ); + + u_mm_file_reg_diag_bg : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAG_BG") + PORT MAP(mm_rst, i_mm_clk, reg_diag_bg_mosi, reg_diag_bg_miso ); + + u_mm_file_ram_diag_bg : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "RAM_DIAG_BG") + PORT MAP(mm_rst, i_mm_clk, ram_diag_bg_mosi, ram_diag_bg_miso ); + + + ---------------------------------------------------------------------------- + -- 1GbE setup sequence normally performed by unb_os@NIOS + ---------------------------------------------------------------------------- + p_eth_setup : PROCESS + BEGIN + mm_bus_switch <= '1'; + + eth1g_tse_mosi.wr <= '0'; + eth1g_tse_mosi.rd <= '0'; + WAIT FOR 400 ns; + WAIT UNTIL rising_edge(i_mm_clk); + proc_tse_setup(FALSE, c_tse_tx_fifo_depth, c_tse_rx_fifo_depth, c_tse_tx_ready_latency, c_dut_src_mac, eth_psc_access, i_mm_clk, eth1g_tse_miso, eth1g_tse_mosi); + + -- Enable RX + proc_mem_mm_bus_wr(c_eth_reg_control_wi+0, c_dut_control_rx_en, i_mm_clk, eth1g_reg_miso, eth1g_reg_proc_mosi); -- control rx en + mm_bus_switch <= '0'; + + WAIT; + END PROCESS; + + p_switch : PROCESS(mm_bus_switch, eth1g_reg_proc_mosi, i_eth1g_reg_mosi) + BEGIN + IF mm_bus_switch = '1' THEN + eth1g_reg_mosi <= eth1g_reg_proc_mosi; + ELSE + eth1g_reg_mosi <= i_eth1g_reg_mosi; + END IF; + END PROCESS; + + ---------------------------------------------------------------------------- + -- Procedure that polls a sim control file that can be used to e.g. get + -- the simulation time in ns + ---------------------------------------------------------------------------- + mmf_poll_sim_ctrl_file(c_mmf_unb_file_path & "sim.ctrl", c_mmf_unb_file_path & "sim.stat"); + + END GENERATE; + + ----------------------------------------------------------------------------- + -- SOPC system + ----------------------------------------------------------------------------- + ---------------------------------------------------------------------------- + -- SOPC for synthesis + ---------------------------------------------------------------------------- + gen_sopc : IF g_sim = FALSE GENERATE + + u_sopc : ENTITY work.sopc_fn_bf + PORT MAP ( + -- 1) global signals: + clk_0 => xo_clk, -- PLL reference = 25 MHz from ETH_clk pin + reset_n => xo_rst_n, + mm_clk => i_mm_clk, -- PLL clk[0] = 125 MHz system clock that the NIOS2 and the MM bus run on + cal_clk => OPEN, -- PLL clk[1] = 40 MHz calibration clock for the IO reconfiguration + tse_clk => i_tse_clk, -- PLL clk[2] = 125 MHz dedicated clock for the 1 Gbit Ethernet unit + + -- the_altpll_0 + areset_to_the_altpll_0 => '0', + locked_from_the_altpll_0 => mm_locked, + phasedone_from_the_altpll_0 => OPEN, + + -- the_avs_eth_0 + coe_clk_export_from_the_avs_eth_0 => OPEN, + coe_reset_export_from_the_avs_eth_0 => eth1g_mm_rst, + coe_tse_address_export_from_the_avs_eth_0 => eth1g_tse_mosi.address(c_tse_byte_addr_w-1 DOWNTO 0), + coe_tse_write_export_from_the_avs_eth_0 => eth1g_tse_mosi.wr, + coe_tse_writedata_export_from_the_avs_eth_0 => eth1g_tse_mosi.wrdata(c_word_w-1 DOWNTO 0), + coe_tse_read_export_from_the_avs_eth_0 => eth1g_tse_mosi.rd, + coe_tse_readdata_export_to_the_avs_eth_0 => eth1g_tse_miso.rddata(c_word_w-1 DOWNTO 0), + coe_tse_waitrequest_export_to_the_avs_eth_0 => eth1g_tse_miso.waitrequest, + coe_reg_address_export_from_the_avs_eth_0 => eth1g_reg_mosi.address(c_eth_reg_addr_w-1 DOWNTO 0), + coe_reg_write_export_from_the_avs_eth_0 => eth1g_reg_mosi.wr, + coe_reg_writedata_export_from_the_avs_eth_0 => eth1g_reg_mosi.wrdata(c_word_w-1 DOWNTO 0), + coe_reg_read_export_from_the_avs_eth_0 => eth1g_reg_mosi.rd, + coe_reg_readdata_export_to_the_avs_eth_0 => eth1g_reg_miso.rddata(c_word_w-1 DOWNTO 0), + coe_irq_export_to_the_avs_eth_0 => eth1g_reg_interrupt, + coe_ram_address_export_from_the_avs_eth_0 => eth1g_ram_mosi.address(c_eth_ram_addr_w-1 DOWNTO 0), + coe_ram_write_export_from_the_avs_eth_0 => eth1g_ram_mosi.wr, + coe_ram_writedata_export_from_the_avs_eth_0 => eth1g_ram_mosi.wrdata(c_word_w-1 DOWNTO 0), + coe_ram_read_export_from_the_avs_eth_0 => eth1g_ram_mosi.rd, + coe_ram_readdata_export_to_the_avs_eth_0 => eth1g_ram_miso.rddata(c_word_w-1 DOWNTO 0), + + -- the_reg_unb_sens + coe_address_export_from_the_reg_unb_sens => reg_unb_sens_mosi.address(c_unb_mm_reg_default.reg_unb_sens_adr_w-1 DOWNTO 0), + coe_clk_export_from_the_reg_unb_sens => OPEN, + coe_read_export_from_the_reg_unb_sens => reg_unb_sens_mosi.rd, + coe_readdata_export_to_the_reg_unb_sens => reg_unb_sens_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_reg_unb_sens => OPEN, + coe_write_export_from_the_reg_unb_sens => reg_unb_sens_mosi.wr, + coe_writedata_export_from_the_reg_unb_sens => reg_unb_sens_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_ram_st_sst + coe_address_export_from_the_ram_st_sst => ram_st_sst_bf_mosi.address(c_ram_st_sst_bf_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_ram_st_sst => OPEN, + coe_read_export_from_the_ram_st_sst => ram_st_sst_bf_mosi.rd, + coe_readdata_export_to_the_ram_st_sst => ram_st_sst_bf_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_ram_st_sst => OPEN, + coe_write_export_from_the_ram_st_sst => ram_st_sst_bf_mosi.wr, + coe_writedata_export_from_the_ram_st_sst => ram_st_sst_bf_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_reg_st_sst + coe_address_export_from_the_reg_st_sst => reg_st_sst_bf_mosi.address(c_reg_st_sst_bf_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_reg_st_sst => OPEN, + coe_read_export_from_the_reg_st_sst => reg_st_sst_bf_mosi.rd, + coe_readdata_export_to_the_reg_st_sst => reg_st_sst_bf_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_reg_st_sst => OPEN, + coe_write_export_from_the_reg_st_sst => reg_st_sst_bf_mosi.wr, + coe_writedata_export_from_the_reg_st_sst => reg_st_sst_bf_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_ram_ss_ss_wide + coe_address_export_from_the_ram_ss_ss_wide => ram_ss_ss_wide_mosi.address(c_ram_ss_ss_wide_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_ram_ss_ss_wide => OPEN, + coe_read_export_from_the_ram_ss_ss_wide => ram_ss_ss_wide_mosi.rd, + coe_readdata_export_to_the_ram_ss_ss_wide => ram_ss_ss_wide_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_ram_ss_ss_wide => OPEN, + coe_write_export_from_the_ram_ss_ss_wide => ram_ss_ss_wide_mosi.wr, + coe_writedata_export_from_the_ram_ss_ss_wide => ram_ss_ss_wide_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_ram_bf_weights + coe_address_export_from_the_ram_bf_weights => ram_bf_weights_mosi.address(c_ram_bf_weights_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_ram_bf_weights => OPEN, + coe_read_export_from_the_ram_bf_weights => ram_bf_weights_mosi.rd, + coe_readdata_export_to_the_ram_bf_weights => ram_bf_weights_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_ram_bf_weights => OPEN, + coe_write_export_from_the_ram_bf_weights => ram_bf_weights_mosi.wr, + coe_writedata_export_from_the_ram_bf_weights => ram_bf_weights_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_reg_bg_diag_bg + coe_address_export_from_the_reg_diag_bg => reg_diag_bg_mosi.address(c_reg_diag_bg_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_reg_diag_bg => OPEN, + coe_read_export_from_the_reg_diag_bg => reg_diag_bg_mosi.rd, + coe_readdata_export_to_the_reg_diag_bg => reg_diag_bg_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_reg_diag_bg => OPEN, + coe_write_export_from_the_reg_diag_bg => reg_diag_bg_mosi.wr, + coe_writedata_export_from_the_reg_diag_bg => reg_diag_bg_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_ram_diag_bg + coe_address_export_from_the_ram_diag_bg => ram_diag_bg_mosi.address(c_ram_diag_bg_addr_w-1 DOWNTO 0), + coe_clk_export_from_the_ram_diag_bg => OPEN, + coe_read_export_from_the_ram_diag_bg => ram_diag_bg_mosi.rd, + coe_readdata_export_to_the_ram_diag_bg => ram_diag_bg_miso.rddata(c_word_w-1 DOWNTO 0), + coe_reset_export_from_the_ram_diag_bg => OPEN, + coe_write_export_from_the_ram_diag_bg => ram_diag_bg_mosi.wr, + coe_writedata_export_from_the_ram_diag_bg => ram_diag_bg_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_pio_debug_wave + out_port_from_the_pio_debug_wave => OPEN, + + -- the_pio_pps + coe_clk_export_from_the_pio_pps => OPEN, + coe_reset_export_from_the_pio_pps => OPEN, + coe_address_export_from_the_pio_pps => reg_ppsh_mosi.address(c_unb_mm_reg_default.reg_ppsh_adr_w-1), -- 1 bit address width so must use (0) instead of (0 DOWNTO 0) + coe_read_export_from_the_pio_pps => reg_ppsh_mosi.rd, + coe_readdata_export_to_the_pio_pps => reg_ppsh_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_pio_pps => reg_ppsh_mosi.wr, + coe_writedata_export_from_the_pio_pps => reg_ppsh_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_pio_system_info: actually a avs_common_mm instance + coe_clk_export_from_the_pio_system_info => OPEN, + coe_reset_export_from_the_pio_system_info => OPEN, + coe_address_export_from_the_pio_system_info => reg_unb_system_info_mosi.address(c_unb_mm_reg_default.reg_unb_system_info_adr_w-1 DOWNTO 0), + coe_read_export_from_the_pio_system_info => reg_unb_system_info_mosi.rd, + coe_readdata_export_to_the_pio_system_info => reg_unb_system_info_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_pio_system_info => reg_unb_system_info_mosi.wr, + coe_writedata_export_from_the_pio_system_info => reg_unb_system_info_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_rom_system_info + coe_clk_export_from_the_rom_system_info => OPEN, + coe_reset_export_from_the_rom_system_info => OPEN, + coe_address_export_from_the_rom_system_info => rom_unb_system_info_mosi.address(c_unb_mm_reg_default.rom_unb_system_info_adr_w-1 DOWNTO 0), + coe_read_export_from_the_rom_system_info => rom_unb_system_info_mosi.rd, + coe_readdata_export_to_the_rom_system_info => rom_unb_system_info_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_rom_system_info => rom_unb_system_info_mosi.wr, + coe_writedata_export_from_the_rom_system_info => rom_unb_system_info_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_pio_wdi + out_port_from_the_pio_wdi => pout_wdi, + + -- the_reg_wdi + coe_clk_export_from_the_reg_wdi => OPEN, + coe_reset_export_from_the_reg_wdi => OPEN, + coe_address_export_from_the_reg_wdi => reg_wdi_mosi.address(0), + coe_read_export_from_the_reg_wdi => reg_wdi_mosi.rd, + coe_readdata_export_to_the_reg_wdi => reg_wdi_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_reg_wdi => reg_wdi_mosi.wr, + coe_writedata_export_from_the_reg_wdi => reg_wdi_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_reg_dp_ram_from_mm + coe_clk_export_from_the_reg_dp_ram_from_mm => OPEN, + coe_reset_export_from_the_reg_dp_ram_from_mm => OPEN, + coe_address_export_from_the_reg_dp_ram_from_mm => reg_dp_ram_from_mm_mosi.address(0), + coe_read_export_from_the_reg_dp_ram_from_mm => reg_dp_ram_from_mm_mosi.rd, + coe_readdata_export_to_the_reg_dp_ram_from_mm => reg_dp_ram_from_mm_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_reg_dp_ram_from_mm => reg_dp_ram_from_mm_mosi.wr, + coe_writedata_export_from_the_reg_dp_ram_from_mm => reg_dp_ram_from_mm_mosi.wrdata(c_word_w-1 DOWNTO 0), + + -- the_ram_dp_ram_from_mm + coe_clk_export_from_the_ram_dp_ram_from_mm => OPEN, + coe_reset_export_from_the_ram_dp_ram_from_mm => OPEN, + coe_address_export_from_the_ram_dp_ram_from_mm => ram_dp_ram_from_mm_mosi.address(c_dp_ram_mm_adr_w-1 DOWNTO 0), + coe_read_export_from_the_ram_dp_ram_from_mm => ram_dp_ram_from_mm_mosi.rd, + coe_readdata_export_to_the_ram_dp_ram_from_mm => ram_dp_ram_from_mm_miso.rddata(c_word_w-1 DOWNTO 0), + coe_write_export_from_the_ram_dp_ram_from_mm => ram_dp_ram_from_mm_mosi.wr, + coe_writedata_export_from_the_ram_dp_ram_from_mm => ram_dp_ram_from_mm_mosi.wrdata(c_word_w-1 DOWNTO 0) + ); + END GENERATE; +END; + + + + + + + + + + + + +