11 use IEEE.STD_LOGIC_1164.
all;
12 use ieee.numeric_std.
all;
16 constant IPBUS_SEL_WIDTH: positive := 4;
17 subtype ipbus_sel_t is std_logic_vector(IPBUS_SEL_WIDTH - 1 downto 0);
18 function ipbus_sel_efex_cntrl_mgt_channel(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t;
21 constant N_SLV_STATUS: integer := 0;
22 constant N_SLV_NOT_IN_TABLE_COUNTER: integer := 1;
23 constant N_SLV_DISPERR_COUNTER: integer := 2;
24 constant N_SLV_BYTEREALIGN_COUNTER: integer := 3;
25 constant N_SLV_DELAY_COUNTER: integer := 4;
26 constant N_SLV_BC_COUNTER: integer := 5;
27 constant N_SLV_BC_MUX_COUNTER: integer := 6;
28 constant N_SLV_CRC_ERROR_COUNTER: integer := 7;
29 constant N_SLAVES: integer := 8;
37 function ipbus_sel_efex_cntrl_mgt_channel(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t
is
38 variable sel: ipbus_sel_t;
42 if std_match
(addr,
"-----------------------------000") then
43 sel := ipbus_sel_t
(to_unsigned
(N_SLV_STATUS, IPBUS_SEL_WIDTH
));
-- status / base 0x00000000 / mask 0x00000007
44 elsif std_match
(addr,
"-----------------------------001") then
45 sel := ipbus_sel_t
(to_unsigned
(N_SLV_NOT_IN_TABLE_COUNTER, IPBUS_SEL_WIDTH
));
-- not_in_table_counter / base 0x00000001 / mask 0x00000007
46 elsif std_match
(addr,
"-----------------------------010") then
47 sel := ipbus_sel_t
(to_unsigned
(N_SLV_DISPERR_COUNTER, IPBUS_SEL_WIDTH
));
-- disperr_counter / base 0x00000002 / mask 0x00000007
48 elsif std_match
(addr,
"-----------------------------011") then
49 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BYTEREALIGN_COUNTER, IPBUS_SEL_WIDTH
));
-- byterealign_counter / base 0x00000003 / mask 0x00000007
50 elsif std_match
(addr,
"-----------------------------100") then
51 sel := ipbus_sel_t
(to_unsigned
(N_SLV_DELAY_COUNTER, IPBUS_SEL_WIDTH
));
-- delay_counter / base 0x00000004 / mask 0x00000007
52 elsif std_match
(addr,
"-----------------------------101") then
53 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BC_COUNTER, IPBUS_SEL_WIDTH
));
-- bc_counter / base 0x00000005 / mask 0x00000007
54 elsif std_match
(addr,
"-----------------------------110") then
55 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BC_MUX_COUNTER, IPBUS_SEL_WIDTH
));
-- bc_mux_counter / base 0x00000006 / mask 0x00000007
56 elsif std_match
(addr,
"-----------------------------111") then
57 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CRC_ERROR_COUNTER, IPBUS_SEL_WIDTH
));
-- crc_error_counter / base 0x00000007 / mask 0x00000007
61 sel := ipbus_sel_t
(to_unsigned
(N_SLAVES, IPBUS_SEL_WIDTH
));
66 end function ipbus_sel_efex_cntrl_mgt_channel;