Belle II KLM Scint Firmware  1
mppc_dacs_wrapper_dac088s085.vhd
1 library IEEE;
2  use IEEE.std_logic_1164.ALL;
3  use ieee.numeric_std.all;
4  use ieee.std_logic_unsigned.all;
5  use work.all;
6 ----------------------------------------------------------------------------------
7 -- Company: University of Hawaii at Manoa
8 -- Engineer: Bostjan Macek
9 -- Create Date: 14:22:21 02/18/2014
10 ----------------------------------------------------------------------------------
11 -- Change Log:
12 -- 2015/05/28 Isar Morstafanezhad for DAC in RHIC RevC-
13 -- 2018/12/24 Added simple clock divider inside module -- Vasily
14 -- 2020/07/28 Linting only (CK)
15 --
16 -- Warnings:
17 -- XST3210: output port 'clkdiv' of 'clock_div_i' is unconnected or connected to a loadless signal (CK)
18 
20  Port (
21  ------------CLOCK-----------------
22  clk : in std_logic;
23  ------------DAC PARAMETERS--------
24  dac_number : in std_logic_vector(3 downto 0);
25  dac_addr : in std_logic_vector(3 downto 0);
26  dac_value : in std_logic_vector(7 downto 0);
27  write_strobe : in std_logic;
28  busy : out std_logic;
29  ------------HW INTERFACE----------
30  SCK_DAC : out std_logic;
31  DIN_DAC : out std_logic;
32  TDC_CS_DAC : out std_logic_vector(9 downto 0)
33  );
34 end mppc_dacs_wrapper_dac088s085;
35 
36 
37 architecture Behavioral of mppc_dacs_wrapper_dac088s085 is
38 
39  signal i_dac_number : std_logic_vector(3 downto 0);
40  signal i_dac_addr : std_logic_vector(3 downto 0);
41  signal i_dac_value : std_logic_vector(7 downto 0);
42  signal i_dac_mask : std_logic_vector(9 downto 0);
43  signal i_cs_dac : std_logic;
44 
45  signal clock : std_logic;
46  signal i_write_strobe : std_logic;
47  signal i_hb : std_logic;
48 
49 begin
50 
51 
52  clk_div_i : entity work.clk_div
53  generic map (
54  RATIO => 32
55  )
56  port map (
57  clk => clk,
58  rst => '0',
59  strb => write_strobe,
60  clkdiv => clock,
61  hb => i_hb,
62  sync_strb => i_write_strobe
63  );
64 
65 
66  process(clk)
67  begin
68  if rising_edge(clk) then
69  i_dac_number <= dac_number;
70  i_dac_addr <= dac_addr;
71  i_dac_value <= dac_value;
72  end if;
73  end process;
74 
75 
76  i_mppc_bias_dac088s085: entity work.mppc_bias_dac088s085
77  port map(
78  clk => clk,
79  clken => i_hb,
80  dac_ch_addr => i_dac_addr,
81  dac_val => i_dac_value,
82  dac_update => i_write_strobe,
83  dac_busy => busy,
84  dac_sclk => sck_dac,
85  dac_sync_n => i_cs_dac,
86  dac_din => din_dac
87  );
88 
89  i_dac_mask <= "1111111110" when i_dac_number = x"0" else
90  "1111111101" when i_dac_number = x"1" else
91  "1111111011" when i_dac_number = x"2" else
92  "1111110111" when i_dac_number = x"3" else
93  "1111101111" when i_dac_number = x"4" else
94  "1111011111" when i_dac_number = x"5" else
95  "1110111111" when i_dac_number = x"6" else
96  "1101111111" when i_dac_number = x"7" else
97  "1011111111" when i_dac_number = x"8" else
98  "0111111111" when i_dac_number = x"9" else
99  "1111111111";
100 
101  cs_bits: for i in 0 to 9 generate
102  TDC_CS_DAC(i) <= i_dac_mask(i) or i_cs_dac;
103  end generate;
104 
105 end Behavioral;
106