Belle II KLM Scint Firmware  1
TrigBitsMux.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 ieee.std_logic_misc.all;
6 library work;
7  use work.conc_intfc_pkg.all;
8  use work.klm_scint_pkg.all;
9  use work.klm_scrod_pkg.all;
10  use work.tdc_pkg.all;
11 
12 
13 entity TrigBitsMux is
14  port (
15  clk : in std_logic;
16  -- rst : in std_logic;
17 
18  mode : in std_logic_vector(3 downto 0);
19  period : in std_logic_vector(31 downto 0);
20  tb_in : in tb_vec_type;
21 
22  tb_out : out tb_vec_type
23  );
24 end entity TrigBitsMux;
25 
26 architecture behav of TrigBitsMux is
27 
28  signal i_mode : std_logic_vector (3 downto 0);
29  signal i_period : std_logic_vector (31 downto 0);
30  -- counter to generate test pattern
31  signal i_tst_cnt : std_logic_vector(31 downto 0) := (others => '0');
32  signal i_tst_done : std_logic := '0';
33 
34  signal i_vectrgbits : tb_vec_type := (others => (others => '0'));
35  signal i_testtrgbits : tb_vec_type;
36 
37 begin
38 
39  ------------------------------------------------
40  -- generate test trg bits pattern
41  ------------------------------------------------
42  TEST_PROC : process(clk)
43  begin
44  if rising_edge(clk) then
45 
46  i_period <= period;
47 
48  if i_tst_cnt < i_period then
49  i_tst_cnt <= i_tst_cnt + '1';
50  else
51  i_tst_cnt <= (others => '0');
52  end if;
53 
54  if i_tst_cnt = i_period then
55  i_testtrgbits <= (others => B"00001");
56  else
57  i_testtrgbits <= (others => B"00000");
58  end if;
59 
60  end if;
61  end process TEST_PROC;
62  ------------------------------------------------
63 
64  ------------------------------------------------
65  -- MUX for trg bits
66  ------------------------------------------------
67  process(clk)
68  begin
69  if rising_edge(clk) then
70  i_mode <= mode;
71  case i_mode is
72  when X"1" =>
73  i_vectrgbits <= tb_in; -- daq mode
74  when X"2" =>
75  i_vectrgbits <= i_testtrgbits; -- test mode
76  when X"3" =>
77  i_vectrgbits <= tb_in; -- test mode
78  when others =>
79  i_vectrgbits <= tb_in;
80  end case;
81  end if;
82  end process;
83  ------------------------------------------------
84 
85  tb_out <= i_vectrgbits;
86 
87 end behav;
88 
89 
90