11 use IEEE.STD_LOGIC_1164.
all;
12 use ieee.numeric_std.
all;
16 constant IPBUS_SEL_WIDTH: positive := 5;
17 subtype ipbus_sel_t is std_logic_vector(IPBUS_SEL_WIDTH - 1 downto 0);
18 function ipbus_sel_efex_cntrl_backplane(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t;
21 constant N_SLV_AURORA_STATUS_1: integer := 0;
22 constant N_SLV_AURORA1_GT0_TXCTRL: integer := 1;
23 constant N_SLV_AURORA1_GT1_TXCTRL: integer := 2;
24 constant N_SLV_AURORA1_GT2_TXCTRL: integer := 3;
25 constant N_SLV_AURORA1_GT3_TXCTRL: integer := 4;
26 constant N_SLV_AURORA_STATUS_2: integer := 5;
27 constant N_SLV_AURORA2_GT0_TXCTRL: integer := 6;
28 constant N_SLV_AURORA2_GT1_TXCTRL: integer := 7;
29 constant N_SLV_AURORA2_GT2_TXCTRL: integer := 8;
30 constant N_SLV_AURORA2_GT3_TXCTRL: integer := 9;
31 constant N_SLV_CONTROL: integer := 10;
32 constant N_SLV_TTC_STATUS: integer := 11;
33 constant N_SLV_ROD_LINK_STATUS_ROD0: integer := 12;
34 constant N_SLV_ROD_LINK_STATUS_ROD1: integer := 13;
35 constant N_SLV_BACKPLANE_XOFF_STATUS_ROD0: integer := 14;
36 constant N_SLV_BACKPLANE_XOFF_STATUS_ROD1: integer := 15;
37 constant N_SLV_CONTROL_XOFF_STATUS_P0: integer := 16;
38 constant N_SLV_CONTROL_XOFF_STATUS_P1: integer := 17;
39 constant N_SLV_CONTROL_XOFF_STATUS_P2: integer := 18;
40 constant N_SLV_CONTROL_XOFF_STATUS_P3: integer := 19;
41 constant N_SLV_CONTROL_BUSY_STATUS_P0: integer := 20;
42 constant N_SLV_CONTROL_BUSY_STATUS_P1: integer := 21;
43 constant N_SLV_CONTROL_BUSY_STATUS_P2: integer := 22;
44 constant N_SLV_CONTROL_BUSY_STATUS_P3: integer := 23;
45 constant N_SLV_PROCESSOR_BUSY_STATUS_P0: integer := 24;
46 constant N_SLV_PROCESSOR_BUSY_STATUS_P1: integer := 25;
47 constant N_SLV_PROCESSOR_BUSY_STATUS_P2: integer := 26;
48 constant N_SLV_PROCESSOR_BUSY_STATUS_P3: integer := 27;
49 constant N_SLAVES: integer := 28;
57 function ipbus_sel_efex_cntrl_backplane(addr :
in std_logic_vector(
31 downto 0))
return ipbus_sel_t
is
58 variable sel: ipbus_sel_t;
62 if std_match
(addr,
"------------------------00000000") then
63 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA_STATUS_1, IPBUS_SEL_WIDTH
));
-- aurora_status_1 / base 0x00000000 / mask 0x000000ff
64 elsif std_match
(addr,
"------------------------00000001") then
65 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA1_GT0_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora1_gt0_txctrl / base 0x00000001 / mask 0x000000ff
66 elsif std_match
(addr,
"------------------------00000010") then
67 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA1_GT1_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora1_gt1_txctrl / base 0x00000002 / mask 0x000000ff
68 elsif std_match
(addr,
"------------------------00000011") then
69 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA1_GT2_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora1_gt2_txctrl / base 0x00000003 / mask 0x000000ff
70 elsif std_match
(addr,
"------------------------00000100") then
71 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA1_GT3_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora1_gt3_txctrl / base 0x00000004 / mask 0x000000ff
72 elsif std_match
(addr,
"------------------------00010000") then
73 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA_STATUS_2, IPBUS_SEL_WIDTH
));
-- aurora_status_2 / base 0x00000010 / mask 0x000000ff
74 elsif std_match
(addr,
"------------------------00010001") then
75 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA2_GT0_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora2_gt0_txctrl / base 0x00000011 / mask 0x000000ff
76 elsif std_match
(addr,
"------------------------00010010") then
77 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA2_GT1_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora2_gt1_txctrl / base 0x00000012 / mask 0x000000ff
78 elsif std_match
(addr,
"------------------------00010011") then
79 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA2_GT2_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora2_gt2_txctrl / base 0x00000013 / mask 0x000000ff
80 elsif std_match
(addr,
"------------------------00010100") then
81 sel := ipbus_sel_t
(to_unsigned
(N_SLV_AURORA2_GT3_TXCTRL, IPBUS_SEL_WIDTH
));
-- aurora2_gt3_txctrl / base 0x00000014 / mask 0x000000ff
82 elsif std_match
(addr,
"------------------------001000--") then
83 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL, IPBUS_SEL_WIDTH
));
-- control / base 0x00000020 / mask 0x000000fc
84 elsif std_match
(addr,
"------------------------00110---") then
85 sel := ipbus_sel_t
(to_unsigned
(N_SLV_TTC_STATUS, IPBUS_SEL_WIDTH
));
-- ttc_status / base 0x00000030 / mask 0x000000f8
86 elsif std_match
(addr,
"------------------------010000--") then
87 sel := ipbus_sel_t
(to_unsigned
(N_SLV_ROD_LINK_STATUS_ROD0, IPBUS_SEL_WIDTH
));
-- rod_link_status.rod0 / base 0x00000040 / mask 0x000000fc
88 elsif std_match
(addr,
"------------------------010001--") then
89 sel := ipbus_sel_t
(to_unsigned
(N_SLV_ROD_LINK_STATUS_ROD1, IPBUS_SEL_WIDTH
));
-- rod_link_status.rod1 / base 0x00000044 / mask 0x000000fc
90 elsif std_match
(addr,
"------------------------01010---") then
91 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BACKPLANE_XOFF_STATUS_ROD0, IPBUS_SEL_WIDTH
));
-- backplane_xoff_status.rod0 / base 0x00000050 / mask 0x000000f8
92 elsif std_match
(addr,
"------------------------01011---") then
93 sel := ipbus_sel_t
(to_unsigned
(N_SLV_BACKPLANE_XOFF_STATUS_ROD1, IPBUS_SEL_WIDTH
));
-- backplane_xoff_status.rod1 / base 0x00000058 / mask 0x000000f8
94 elsif std_match
(addr,
"------------------------01100---") then
95 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_XOFF_STATUS_P0, IPBUS_SEL_WIDTH
));
-- control_xoff_status.p0 / base 0x00000060 / mask 0x000000f8
96 elsif std_match
(addr,
"------------------------01101---") then
97 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_XOFF_STATUS_P1, IPBUS_SEL_WIDTH
));
-- control_xoff_status.p1 / base 0x00000068 / mask 0x000000f8
98 elsif std_match
(addr,
"------------------------01110---") then
99 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_XOFF_STATUS_P2, IPBUS_SEL_WIDTH
));
-- control_xoff_status.p2 / base 0x00000070 / mask 0x000000f8
100 elsif std_match
(addr,
"------------------------01111---") then
101 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_XOFF_STATUS_P3, IPBUS_SEL_WIDTH
));
-- control_xoff_status.p3 / base 0x00000078 / mask 0x000000f8
102 elsif std_match
(addr,
"------------------------10000---") then
103 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_BUSY_STATUS_P0, IPBUS_SEL_WIDTH
));
-- control_busy_status.p0 / base 0x00000080 / mask 0x000000f8
104 elsif std_match
(addr,
"------------------------10001---") then
105 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_BUSY_STATUS_P1, IPBUS_SEL_WIDTH
));
-- control_busy_status.p1 / base 0x00000088 / mask 0x000000f8
106 elsif std_match
(addr,
"------------------------10010---") then
107 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_BUSY_STATUS_P2, IPBUS_SEL_WIDTH
));
-- control_busy_status.p2 / base 0x00000090 / mask 0x000000f8
108 elsif std_match
(addr,
"------------------------10011---") then
109 sel := ipbus_sel_t
(to_unsigned
(N_SLV_CONTROL_BUSY_STATUS_P3, IPBUS_SEL_WIDTH
));
-- control_busy_status.p3 / base 0x00000098 / mask 0x000000f8
110 elsif std_match
(addr,
"------------------------10100---") then
111 sel := ipbus_sel_t
(to_unsigned
(N_SLV_PROCESSOR_BUSY_STATUS_P0, IPBUS_SEL_WIDTH
));
-- processor_busy_status.p0 / base 0x000000a0 / mask 0x000000f8
112 elsif std_match
(addr,
"------------------------10101---") then
113 sel := ipbus_sel_t
(to_unsigned
(N_SLV_PROCESSOR_BUSY_STATUS_P1, IPBUS_SEL_WIDTH
));
-- processor_busy_status.p1 / base 0x000000a8 / mask 0x000000f8
114 elsif std_match
(addr,
"------------------------10110---") then
115 sel := ipbus_sel_t
(to_unsigned
(N_SLV_PROCESSOR_BUSY_STATUS_P2, IPBUS_SEL_WIDTH
));
-- processor_busy_status.p2 / base 0x000000b0 / mask 0x000000f8
116 elsif std_match
(addr,
"------------------------10111---") then
117 sel := ipbus_sel_t
(to_unsigned
(N_SLV_PROCESSOR_BUSY_STATUS_P3, IPBUS_SEL_WIDTH
));
-- processor_busy_status.p3 / base 0x000000b8 / mask 0x000000f8
121 sel := ipbus_sel_t
(to_unsigned
(N_SLAVES, IPBUS_SEL_WIDTH
));
126 end function ipbus_sel_efex_cntrl_backplane;