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

Back to eFEX documentation
i2c_arbitration.vhd
1 -- Wrapper for ipbus_i2c_master and ipbus_watchdog
2 --
3 -- Richard Staley, Nov 2017
4 
5 library IEEE;
6 use IEEE.STD_LOGIC_1164.ALL;
7 library ipbus_lib;
8 use ipbus_lib.ipbus.all;
9 
11  generic(addr_width: natural := 0);
12  port(
13  clk: in std_logic;
14  rst: in std_logic;
15  ipb_in: in ipb_wbus;
16  ipb_out: out ipb_rbus;
17  scl: out std_logic;
18  sda_o: out std_logic;
19  sda_i: in std_logic := '0'
20  );
21 
23 
24 architecture struct of ipbus_i2c_master_arb is
25 
26 signal ipbw: ipb_wbus_array(1 downto 0);
27 signal ipbr: ipb_rbus_array(1 downto 0);
28 
29 begin
30 
31 block_decode: entity ipbus_lib.ipbus_fabric_branch
32  generic map(
33  NSLV => 2,
34  DECODE_BASE => 3
35  )
36  port map(
37  ipb_in => ipb_in,
38  ipb_out => ipb_out,
39  ipb_to_slaves => ipbw,
40  ipb_from_slaves => ipbr
41  );
42 
43 -- the original i2c master
44 
45 i2c_arp: entity ipbus_lib.ipbus_i2c_master
46  port map(
47  clk => clk,
48  rst => rst,
49  ipb_in => ipbw(0),
50  ipb_out => ipbr(0),
51  scl => scl,
52  sda_o => sda_o,
53  sda_i => sda_i
54  );
55 
56 -- arbitration register with key, lock and watchdog timer
57 
58 arbitration: entity work.ipbus_watchdog
59 generic map(
60  TIMER_WIDTH => 20
61  )
62  port map(
63  ipbus_clk => clk,
64  reset => rst,
65  ipbus_in => ipbw(1),
66  ipbus_out => ipbr(1)
67  );
68 
69 
70 end struct;
ipbus watchdog
in ipbus_clk STD_LOGIC
IPBus clock of 31.25MHz.
out ipbus_out ipb_rbus
IPBus output bus going from slaves to master.
in reset STD_LOGIC
reset
in ipbus_in ipb_wbus
IPBus input bus going from master to slaves.