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

Back to eFEX documentation
top_udp_config_fpga_struct.vhd
1 --- Top_udp_config_FPGA
2 -- This design combines the control of the UDP of the four processing FPGAs
3 --- It creates the interconnection between the control and four processing FPGAs
4 --
5 -- -- Cretaed by Mohammed Siyad on 18/1/2016
6 
7 
8 LIBRARY ieee;
9 USE ieee.std_logic_1164.all;
10 USE ieee.std_logic_arith.all;
11 library ipbus_lib;
12 use ipbus_lib.ipbus.ALL;
13 USE ipbus_lib.ipbus_trans_decl.all;
14 USE ipbus_lib.mac_arbiter_decl.all;
15 
17  Generic (
18  constant IPBUSBUFWIDTH: positive := 6
19  );
20  PORT(
21  ipb_clk : IN std_logic;
22  ipb_in : IN ipb_rbus;
23  hardware_addr : IN std_logic_vector (11 DOWNTO 0);
24  serial_number : IN std_logic_vector (5 DOWNTO 0) := (others => '0');
25  mac_clk : IN std_logic;
26  mac_rx_data : IN std_logic_vector (7 DOWNTO 0);
27  mac_rx_error : IN std_logic;
28  mac_rx_last : IN std_logic;
29  mac_rx_valid : IN std_logic;
30  mac_tx_ready : IN std_logic;
31  master_tx_data1 : IN std_logic_vector (8 DOWNTO 0);
32  master_tx_data2 : IN std_logic_vector (8 DOWNTO 0);
33  master_tx_data3 : IN std_logic_vector (8 DOWNTO 0);
34  master_tx_data4 : IN std_logic_vector (8 DOWNTO 0);
35  master_tx_err1 : IN std_logic;
36  master_tx_err2 : IN std_logic;
37  master_tx_err3 : IN std_logic;
38  master_tx_err4 : IN std_logic;
39  rst_ipb : IN std_logic;
40  rst_macclk : IN std_logic;
41  p_fpga_reset_125 : IN std_logic_vector(3 downto 0);
42  ipb_out : OUT ipb_wbus;
43  mac_tx_data : OUT std_logic_vector (7 DOWNTO 0);
44  mac_tx_error : OUT std_logic;
45  mac_tx_last : OUT std_logic;
46  mac_tx_valid : OUT std_logic;
47  master_rx_data1 : OUT std_logic_vector (8 DOWNTO 0);
48  master_rx_data2 : OUT std_logic_vector (8 DOWNTO 0);
49  master_rx_data3 : OUT std_logic_vector (8 DOWNTO 0);
50  master_rx_data4 : OUT std_logic_vector (8 DOWNTO 0);
51  master_tx_pause1 : OUT STD_LOGIC;
52  master_tx_pause2 : OUT STD_LOGIC;
53  master_tx_pause3 : OUT STD_LOGIC;
54  master_tx_pause4 : OUT STD_LOGIC;
55  master_link_down1: IN std_logic;
56  master_link_down2: IN std_logic;
57  master_link_down3: IN std_logic;
58  master_link_down4: IN std_logic;
59  got_ip_address : OUT STD_LOGIC;
60  slaves_ipbus_up : OUT std_logic_vector(3 downto 0)
61  );
62 
63 -- Declarations
64 
66 
67 
68 
69 ARCHITECTURE struct OF top_udp_config_FPGA IS
70 
71  -- Architecture declarations
72 
73  -- Internal signal declarations
74  SIGNAL Master_got_IP_addr : std_logic;
75  SIGNAL ip_addr, actual_ip_addr : std_logic_vector(31 DOWNTO 0);
76  SIGNAL mac_addr, actual_mac_addr : std_logic_vector(47 DOWNTO 0);
77  SIGNAL enable : std_logic;
78  SIGNAL use_dhcp : std_logic;
79  SIGNAL ipb_grant : std_logic := '1';
80  SIGNAL rarp_rx_data : std_logic_vector(7 DOWNTO 0);
81  SIGNAL rarp_rx_last : std_logic;
82  SIGNAL rarp_rx_valid : std_logic;
83  SIGNAL slaves_Got_IP_addr : std_logic;
84  SIGNAL slaves_Got_IP_addr1 : std_logic;
85  SIGNAL slaves_Got_IP_addr2 : std_logic;
86  SIGNAL slaves_Got_IP_addr3 : std_logic;
87  SIGNAL slaves_Got_IP_addr4 : std_logic;
88  SIGNAL src_tx_data_bus : mac_arbiter_slv_array(4 DOWNTO 0);
89  SIGNAL src_tx_error_bus : mac_arbiter_sl_array(4 DOWNTO 0);
90  SIGNAL src_tx_last_bus : mac_arbiter_sl_array(4 DOWNTO 0);
91  SIGNAL src_tx_ready_bus : mac_arbiter_sl_array(4 DOWNTO 0);
92  SIGNAL src_tx_valid_bus : mac_arbiter_sl_array(4 DOWNTO 0);
93 
94 
95 
96 
97 
98 BEGIN
99 
100  got_ip_address <= Master_got_IP_addr;
101 
102  ipb_grant <='1';
103  slaves_got_IP_addr <= slaves_got_IP_addr1 and slaves_got_IP_addr2 and slaves_got_IP_addr3 and slaves_got_IP_addr4;
104 
105  slaves_ipbus_up <= slaves_got_IP_addr4 & slaves_got_IP_addr3 & slaves_got_IP_addr2 & slaves_got_IP_addr1;
106 
107 
108  -- Instance port mappings.
109  U_0 :entity work.interface_proc_fpga
110  GENERIC MAP (
111  IPBUFWIDTH => IPBUSBUFWIDTH
112  )
113  PORT MAP (
114  mac_clk => mac_clk,
115  mac_rx_data => mac_rx_data,
116  mac_rx_error => mac_rx_error,
117  mac_rx_last => mac_rx_last,
118  mac_rx_valid => mac_rx_valid,
119  mac_tx_ready => src_tx_ready_bus(1),
120  master_tx_data => master_tx_data1,
121  master_tx_err => master_tx_err1,
122  rarp_rx_data => rarp_rx_data,
123  rarp_rx_last => rarp_rx_last,
124  rarp_rx_valid => rarp_rx_valid,
125  rst_macclk => p_fpga_reset_125(0),
126  mac_tx_data => src_tx_data_bus(1),
127  mac_tx_error => src_tx_error_bus(1),
128  mac_tx_last => src_tx_last_bus(1),
129  mac_tx_valid => src_tx_valid_bus(1),
130  master_rx_data => master_rx_data1,
131  master_tx_pause => master_tx_pause1,
132  master_link_down => master_link_down1,
133  slaves_Got_IP_addr => slaves_Got_IP_addr1
134  );
135  U_1 : entity work.interface_proc_fpga
136  GENERIC MAP (
137  IPBUFWIDTH => IPBUSBUFWIDTH
138  )
139  PORT MAP (
140  mac_clk => mac_clk,
141  mac_rx_data => mac_rx_data,
142  mac_rx_error => mac_rx_error,
143  mac_rx_last => mac_rx_last,
144  mac_rx_valid => mac_rx_valid,
145  mac_tx_ready => src_tx_ready_bus(2),
146  master_tx_data => master_tx_data2,
147  master_tx_err => master_tx_err2,
148  rarp_rx_data => rarp_rx_data,
149  rarp_rx_last => rarp_rx_last,
150  rarp_rx_valid => rarp_rx_valid,
151  rst_macclk => p_fpga_reset_125(1),
152  mac_tx_data => src_tx_data_bus(2),
153  mac_tx_error => src_tx_error_bus(2),
154  mac_tx_last => src_tx_last_bus(2),
155  mac_tx_valid => src_tx_valid_bus(2),
156  master_rx_data => master_rx_data2,
157  master_tx_pause => master_tx_pause2,
158  master_link_down => master_link_down2,
159  slaves_Got_IP_addr => slaves_Got_IP_addr2
160  );
161  U_2 : entity work.interface_proc_fpga
162  GENERIC MAP (
163  IPBUFWIDTH => IPBUSBUFWIDTH
164  )
165  PORT MAP (
166  mac_clk => mac_clk,
167  mac_rx_data => mac_rx_data,
168  mac_rx_error => mac_rx_error,
169  mac_rx_last => mac_rx_last,
170  mac_rx_valid => mac_rx_valid,
171  mac_tx_ready => src_tx_ready_bus(3),
172  master_tx_data => master_tx_data3,
173  master_tx_err => master_tx_err3,
174  rarp_rx_data => rarp_rx_data,
175  rarp_rx_last => rarp_rx_last,
176  rarp_rx_valid => rarp_rx_valid,
177  rst_macclk => p_fpga_reset_125(2),
178  mac_tx_data => src_tx_data_bus(3),
179  mac_tx_error => src_tx_error_bus(3),
180  mac_tx_last => src_tx_last_bus(3),
181  mac_tx_valid => src_tx_valid_bus(3),
182  master_rx_data => master_rx_data3,
183  master_tx_pause => master_tx_pause3,
184  master_link_down => master_link_down3,
185  slaves_Got_IP_addr => slaves_Got_IP_addr3
186  );
187  U_3 : entity work.interface_proc_fpga
188  GENERIC MAP (
189  IPBUFWIDTH => IPBUSBUFWIDTH
190  )
191  PORT MAP (
192  mac_clk => mac_clk,
193  mac_rx_data => mac_rx_data,
194  mac_rx_error => mac_rx_error,
195  mac_rx_last => mac_rx_last,
196  mac_rx_valid => mac_rx_valid,
197  mac_tx_ready => src_tx_ready_bus(4),
198  master_tx_data => master_tx_data4,
199  master_tx_err => master_tx_err4,
200  rarp_rx_data => rarp_rx_data,
201  rarp_rx_last => rarp_rx_last,
202  rarp_rx_valid => rarp_rx_valid,
203  rst_macclk => p_fpga_reset_125(3),
204  mac_tx_data => src_tx_data_bus(4),
205  mac_tx_error => src_tx_error_bus(4),
206  mac_tx_last => src_tx_last_bus(4),
207  mac_tx_valid => src_tx_valid_bus(4),
208  master_rx_data => master_rx_data4,
209  master_tx_pause => master_tx_pause4,
210  master_link_down => master_link_down4,
211  slaves_Got_IP_addr => slaves_Got_IP_addr4
212  );
213  U_5 : entity ipbus_lib.ipbus_ctrl
214  GENERIC MAP (
215  MAC_CFG => EXTERNAL,
216  IP_CFG => EXTERNAL,
217  -- Number of address bits to select RX or TX buffer in UDP I/F
218  -- Number of RX and TX buffers is 2**BUFWIDTH
219  BUFWIDTH => 4,
220  -- Numer of address bits to select internal buffer in UDP I/F
221  -- Number of internal buffers is 2**INTERNALWIDTH
222  INTERNALWIDTH => 1,
223  -- Number of address bits within each buffer in UDP I/F
224  -- Size of each buffer is 2**ADDRWIDTH
225  ADDRWIDTH => 11,
226  -- Flag whether this UDP I/F instance ignores everything except IPBus traffic
227  SECONDARYPORT => '0',
228  -- Switch between using DHCP or RARP as the protocol for external IP address management
229  -- '0' => RARP, '1' => DHCP
230  DHCP_RARP => '1',
231  N_OOB => 0
232  )
233  PORT MAP (
234  mac_clk => mac_clk,
235  rst_macclk => rst_macclk,
236  ipb_clk => ipb_clk,
237  rst_ipb => rst_ipb,
238  mac_rx_data => mac_rx_data,
239  mac_rx_valid => mac_rx_valid,
240  mac_rx_last => mac_rx_last,
241  mac_rx_error => mac_rx_error,
242  mac_tx_data => src_tx_data_bus(0),
243  mac_tx_valid => src_tx_valid_bus(0),
244  mac_tx_last => src_tx_last_bus(0),
245  mac_tx_error => src_tx_error_bus(0),
246  mac_tx_ready => src_tx_ready_bus(0),
247  ipb_out => ipb_out,
248  ipb_in => ipb_in,
249  ipb_req => OPEN,
250  ipb_grant => ipb_grant,
251  mac_addr => mac_addr,
252  ip_addr => ip_addr,
253  ipbus_port => x"C351", -- UDP port for IPbus traffic in this instance of UDP I/F
254  enable => enable,
255  ipam_select => use_dhcp,
256  actual_mac_addr => actual_mac_addr,
257  actual_ip_addr => actual_ip_addr,
258  Got_IP_addr => Master_got_IP_addr,
259  pkt => OPEN,
260  pkt_oob => OPEN,
261  oob_in => OPEN,
262  oob_out => OPEN
263  );
264  U_4 :entity ipbus_lib.mac_arbiter mac_arbiter
265  GENERIC MAP (
266  NSRC => 5
267  )
268  PORT MAP (
269  clk => mac_clk,
270  rst => rst_macclk,
271  src_tx_data_bus => src_tx_data_bus,
272  src_tx_valid_bus => src_tx_valid_bus,
273  src_tx_last_bus => src_tx_last_bus,
274  src_tx_error_bus => src_tx_error_bus,
275  src_tx_ready_bus => src_tx_ready_bus,
276  mac_tx_data => mac_tx_data,
277  mac_tx_valid => mac_tx_valid,
278  mac_tx_last => mac_tx_last,
279  mac_tx_error => mac_tx_error,
280  mac_tx_ready => mac_tx_ready
281  );
282  U_6 : entity ipbus_lib.udp_hub_rarp
283  PORT MAP (
284  mac_clk => mac_clk,
285  rst_macclk => rst_macclk,
286  actual_mac_addr => actual_mac_addr,
287  actual_ip_addr => actual_ip_addr,
288  hub_got_IP_addr => Master_got_IP_addr,
289  nodes_got_IP_addr => slaves_Got_IP_addr,
290  rarp_rx_data => rarp_rx_data,
291  rarp_rx_last => rarp_rx_last,
292  rarp_rx_valid => rarp_rx_valid
293  );
294  U_7 : entity work.unique_address
295  PORT MAP (
296  mac_clk => mac_clk,
297  rst_macclk => rst_macclk,
298  hardware_addr => hardware_addr,
299  serial_number => serial_number,
300  mac_addr => mac_addr,
301  ip_addr => ip_addr,
302  enable => enable,
303  use_dhcp => use_dhcp
304  );
305 
306 END struct;