22 use IEEE.STD_LOGIC_1164.
ALL;
24 use ieee.numeric_std.
all;
25 USE ieee.math_real.
all;
28 use ipbus_lib.ipbus.
all;
31 generic(NUMREG: natural := 19;
32 reg48 : bit_vector(15 downto 0) := x"0000";
33 reg49 : bit_vector(15 downto 0) := x"0000");
35 ipb_clk : in STD_LOGIC;
37 VAUXP, VAUXN : in STD_LOGIC_VECTOR (5 downto 0) := (Others => '0');
39 ipbus_in : in ipb_wbus;
40 ipbus_out : out ipb_rbus
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';
60 addr <= ipbus_in.ipb_addr(SEL_BITS-1 downto 0);
61 sel <= to_integer(unsigned(addr));
68 if rising_edge(ipb_clk) then
69 ack <= ipbus_in.ipb_strobe and not ack;
73 ipbus_out.ipb_ack <= ack;
74 ipbus_out.ipb_err <= '0';
78 ipbus_out.ipb_rdata <= x"0000" & adc_conv(sel);
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),