mmv5_FirmwareMS/sim_mux.vhd

359 lines
18 KiB
VHDL

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;