From ef784c054eab4e8ec182f0bde4a373528e38f7a5 Mon Sep 17 00:00:00 2001 From: matt Date: Wed, 22 Jul 2020 23:29:24 +0700 Subject: [PATCH] Compiling, intermediate version with Part 2 changes for MBSr2, not tested --- odio_repeater.vhd | 2 +- sim_mux.vhd | 358 ++++++++++++++++++++++++++++++++++++++++ sim_switcher_pkg.vhd | 18 ++ sim_switcher_top.vhd | 380 +++++-------------------------------------- 4 files changed, 415 insertions(+), 343 deletions(-) create mode 100644 sim_mux.vhd diff --git a/odio_repeater.vhd b/odio_repeater.vhd index bac38e5..fd791d1 100644 --- a/odio_repeater.vhd +++ b/odio_repeater.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; ---use ieee.numeric_std.all; + ------------------------------------------------------------ entity odio_repeater is generic ( diff --git a/sim_mux.vhd b/sim_mux.vhd new file mode 100644 index 0000000..510b29a --- /dev/null +++ b/sim_mux.vhd @@ -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; diff --git a/sim_switcher_pkg.vhd b/sim_switcher_pkg.vhd index f39d377..121e009 100644 --- a/sim_switcher_pkg.vhd +++ b/sim_switcher_pkg.vhd @@ -4,6 +4,24 @@ use ieee.numeric_std.all; 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 generic ( SLAVE_ADDR : std_logic_vector(6 downto 0) diff --git a/sim_switcher_top.vhd b/sim_switcher_top.vhd index d45a31f..6df109b 100644 --- a/sim_switcher_top.vhd +++ b/sim_switcher_top.vhd @@ -30,6 +30,8 @@ entity sim_switcher_top is cpu_trstn_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_scl_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); -- 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); 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'); 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(15 downto 8) <= (others => '0'); - --reg_sim_change_irq <= (others => '0'); - + -- Drive modem LEDs and Power mod_led_o <= reg_mod_led; mod_pwr_o <= reg_mod_pwr; + -- Drive PCI-e RSTn and WAKEn signals mod_rstn_o <= reg_pcie_rstn; reg_pcie_waken <= mod_pciehstwake_i; + -- Drive M.2 wake host signals reg_mod_hstwake <= mod_wake_host_i; + -- Drive FAN control signals fan_o <= reg_fan_ctl; -- PSE init @@ -441,8 +450,8 @@ begin i2c_data_to_master <= x"18"; i2c_slv_state <= wait_while_sent; - when x"11" => -- Read SW Version byte (v1.0=0x18, v1.1=0x19, v2.0=0x28) - i2c_data_to_master <= x"20"; + when x"11" => -- Read SW Version byte (v1.0=0x18 MBCr1, v1.1=0x19 MBSr1, v2.0=0x28 MBSr2) + i2c_data_to_master <= x"28"; i2c_slv_state <= wait_while_sent; 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_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_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_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_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_slv_state <= wait_while_sent; @@ -657,196 +666,11 @@ begin end if; end process i2c_slv_process; -------------------------------- ---- SIM card emulation test --- -------------------------------- - -- 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'; +-------------------------- +--- SIM card switching --- +-------------------------- - -- 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'; - - -- Route one-way signals from mod to SIM + -- Power on SIM card according to the reg_sim_pwr register sim_pwron_o <= reg_sim_pwr(7 downto 0); -- Bidir sinals routing @@ -877,153 +701,25 @@ begin signal_in => s_sim_data_i(i), signal_out => sdb_sim_data_i(i) ); + end generate gen_datalines; - sw_mod_data_i(0) <= sdb_mod_data_i(0) when reg_sim_modemnum(0) = 0 - else sdb_mod_data_i(1) when reg_sim_modemnum(0) = 1 - else sdb_mod_data_i(2) when reg_sim_modemnum(0) = 2 - else sdb_mod_data_i(3) when reg_sim_modemnum(0) = 3 - else sdb_mod_data_i(4) when reg_sim_modemnum(0) = 4 - else sdb_mod_data_i(5) when reg_sim_modemnum(0) = 5 - else sdb_mod_data_i(6) when reg_sim_modemnum(0) = 6 - else sdb_mod_data_i(7) when reg_sim_modemnum(0) = 7 - else '1'; - sw_mod_data_i(1) <= sdb_mod_data_i(0) when reg_sim_modemnum(1) = 0 - else sdb_mod_data_i(1) when reg_sim_modemnum(1) = 1 - else sdb_mod_data_i(2) when reg_sim_modemnum(1) = 2 - else sdb_mod_data_i(3) when reg_sim_modemnum(1) = 3 - else sdb_mod_data_i(4) when reg_sim_modemnum(1) = 4 - 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'; + -- Actual SIM/MODEM signal muxing + sim_muxing : sim_mux + port map ( + reg_sim_modemnum => reg_sim_modemnum, + sim_rst_o => sim_rst_o, + mod_simrst_i => mod_simrst_i, + sim_clk_o => sim_clk_o, + mod_clk_i => mod_clk_i, + mod_detect_o => mod_detect_o, + sim_detect_i => sim_detect_i, + sw_mod_data_i => sw_mod_data_i, -- For switched tri-state buffer there are input and output part of + mod_data_i => sdb_mod_data_i, -- the lines which are switched transparently, thus ports + mod_data_o => s_mod_data_o, -- sw_mod_data_i is actual output and sw_mod_data_o is + sw_mod_data_o => sw_mod_data_o -- actual input. Please, don't be confused by conflicting name. + ); - 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 --