library ieee; use ieee.std_logic_1164.all; use work.sim_switcher_pkg.all; ------------------------------------------------------------ entity sim_mux is port ( reg_sim_modemnum : arr_modnum_t(0 to 7); sim_rst_o : out std_logic_vector(7 downto 0); mod_simrst_i : in std_logic_vector(7 downto 0); sim_clk_o : out std_logic_vector(7 downto 0); mod_clk_i : in std_logic_vector(7 downto 0); mod_detect_o : out std_logic_vector(3 downto 0); sim_detect_i : in std_logic_vector(7 downto 0); sw_mod_data_i : out std_logic_vector(7 downto 0); -- For switched tri-state buffer there are input and output part of mod_data_i : in std_logic_vector(7 downto 0); -- the lines which are switched transparently, thus ports mod_data_o : out std_logic_vector(7 downto 0); -- sw_mod_data_i is actual output and sw_mod_data_o is sw_mod_data_o : in std_logic_vector(7 downto 0) -- actual input. Please, don't be confused. ); end entity sim_mux; ------------------------------------------------------------ architecture arch of sim_mux is begin -- Switch lines of SIM according to connected MODEM sim_rst_o(0) <= mod_simrst_i(0) when reg_sim_modemnum(0) = 0 else mod_simrst_i(1) when reg_sim_modemnum(0) = 1 else mod_simrst_i(2) when reg_sim_modemnum(0) = 2 else mod_simrst_i(3) when reg_sim_modemnum(0) = 3 else mod_simrst_i(4) when reg_sim_modemnum(0) = 4 else mod_simrst_i(5) when reg_sim_modemnum(0) = 5 else mod_simrst_i(6) when reg_sim_modemnum(0) = 6 else mod_simrst_i(7) when reg_sim_modemnum(0) = 7 else 'Z'; sim_rst_o(1) <= mod_simrst_i(0) when reg_sim_modemnum(1) = 0 else mod_simrst_i(1) when reg_sim_modemnum(1) = 1 else mod_simrst_i(2) when reg_sim_modemnum(1) = 2 else mod_simrst_i(3) when reg_sim_modemnum(1) = 3 else mod_simrst_i(4) when reg_sim_modemnum(1) = 4 else mod_simrst_i(5) when reg_sim_modemnum(1) = 5 else mod_simrst_i(6) when reg_sim_modemnum(1) = 6 else mod_simrst_i(7) when reg_sim_modemnum(1) = 7 else 'Z'; sim_rst_o(2) <= mod_simrst_i(0) when reg_sim_modemnum(2) = 0 else mod_simrst_i(1) when reg_sim_modemnum(2) = 1 else mod_simrst_i(2) when reg_sim_modemnum(2) = 2 else mod_simrst_i(3) when reg_sim_modemnum(2) = 3 else mod_simrst_i(4) when reg_sim_modemnum(2) = 4 else mod_simrst_i(5) when reg_sim_modemnum(2) = 5 else mod_simrst_i(6) when reg_sim_modemnum(2) = 6 else mod_simrst_i(7) when reg_sim_modemnum(2) = 7 else 'Z'; sim_rst_o(3) <= mod_simrst_i(0) when reg_sim_modemnum(3) = 0 else mod_simrst_i(1) when reg_sim_modemnum(3) = 1 else mod_simrst_i(2) when reg_sim_modemnum(3) = 2 else mod_simrst_i(3) when reg_sim_modemnum(3) = 3 else mod_simrst_i(4) when reg_sim_modemnum(3) = 4 else mod_simrst_i(5) when reg_sim_modemnum(3) = 5 else mod_simrst_i(6) when reg_sim_modemnum(3) = 6 else mod_simrst_i(7) when reg_sim_modemnum(3) = 7 else 'Z'; sim_rst_o(4) <= mod_simrst_i(0) when reg_sim_modemnum(4) = 0 else mod_simrst_i(1) when reg_sim_modemnum(4) = 1 else mod_simrst_i(2) when reg_sim_modemnum(4) = 2 else mod_simrst_i(3) when reg_sim_modemnum(4) = 3 else mod_simrst_i(4) when reg_sim_modemnum(4) = 4 else mod_simrst_i(5) when reg_sim_modemnum(4) = 5 else mod_simrst_i(6) when reg_sim_modemnum(4) = 6 else mod_simrst_i(7) when reg_sim_modemnum(4) = 7 else 'Z'; sim_rst_o(5) <= mod_simrst_i(0) when reg_sim_modemnum(5) = 0 else mod_simrst_i(1) when reg_sim_modemnum(5) = 1 else mod_simrst_i(2) when reg_sim_modemnum(5) = 2 else mod_simrst_i(3) when reg_sim_modemnum(5) = 3 else mod_simrst_i(4) when reg_sim_modemnum(5) = 4 else mod_simrst_i(5) when reg_sim_modemnum(5) = 5 else mod_simrst_i(6) when reg_sim_modemnum(5) = 6 else mod_simrst_i(7) when reg_sim_modemnum(5) = 7 else 'Z'; sim_rst_o(6) <= mod_simrst_i(0) when reg_sim_modemnum(6) = 0 else mod_simrst_i(1) when reg_sim_modemnum(6) = 1 else mod_simrst_i(2) when reg_sim_modemnum(6) = 2 else mod_simrst_i(3) when reg_sim_modemnum(6) = 3 else mod_simrst_i(4) when reg_sim_modemnum(6) = 4 else mod_simrst_i(5) when reg_sim_modemnum(6) = 5 else mod_simrst_i(6) when reg_sim_modemnum(6) = 6 else mod_simrst_i(7) when reg_sim_modemnum(6) = 7 else 'Z'; sim_rst_o(7) <= mod_simrst_i(0) when reg_sim_modemnum(7) = 0 else mod_simrst_i(1) when reg_sim_modemnum(7) = 1 else mod_simrst_i(2) when reg_sim_modemnum(7) = 2 else mod_simrst_i(3) when reg_sim_modemnum(7) = 3 else mod_simrst_i(4) when reg_sim_modemnum(7) = 4 else mod_simrst_i(5) when reg_sim_modemnum(7) = 5 else mod_simrst_i(6) when reg_sim_modemnum(7) = 6 else mod_simrst_i(7) when reg_sim_modemnum(7) = 7 else 'Z'; -- Switch CLK line of SIM according to connected MODEM sim_clk_o(0) <= mod_clk_i(0) when reg_sim_modemnum(0) = 0 else mod_clk_i(1) when reg_sim_modemnum(0) = 1 else mod_clk_i(2) when reg_sim_modemnum(0) = 2 else mod_clk_i(3) when reg_sim_modemnum(0) = 3 else mod_clk_i(4) when reg_sim_modemnum(0) = 4 else mod_clk_i(5) when reg_sim_modemnum(0) = 5 else mod_clk_i(6) when reg_sim_modemnum(0) = 6 else mod_clk_i(7) when reg_sim_modemnum(0) = 7 else 'Z'; sim_clk_o(1) <= mod_clk_i(0) when reg_sim_modemnum(1) = 0 else mod_clk_i(1) when reg_sim_modemnum(1) = 1 else mod_clk_i(2) when reg_sim_modemnum(1) = 2 else mod_clk_i(3) when reg_sim_modemnum(1) = 3 else mod_clk_i(4) when reg_sim_modemnum(1) = 4 else mod_clk_i(5) when reg_sim_modemnum(1) = 5 else mod_clk_i(6) when reg_sim_modemnum(1) = 6 else mod_clk_i(7) when reg_sim_modemnum(1) = 7 else 'Z'; sim_clk_o(2) <= mod_clk_i(0) when reg_sim_modemnum(2) = 0 else mod_clk_i(1) when reg_sim_modemnum(2) = 1 else mod_clk_i(2) when reg_sim_modemnum(2) = 2 else mod_clk_i(3) when reg_sim_modemnum(2) = 3 else mod_clk_i(4) when reg_sim_modemnum(2) = 4 else mod_clk_i(5) when reg_sim_modemnum(2) = 5 else mod_clk_i(6) when reg_sim_modemnum(2) = 6 else mod_clk_i(7) when reg_sim_modemnum(2) = 7 else 'Z'; sim_clk_o(3) <= mod_clk_i(0) when reg_sim_modemnum(3) = 0 else mod_clk_i(1) when reg_sim_modemnum(3) = 1 else mod_clk_i(2) when reg_sim_modemnum(3) = 2 else mod_clk_i(3) when reg_sim_modemnum(3) = 3 else mod_clk_i(4) when reg_sim_modemnum(3) = 4 else mod_clk_i(5) when reg_sim_modemnum(3) = 5 else mod_clk_i(6) when reg_sim_modemnum(3) = 6 else mod_clk_i(7) when reg_sim_modemnum(3) = 7 else 'Z'; sim_clk_o(4) <= mod_clk_i(0) when reg_sim_modemnum(4) = 0 else mod_clk_i(1) when reg_sim_modemnum(4) = 1 else mod_clk_i(2) when reg_sim_modemnum(4) = 2 else mod_clk_i(3) when reg_sim_modemnum(4) = 3 else mod_clk_i(4) when reg_sim_modemnum(4) = 4 else mod_clk_i(5) when reg_sim_modemnum(4) = 5 else mod_clk_i(6) when reg_sim_modemnum(4) = 6 else mod_clk_i(7) when reg_sim_modemnum(4) = 7 else 'Z'; sim_clk_o(5) <= mod_clk_i(0) when reg_sim_modemnum(5) = 0 else mod_clk_i(1) when reg_sim_modemnum(5) = 1 else mod_clk_i(2) when reg_sim_modemnum(5) = 2 else mod_clk_i(3) when reg_sim_modemnum(5) = 3 else mod_clk_i(4) when reg_sim_modemnum(5) = 4 else mod_clk_i(5) when reg_sim_modemnum(5) = 5 else mod_clk_i(6) when reg_sim_modemnum(5) = 6 else mod_clk_i(7) when reg_sim_modemnum(5) = 7 else 'Z'; sim_clk_o(6) <= mod_clk_i(0) when reg_sim_modemnum(6) = 0 else mod_clk_i(1) when reg_sim_modemnum(6) = 1 else mod_clk_i(2) when reg_sim_modemnum(6) = 2 else mod_clk_i(3) when reg_sim_modemnum(6) = 3 else mod_clk_i(4) when reg_sim_modemnum(6) = 4 else mod_clk_i(5) when reg_sim_modemnum(6) = 5 else mod_clk_i(6) when reg_sim_modemnum(6) = 6 else mod_clk_i(7) when reg_sim_modemnum(6) = 7 else 'Z'; sim_clk_o(7) <= mod_clk_i(0) when reg_sim_modemnum(7) = 0 else mod_clk_i(1) when reg_sim_modemnum(7) = 1 else mod_clk_i(2) when reg_sim_modemnum(7) = 2 else mod_clk_i(3) when reg_sim_modemnum(7) = 3 else mod_clk_i(4) when reg_sim_modemnum(7) = 4 else mod_clk_i(5) when reg_sim_modemnum(7) = 5 else mod_clk_i(6) when reg_sim_modemnum(7) = 6 else mod_clk_i(7) when reg_sim_modemnum(7) = 7 else 'Z'; -- Switch SIM DETECT line of SIM according to connected MODEM, mod_detect_o(0) <= sim_detect_i(0) when reg_sim_modemnum(0) = 0 else sim_detect_i(1) when reg_sim_modemnum(1) = 0 else sim_detect_i(2) when reg_sim_modemnum(2) = 0 else sim_detect_i(3) when reg_sim_modemnum(3) = 0 else sim_detect_i(4) when reg_sim_modemnum(4) = 0 else sim_detect_i(5) when reg_sim_modemnum(5) = 0 else sim_detect_i(6) when reg_sim_modemnum(6) = 0 else sim_detect_i(7) when reg_sim_modemnum(7) = 0 else 'Z'; mod_detect_o(1) <= sim_detect_i(0) when reg_sim_modemnum(0) = 1 else sim_detect_i(1) when reg_sim_modemnum(1) = 1 else sim_detect_i(2) when reg_sim_modemnum(2) = 1 else sim_detect_i(3) when reg_sim_modemnum(3) = 1 else sim_detect_i(4) when reg_sim_modemnum(4) = 1 else sim_detect_i(5) when reg_sim_modemnum(5) = 1 else sim_detect_i(6) when reg_sim_modemnum(6) = 1 else sim_detect_i(7) when reg_sim_modemnum(7) = 1 else 'Z'; mod_detect_o(2) <= sim_detect_i(0) when reg_sim_modemnum(0) = 2 else sim_detect_i(1) when reg_sim_modemnum(1) = 2 else sim_detect_i(2) when reg_sim_modemnum(2) = 2 else sim_detect_i(3) when reg_sim_modemnum(3) = 2 else sim_detect_i(4) when reg_sim_modemnum(4) = 2 else sim_detect_i(5) when reg_sim_modemnum(5) = 2 else sim_detect_i(6) when reg_sim_modemnum(6) = 2 else sim_detect_i(7) when reg_sim_modemnum(7) = 2 else 'Z'; mod_detect_o(3) <= sim_detect_i(0) when reg_sim_modemnum(0) = 3 else sim_detect_i(1) when reg_sim_modemnum(1) = 3 else sim_detect_i(2) when reg_sim_modemnum(2) = 3 else sim_detect_i(3) when reg_sim_modemnum(3) = 3 else sim_detect_i(4) when reg_sim_modemnum(4) = 3 else sim_detect_i(5) when reg_sim_modemnum(5) = 3 else sim_detect_i(6) when reg_sim_modemnum(6) = 3 else sim_detect_i(7) when reg_sim_modemnum(7) = 3 else 'Z'; sw_mod_data_i(0) <= mod_data_i(0) when reg_sim_modemnum(0) = 0 else mod_data_i(1) when reg_sim_modemnum(0) = 1 else mod_data_i(2) when reg_sim_modemnum(0) = 2 else mod_data_i(3) when reg_sim_modemnum(0) = 3 else mod_data_i(4) when reg_sim_modemnum(0) = 4 else mod_data_i(5) when reg_sim_modemnum(0) = 5 else mod_data_i(6) when reg_sim_modemnum(0) = 6 else mod_data_i(7) when reg_sim_modemnum(0) = 7 else '1'; sw_mod_data_i(1) <= mod_data_i(0) when reg_sim_modemnum(1) = 0 else mod_data_i(1) when reg_sim_modemnum(1) = 1 else mod_data_i(2) when reg_sim_modemnum(1) = 2 else mod_data_i(3) when reg_sim_modemnum(1) = 3 else mod_data_i(4) when reg_sim_modemnum(1) = 4 else mod_data_i(5) when reg_sim_modemnum(1) = 5 else mod_data_i(6) when reg_sim_modemnum(1) = 6 else mod_data_i(7) when reg_sim_modemnum(1) = 7 else '1'; sw_mod_data_i(2) <= mod_data_i(0) when reg_sim_modemnum(2) = 0 else mod_data_i(1) when reg_sim_modemnum(2) = 1 else mod_data_i(2) when reg_sim_modemnum(2) = 2 else mod_data_i(3) when reg_sim_modemnum(2) = 3 else mod_data_i(4) when reg_sim_modemnum(2) = 4 else mod_data_i(5) when reg_sim_modemnum(2) = 5 else mod_data_i(6) when reg_sim_modemnum(2) = 6 else mod_data_i(7) when reg_sim_modemnum(2) = 7 else '1'; sw_mod_data_i(3) <= mod_data_i(0) when reg_sim_modemnum(3) = 0 else mod_data_i(1) when reg_sim_modemnum(3) = 1 else mod_data_i(2) when reg_sim_modemnum(3) = 2 else mod_data_i(3) when reg_sim_modemnum(3) = 3 else mod_data_i(4) when reg_sim_modemnum(3) = 4 else mod_data_i(5) when reg_sim_modemnum(3) = 5 else mod_data_i(6) when reg_sim_modemnum(3) = 6 else mod_data_i(7) when reg_sim_modemnum(3) = 7 else '1'; sw_mod_data_i(4) <= mod_data_i(0) when reg_sim_modemnum(4) = 0 else mod_data_i(1) when reg_sim_modemnum(4) = 1 else mod_data_i(2) when reg_sim_modemnum(4) = 2 else mod_data_i(3) when reg_sim_modemnum(4) = 3 else mod_data_i(4) when reg_sim_modemnum(4) = 4 else mod_data_i(5) when reg_sim_modemnum(4) = 5 else mod_data_i(6) when reg_sim_modemnum(4) = 6 else mod_data_i(7) when reg_sim_modemnum(4) = 7 else '1'; sw_mod_data_i(5) <= mod_data_i(0) when reg_sim_modemnum(5) = 0 else mod_data_i(1) when reg_sim_modemnum(5) = 1 else mod_data_i(2) when reg_sim_modemnum(5) = 2 else mod_data_i(3) when reg_sim_modemnum(5) = 3 else mod_data_i(4) when reg_sim_modemnum(5) = 4 else mod_data_i(5) when reg_sim_modemnum(5) = 5 else mod_data_i(6) when reg_sim_modemnum(5) = 6 else mod_data_i(7) when reg_sim_modemnum(5) = 7 else '1'; sw_mod_data_i(6) <= mod_data_i(0) when reg_sim_modemnum(6) = 0 else mod_data_i(1) when reg_sim_modemnum(6) = 1 else mod_data_i(2) when reg_sim_modemnum(6) = 2 else mod_data_i(3) when reg_sim_modemnum(6) = 3 else mod_data_i(4) when reg_sim_modemnum(6) = 4 else mod_data_i(5) when reg_sim_modemnum(6) = 5 else mod_data_i(6) when reg_sim_modemnum(6) = 6 else mod_data_i(7) when reg_sim_modemnum(6) = 7 else '1'; sw_mod_data_i(7) <= mod_data_i(0) when reg_sim_modemnum(7) = 0 else mod_data_i(1) when reg_sim_modemnum(7) = 1 else mod_data_i(2) when reg_sim_modemnum(7) = 2 else mod_data_i(3) when reg_sim_modemnum(7) = 3 else mod_data_i(4) when reg_sim_modemnum(7) = 4 else mod_data_i(5) when reg_sim_modemnum(7) = 5 else mod_data_i(6) when reg_sim_modemnum(7) = 6 else mod_data_i(7) when reg_sim_modemnum(7) = 7 else '1'; mod_data_o(0) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 0 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 0 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 0 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 0 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 0 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 0 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 0 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 0 else 'Z'; mod_data_o(1) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 1 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 1 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 1 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 1 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 1 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 1 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 1 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 1 else 'Z'; mod_data_o(2) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 2 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 2 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 2 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 2 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 2 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 2 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 2 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 2 else 'Z'; mod_data_o(3) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 3 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 3 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 3 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 3 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 3 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 3 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 3 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 3 else 'Z'; mod_data_o(4) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 4 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 4 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 4 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 4 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 4 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 4 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 4 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 4 else 'Z'; mod_data_o(5) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 5 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 5 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 5 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 5 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 5 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 5 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 5 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 5 else 'Z'; mod_data_o(6) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 6 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 6 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 6 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 6 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 6 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 6 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 6 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 6 else 'Z'; mod_data_o(7) <= sw_mod_data_o(0) when reg_sim_modemnum(0) = 7 else sw_mod_data_o(1) when reg_sim_modemnum(1) = 7 else sw_mod_data_o(2) when reg_sim_modemnum(2) = 7 else sw_mod_data_o(3) when reg_sim_modemnum(3) = 7 else sw_mod_data_o(4) when reg_sim_modemnum(4) = 7 else sw_mod_data_o(5) when reg_sim_modemnum(5) = 7 else sw_mod_data_o(6) when reg_sim_modemnum(6) = 7 else sw_mod_data_o(7) when reg_sim_modemnum(7) = 7 else 'Z'; end architecture arch;