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

Back to eFEX documentation
ipbus_xadc_drp.vhd
1 -- Company:
2 -- Engineer:
3 --
4 -- Create Date: 05/27/2016 11:08:50 AM
5 -- Design Name:
6 -- Module Name: ipbus_xadc_drp - Behavioral
7 -- Project Name:
8 -- Target Devices:
9 -- Tool Versions:
10 -- Description:
11 --
12 -- Dependencies:
13 --
14 -- Revision:
15 -- Revision 0.01 - File Created
16 -- Additional Comments:
17 --
18 ----------------------------------------------------------------------------------
19 
20 
21 library IEEE;
22 use IEEE.STD_LOGIC_1164.ALL;
23 
24 use ieee.numeric_std.all;
25 USE ieee.math_real.all;
26 
27 library ipbus_lib;
28 use ipbus_lib.ipbus.all;
29 
30 entity ipbus_xadc_drp is
31  generic(NUMREG: natural := 19;
32  reg48 : bit_vector(15 downto 0) := x"0000";
33  reg49 : bit_vector(15 downto 0) := x"0000");
34  port(
35  ipb_clk : in STD_LOGIC;
36  reset : in STD_LOGIC;
37  VAUXP, VAUXN : in STD_LOGIC_VECTOR (5 downto 0) := (Others => '0');
38  Vp,Vn : in std_logic;
39  ipbus_in : in ipb_wbus;
40  ipbus_out : out ipb_rbus
41 
42  );
43 
44 end ipbus_xadc_drp;
45 
46 architecture rtl of ipbus_xadc_drp is
47 
48 constant SEL_BITS : integer := integer(ceil(log2(real(NUMREG))));
49 type xadc_reg_array is array( 0 to NUMREG-1) of std_logic_vector(15 downto 0);
50 signal adc_conv: xadc_reg_array := (others => (others => '0'));
51 signal sel: integer range 0 to NUMREG-1;
52 signal addr: std_logic_vector(SEL_BITS-1 downto 0);
53 signal ack: std_logic := '0';
54 
55 
56 
57 
58 begin
59 
60  addr <= ipbus_in.ipb_addr(SEL_BITS-1 downto 0);
61  sel <= to_integer(unsigned(addr));
62 
63 ----------------------------------
64 -- IPbus interface
65 
66  process(ipb_clk)
67  begin
68  if rising_edge(ipb_clk) then
69  ack <= ipbus_in.ipb_strobe and not ack;
70  end if;
71  end process;
72 
73  ipbus_out.ipb_ack <= ack;
74  ipbus_out.ipb_err <= '0';
75 
76 -- infer the data selection mux
77 
78  ipbus_out.ipb_rdata <= x"0000" & adc_conv(sel);
79 
80 
81 -- instantiate xadc conversion registers
82 
83 
84  adc_inst : entity work.xadc_eFEX
85  generic map (
86  reg48 => reg48,
87  reg49 => reg49
88  )
89  port map(
90  DCLK => ipb_clk,
91  RESET => RESET,
92  -- unused during simulation
93  VP => Vp, -- unused during simulation
94  VN => Vn, -- unused during simulation
95  VAUXP => VAUXP,
96  VAUXN => VAUXN,
97  MEASURED_TEMP => adc_conv(0),
98  MEASURED_TEMP_MIN => adc_conv(1),
99  MEASURED_TEMP_MAX => adc_conv(2),
100  MEASURED_VCCINT => adc_conv(3),
101  MEASURED_VCCINT_MIN => adc_conv(4),
102  MEASURED_VCCINT_MAX => adc_conv(5),
103  MEASURED_VCCAUX => adc_conv(6),
104  MEASURED_VCCAUX_MIN => adc_conv(7),
105  MEASURED_VCCAUX_MAX => adc_conv(8),
106  MEASURED_VCCBRAM => adc_conv(9),
107  MEASURED_VCCBRAM_MIN => adc_conv(10),
108  MEASURED_VCCBRAM_MAX => adc_conv(11),
109  MEASURED_2V5 => adc_conv(12),
110  MEASURED_1V05 => adc_conv(13),
111  MEASURED_1V0 => adc_conv(14),
112  MEASURED_3V3 => adc_conv(15),
113  MEASURED_1V2 => adc_conv(16),
114  MEASURED_1V8 => adc_conv(17),
115  MEASURED_Vp_Vn => adc_conv(18),
116 
117 
118  ALM => open,-- Alarms
119  CHANNEL => open,
120  OT => open,-- Over Temperature Alarm
121  EOC => open,-- End of conversion
122  EOS => open -- End of sequence
123 );
124 
125 end rtl;