11 use IEEE.STD_LOGIC_1164.
all;
12 use ieee.numeric_std.
all;
16 constant IPBUS_SEL_WIDTH: positive := 3;
17 subtype ipbus_sel_t is std_logic_vector(IPBUS_SEL_WIDTH - 1 downto 0);
18 function ipbus_sel_L1CaloEfex(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t;
21 constant N_SLV_COMMON_ID_VERSION: integer := 0;
22 constant N_SLV_CNTRL_INFRA: integer := 1;
23 constant N_SLV_CNTRL_MGT: integer := 2;
24 constant N_SLV_BACKPLANE: integer := 3;
25 constant N_SLV_DATA_PATH: integer := 4;
26 constant N_SLAVES: integer := 5;
34 function ipbus_sel_L1CaloEfex(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t
is
35 variable sel: ipbus_sel_t;
39 if std_match
(addr,
"--------0-------000-------------") then
40 sel := ipbus_sel_t
(to_unsigned
(N_SLV_COMMON_ID_VERSION, IPBUS_SEL_WIDTH
));
-- common_id_version / base 0x00000000 / mask 0x0080e000
41 elsif std_match
(addr,
"--------0-------001-------------") then
42 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CNTRL_INFRA, IPBUS_SEL_WIDTH
));
-- cntrl_infra / base 0x00002000 / mask 0x0080e000
43 elsif std_match
(addr,
"--------0-------010-------------") then
44 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CNTRL_MGT, IPBUS_SEL_WIDTH
));
-- cntrl_mgt / base 0x00004000 / mask 0x0080e000
45 elsif std_match
(addr,
"--------0-------100-------------") then
46 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BACKPLANE, IPBUS_SEL_WIDTH
));
-- backplane / base 0x00008000 / mask 0x0080e000
47 elsif std_match
(addr,
"--------1-----------------------") then
48 sel := ipbus_sel_t
(to_unsigned
(N_SLV_DATA_PATH, IPBUS_SEL_WIDTH
));
-- data_path / base 0x00800000 / mask 0x00800000
52 sel := ipbus_sel_t
(to_unsigned
(N_SLAVES, IPBUS_SEL_WIDTH
));
57 end function ipbus_sel_L1CaloEfex;