Compiling, intermediate version with Part 2 changes for MBSr2, not tested

This commit is contained in:
matt 2020-07-22 23:29:24 +07:00
parent 5cc12bdf6d
commit ef784c054e
4 changed files with 415 additions and 343 deletions

View File

@ -1,6 +1,6 @@
library ieee; library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_1164.all;
--use ieee.numeric_std.all;
------------------------------------------------------------ ------------------------------------------------------------
entity odio_repeater is entity odio_repeater is
generic ( generic (

358
sim_mux.vhd Normal file
View File

@ -0,0 +1,358 @@
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;

View File

@ -4,6 +4,24 @@ use ieee.numeric_std.all;
package sim_switcher_pkg is package sim_switcher_pkg is
type arr_modnum_t is array (natural range <>) of natural range 0 to 15;
component 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 component sim_mux;
component i2c_slave is component i2c_slave is
generic ( generic (
SLAVE_ADDR : std_logic_vector(6 downto 0) SLAVE_ADDR : std_logic_vector(6 downto 0)

View File

@ -30,6 +30,8 @@ entity sim_switcher_top is
cpu_trstn_o : out std_logic; cpu_trstn_o : out std_logic;
cpu_jtag_rstn_o : out std_logic; cpu_jtag_rstn_o : out std_logic;
-- FPGA interrupt to CPU
fpga_int_o : out std_logic; -- FPGA_INTn_V18, PIN_F12, active high
-- I2C slave interface -- I2C slave interface
i2c_scl_io : inout std_logic; i2c_scl_io : inout std_logic;
i2c_sda_io : inout std_logic; i2c_sda_io : inout std_logic;
@ -188,26 +190,33 @@ architecture rtl of sim_switcher_top is
signal state: arr_state_t(0 to 7); signal state: arr_state_t(0 to 7);
-- SIM-MODEM switching register -- SIM-MODEM switching register
type arr_modnum_t is array (natural range <>) of natural range 0 to 15;
signal reg_sim_modemnum: arr_modnum_t(0 to 7); signal reg_sim_modemnum: arr_modnum_t(0 to 7);
begin begin
-- Interrupt generation
fpga_int_o <= not pse_intn;
-- Currently unused SIM data lines for VirtualSIM
s_sim_data_i(15 downto 8) <= (others => '1'); s_sim_data_i(15 downto 8) <= (others => '1');
sdb_sim_data_i(15 downto 8) <= (others => '1'); sdb_sim_data_i(15 downto 8) <= (others => '1');
-- Fill SIM detect register
reg_sim_det(7 downto 0) <= sim_detect_i; reg_sim_det(7 downto 0) <= sim_detect_i;
reg_sim_det(15 downto 8) <= (others => '0'); reg_sim_det(15 downto 8) <= (others => '0');
--reg_sim_change_irq <= (others => '0'); -- Drive modem LEDs and Power
mod_led_o <= reg_mod_led; mod_led_o <= reg_mod_led;
mod_pwr_o <= reg_mod_pwr; mod_pwr_o <= reg_mod_pwr;
-- Drive PCI-e RSTn and WAKEn signals
mod_rstn_o <= reg_pcie_rstn; mod_rstn_o <= reg_pcie_rstn;
reg_pcie_waken <= mod_pciehstwake_i; reg_pcie_waken <= mod_pciehstwake_i;
-- Drive M.2 wake host signals
reg_mod_hstwake <= mod_wake_host_i; reg_mod_hstwake <= mod_wake_host_i;
-- Drive FAN control signals
fan_o <= reg_fan_ctl; fan_o <= reg_fan_ctl;
-- PSE init -- PSE init
@ -441,8 +450,8 @@ begin
i2c_data_to_master <= x"18"; i2c_data_to_master <= x"18";
i2c_slv_state <= wait_while_sent; i2c_slv_state <= wait_while_sent;
when x"11" => -- Read SW Version byte (v1.0=0x18, v1.1=0x19, v2.0=0x28) when x"11" => -- Read SW Version byte (v1.0=0x18 MBCr1, v1.1=0x19 MBSr1, v2.0=0x28 MBSr2)
i2c_data_to_master <= x"20"; i2c_data_to_master <= x"28";
i2c_slv_state <= wait_while_sent; i2c_slv_state <= wait_while_sent;
when x"12" => -- Read SIM board model regiser when x"12" => -- Read SIM board model regiser
@ -497,16 +506,16 @@ begin
i2c_data_to_master <= reg_pcie_waken(7 downto 5)&"00000"; i2c_data_to_master <= reg_pcie_waken(7 downto 5)&"00000";
i2c_slv_state <= wait_while_sent; i2c_slv_state <= wait_while_sent;
when x"0A" => -- Read SIMs detect register (LSB) when x"0A" => -- Read SIM detect register (LSB)
i2c_data_to_master <= reg_sim_det(7 downto 0); i2c_data_to_master <= reg_sim_det(7 downto 0);
i2c_slv_state <= wait_while_sent; i2c_slv_state <= wait_while_sent;
-- when x"0B" => -- Read SIMs detect register (MSB) -- when x"0B" => -- Read SIM detect register (MSB)
-- i2c_data_to_master <= reg_sim_det(15 downto 8); -- i2c_data_to_master <= reg_sim_det(15 downto 8);
-- i2c_slv_state <= wait_while_sent; -- i2c_slv_state <= wait_while_sent;
when x"0C" => -- Read SIMs power register (LSB) when x"0C" => -- Read SIM power register (LSB)
i2c_data_to_master <= reg_sim_pwr(7 downto 0); i2c_data_to_master <= reg_sim_pwr(7 downto 0);
i2c_slv_state <= wait_while_sent; i2c_slv_state <= wait_while_sent;
-- when x"0D" => -- Read SIMs power register (MSB) -- when x"0D" => -- Read SIM power register (MSB)
-- i2c_data_to_master <= reg_sim_pwr(15 downto 8); -- i2c_data_to_master <= reg_sim_pwr(15 downto 8);
-- i2c_slv_state <= wait_while_sent; -- i2c_slv_state <= wait_while_sent;
@ -657,196 +666,11 @@ begin
end if; end if;
end process i2c_slv_process; end process i2c_slv_process;
------------------------------- --------------------------
--- SIM card emulation test --- --- SIM card switching ---
------------------------------- --------------------------
-- Switch RST line 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 -- Power on SIM card according to the reg_sim_pwr register
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';
-- Route one-way signals from mod to SIM
sim_pwron_o <= reg_sim_pwr(7 downto 0); sim_pwron_o <= reg_sim_pwr(7 downto 0);
-- Bidir sinals routing -- Bidir sinals routing
@ -877,153 +701,25 @@ begin
signal_in => s_sim_data_i(i), signal_in => s_sim_data_i(i),
signal_out => sdb_sim_data_i(i) signal_out => sdb_sim_data_i(i)
); );
end generate gen_datalines; end generate gen_datalines;
sw_mod_data_i(0) <= sdb_mod_data_i(0) when reg_sim_modemnum(0) = 0 -- Actual SIM/MODEM signal muxing
else sdb_mod_data_i(1) when reg_sim_modemnum(0) = 1 sim_muxing : sim_mux
else sdb_mod_data_i(2) when reg_sim_modemnum(0) = 2 port map (
else sdb_mod_data_i(3) when reg_sim_modemnum(0) = 3 reg_sim_modemnum => reg_sim_modemnum,
else sdb_mod_data_i(4) when reg_sim_modemnum(0) = 4 sim_rst_o => sim_rst_o,
else sdb_mod_data_i(5) when reg_sim_modemnum(0) = 5 mod_simrst_i => mod_simrst_i,
else sdb_mod_data_i(6) when reg_sim_modemnum(0) = 6 sim_clk_o => sim_clk_o,
else sdb_mod_data_i(7) when reg_sim_modemnum(0) = 7 mod_clk_i => mod_clk_i,
else '1'; mod_detect_o => mod_detect_o,
sw_mod_data_i(1) <= sdb_mod_data_i(0) when reg_sim_modemnum(1) = 0 sim_detect_i => sim_detect_i,
else sdb_mod_data_i(1) when reg_sim_modemnum(1) = 1 sw_mod_data_i => sw_mod_data_i, -- For switched tri-state buffer there are input and output part of
else sdb_mod_data_i(2) when reg_sim_modemnum(1) = 2 mod_data_i => sdb_mod_data_i, -- the lines which are switched transparently, thus ports
else sdb_mod_data_i(3) when reg_sim_modemnum(1) = 3 mod_data_o => s_mod_data_o, -- sw_mod_data_i is actual output and sw_mod_data_o is
else sdb_mod_data_i(4) when reg_sim_modemnum(1) = 4 sw_mod_data_o => sw_mod_data_o -- actual input. Please, don't be confused by conflicting name.
else sdb_mod_data_i(5) when reg_sim_modemnum(1) = 5 );
else sdb_mod_data_i(6) when reg_sim_modemnum(1) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(1) = 7
else '1';
sw_mod_data_i(2) <= sdb_mod_data_i(0) when reg_sim_modemnum(2) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(2) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(2) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(2) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(2) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(2) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(2) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(2) = 7
else '1';
sw_mod_data_i(3) <= sdb_mod_data_i(0) when reg_sim_modemnum(3) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(3) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(3) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(3) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(3) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(3) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(3) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(3) = 7
else '1';
sw_mod_data_i(4) <= sdb_mod_data_i(0) when reg_sim_modemnum(4) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(4) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(4) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(4) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(4) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(4) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(4) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(4) = 7
else '1';
sw_mod_data_i(5) <= sdb_mod_data_i(0) when reg_sim_modemnum(5) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(5) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(5) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(5) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(5) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(5) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(5) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(5) = 7
else '1';
sw_mod_data_i(6) <= sdb_mod_data_i(0) when reg_sim_modemnum(6) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(6) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(6) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(6) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(6) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(6) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(6) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(6) = 7
else '1';
sw_mod_data_i(7) <= sdb_mod_data_i(0) when reg_sim_modemnum(7) = 0
else sdb_mod_data_i(1) when reg_sim_modemnum(7) = 1
else sdb_mod_data_i(2) when reg_sim_modemnum(7) = 2
else sdb_mod_data_i(3) when reg_sim_modemnum(7) = 3
else sdb_mod_data_i(4) when reg_sim_modemnum(7) = 4
else sdb_mod_data_i(5) when reg_sim_modemnum(7) = 5
else sdb_mod_data_i(6) when reg_sim_modemnum(7) = 6
else sdb_mod_data_i(7) when reg_sim_modemnum(7) = 7
else '1';
s_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';
s_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';
s_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';
s_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';
s_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';
s_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';
s_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';
s_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';
------------------ ------------------
-- SIM repeater -- -- SIM repeater --