eFEX firmware  1.7.3
ATLAS l1-calo - electron and tau feature extraction firmware for eFEX boards

Back to eFEX documentation
ipbus_decode_efex_cntrl_backplane.vhd
1 -- Address decode logic for ipbus fabric
2 --
3 -- This file has been AUTOGENERATED from the address table - do not hand edit
4 --
5 -- We assume the synthesis tool is clever enough to recognise exclusive conditions
6 -- in the if statement.
7 --
8 -- Dave Newbold, February 2011
9 
10 library IEEE;
11 use IEEE.STD_LOGIC_1164.all;
12 use ieee.numeric_std.all;
13 
15 
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;
19 
20 -- START automatically generated VHDL (Mon Feb 6 11:41:24 2023)
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;
50 -- END automatically generated VHDL
51 
52 
54 
56 
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;
59  begin
60 
61 -- START automatically generated VHDL (Mon Feb 6 11:41:24 2023)
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
118 -- END automatically generated VHDL
119 
120  else
121  sel := ipbus_sel_t(to_unsigned(N_SLAVES, IPBUS_SEL_WIDTH));
122  end if;
123 
124  return sel;
125 
126  end function ipbus_sel_efex_cntrl_backplane;
127 
129