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_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_ERROR_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_SLV_PLAYBACK_RAM: integer := 8;
30 constant N_SLAVES: integer := 9;
38 function ipbus_sel_efex_mgt_channel(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t
is
39 variable sel: ipbus_sel_t;
43 if std_match
(addr,
"------------------------0----000") then
44 sel := ipbus_sel_t
(to_unsigned
(N_SLV_STATUS, IPBUS_SEL_WIDTH
));
-- status / base 0x00000000 / mask 0x00000087
45 elsif std_match
(addr,
"------------------------0----001") then
46 sel := ipbus_sel_t
(to_unsigned
(N_SLV_ERROR_COUNTER, IPBUS_SEL_WIDTH
));
-- error_counter / base 0x00000001 / mask 0x00000087
47 elsif std_match
(addr,
"------------------------0----010") then
48 sel := ipbus_sel_t
(to_unsigned
(N_SLV_DISPERR_COUNTER, IPBUS_SEL_WIDTH
));
-- disperr_counter / base 0x00000002 / mask 0x00000087
49 elsif std_match
(addr,
"------------------------0----011") then
50 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BYTEREALIGN_COUNTER, IPBUS_SEL_WIDTH
));
-- byterealign_counter / base 0x00000003 / mask 0x00000087
51 elsif std_match
(addr,
"------------------------0----100") then
52 sel := ipbus_sel_t
(to_unsigned
(N_SLV_DELAY_COUNTER, IPBUS_SEL_WIDTH
));
-- delay_counter / base 0x00000004 / mask 0x00000087
53 elsif std_match
(addr,
"------------------------0----101") then
54 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BC_COUNTER, IPBUS_SEL_WIDTH
));
-- bc_counter / base 0x00000005 / mask 0x00000087
55 elsif std_match
(addr,
"------------------------0----110") then
56 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BC_MUX_COUNTER, IPBUS_SEL_WIDTH
));
-- bc_mux_counter / base 0x00000006 / mask 0x00000087
57 elsif std_match
(addr,
"------------------------0----111") then
58 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CRC_ERROR_COUNTER, IPBUS_SEL_WIDTH
));
-- crc_error_counter / base 0x00000007 / mask 0x00000087
59 elsif std_match
(addr,
"------------------------1-------") then
60 sel := ipbus_sel_t
(to_unsigned
(N_SLV_PLAYBACK_RAM, IPBUS_SEL_WIDTH
));
-- playback_ram / base 0x00000080 / mask 0x00000080
64 sel := ipbus_sel_t
(to_unsigned
(N_SLAVES, IPBUS_SEL_WIDTH
));
69 end function ipbus_sel_efex_mgt_channel;