1 | --=======================================================================================
|
---|
2 | -- TITLE : Sum of physics or calibration triggers
|
---|
3 | -- DESCRIPTION : Convert number of inputs to '1' on 40bits to a sum on 6bits.
|
---|
4 | -- FILE : trigger_sum.vhd
|
---|
5 | -- COMPANY : Micro-Cameras & Space Exploration SA
|
---|
6 | --=======================================================================================
|
---|
7 | -- CREATION
|
---|
8 | -- DATE AUTHOR PROJECT REVISION
|
---|
9 | -- 07/03/2011 JGi 110307a
|
---|
10 | --=======================================================================================
|
---|
11 | -- MODIFICATION HISTORY
|
---|
12 | -- DATE AUTHOR PROJECT REVISION COMMENTS
|
---|
13 | -- 07/03/2011 JGi 110307a Description
|
---|
14 | --=======================================================================================
|
---|
15 | -- Library Definition
|
---|
16 | library ieee;
|
---|
17 | use ieee.std_logic_1164.all;
|
---|
18 | use ieee.numeric_std.all;
|
---|
19 |
|
---|
20 | -- Entity Definition
|
---|
21 | entity trigger_sum is
|
---|
22 | port( --clk
|
---|
23 | clk_250MHz : in std_logic;
|
---|
24 | --inputs
|
---|
25 | trig_window_0 : in std_logic_vector(9 downto 0);
|
---|
26 | trig_window_1 : in std_logic_vector(9 downto 0);
|
---|
27 | trig_window_2 : in std_logic_vector(9 downto 0);
|
---|
28 | trig_window_3 : in std_logic_vector(9 downto 0);
|
---|
29 | --output
|
---|
30 | number_of_events : out std_logic_vector(5 downto 0));
|
---|
31 | end trigger_sum;
|
---|
32 |
|
---|
33 | -- Architecture Definition
|
---|
34 | architecture RTL of trigger_sum is
|
---|
35 |
|
---|
36 | component unary_to_binary is
|
---|
37 | port( clk_250MHz : in std_logic;
|
---|
38 | vector_in : in std_logic_vector(4 downto 0);
|
---|
39 | result : out std_logic_vector(2 downto 0));
|
---|
40 | end component;
|
---|
41 |
|
---|
42 | signal i_bin_to_dec_result_0 : std_logic_vector(2 downto 0);
|
---|
43 | signal i_bin_to_dec_result_1 : std_logic_vector(2 downto 0);
|
---|
44 | signal i_bin_to_dec_result_2 : std_logic_vector(2 downto 0);
|
---|
45 | signal i_bin_to_dec_result_3 : std_logic_vector(2 downto 0);
|
---|
46 | signal i_bin_to_dec_result_4 : std_logic_vector(2 downto 0);
|
---|
47 | signal i_bin_to_dec_result_5 : std_logic_vector(2 downto 0);
|
---|
48 | signal i_bin_to_dec_result_6 : std_logic_vector(2 downto 0);
|
---|
49 | signal i_bin_to_dec_result_7 : std_logic_vector(2 downto 0);
|
---|
50 |
|
---|
51 | component adder_3_bits is
|
---|
52 | port( a : in std_logic_vector(2 downto 0);
|
---|
53 | b : in std_logic_vector(2 downto 0);
|
---|
54 | clk : in std_logic;
|
---|
55 | s : out std_logic_vector(3 downto 0));
|
---|
56 | end component;
|
---|
57 |
|
---|
58 | signal i_add_3_bits_result_0 : std_logic_vector(3 downto 0);
|
---|
59 | signal i_add_3_bits_result_1 : std_logic_vector(3 downto 0);
|
---|
60 | signal i_add_3_bits_result_2 : std_logic_vector(3 downto 0);
|
---|
61 | signal i_add_3_bits_result_3 : std_logic_vector(3 downto 0);
|
---|
62 |
|
---|
63 | component adder_4_bits is
|
---|
64 | port( a : in std_logic_vector(3 downto 0);
|
---|
65 | b : in std_logic_vector(3 downto 0);
|
---|
66 | clk : in std_logic;
|
---|
67 | s : out std_logic_vector(4 downto 0));
|
---|
68 | end component;
|
---|
69 |
|
---|
70 | signal i_add_4_bits_result_0 : std_logic_vector(4 downto 0);
|
---|
71 | signal i_add_4_bits_result_1 : std_logic_vector(4 downto 0);
|
---|
72 |
|
---|
73 | component adder_5_bits is
|
---|
74 | port( a : in std_logic_vector(4 downto 0);
|
---|
75 | b : in std_logic_vector(4 downto 0);
|
---|
76 | clk : in std_logic;
|
---|
77 | s : out std_logic_vector(5 downto 0));
|
---|
78 | end component;
|
---|
79 |
|
---|
80 | begin
|
---|
81 |
|
---|
82 | -- Component instantiation
|
---|
83 | -- Binary to decimal
|
---|
84 | bin_to_dec_0: unary_to_binary
|
---|
85 | port map( clk_250MHz => clk_250MHz,
|
---|
86 | vector_in => trig_window_0(4 downto 0),
|
---|
87 | result => i_bin_to_dec_result_0);
|
---|
88 |
|
---|
89 | bin_to_dec_1: unary_to_binary
|
---|
90 | port map( clk_250MHz => clk_250MHz,
|
---|
91 | vector_in => trig_window_0(9 downto 5),
|
---|
92 | result => i_bin_to_dec_result_1);
|
---|
93 |
|
---|
94 | bin_to_dec_2: unary_to_binary
|
---|
95 | port map( clk_250MHz => clk_250MHz,
|
---|
96 | vector_in => trig_window_1(4 downto 0),
|
---|
97 | result => i_bin_to_dec_result_2);
|
---|
98 |
|
---|
99 | bin_to_dec_3: unary_to_binary
|
---|
100 | port map( clk_250MHz => clk_250MHz,
|
---|
101 | vector_in => trig_window_1(9 downto 5),
|
---|
102 | result => i_bin_to_dec_result_3);
|
---|
103 |
|
---|
104 | bin_to_dec_4: unary_to_binary
|
---|
105 | port map( clk_250MHz => clk_250MHz,
|
---|
106 | vector_in => trig_window_2(4 downto 0),
|
---|
107 | result => i_bin_to_dec_result_4);
|
---|
108 |
|
---|
109 | bin_to_dec_5: unary_to_binary
|
---|
110 | port map( clk_250MHz => clk_250MHz,
|
---|
111 | vector_in => trig_window_2(9 downto 5),
|
---|
112 | result => i_bin_to_dec_result_5);
|
---|
113 |
|
---|
114 | bin_to_dec_6: unary_to_binary
|
---|
115 | port map( clk_250MHz => clk_250MHz,
|
---|
116 | vector_in => trig_window_3(4 downto 0),
|
---|
117 | result => i_bin_to_dec_result_6);
|
---|
118 |
|
---|
119 | bin_to_dec_7: unary_to_binary
|
---|
120 | port map( clk_250MHz => clk_250MHz,
|
---|
121 | vector_in => trig_window_3(9 downto 5),
|
---|
122 | result => i_bin_to_dec_result_7);
|
---|
123 |
|
---|
124 | -- 3 bits adders
|
---|
125 | inst_3_bits_add_0: adder_3_bits
|
---|
126 | port map( clk => clk_250MHz,
|
---|
127 | a => i_bin_to_dec_result_0,
|
---|
128 | b => i_bin_to_dec_result_1,
|
---|
129 | s => i_add_3_bits_result_0);
|
---|
130 |
|
---|
131 | inst_3_bits_add_1: adder_3_bits
|
---|
132 | port map( clk => clk_250MHz,
|
---|
133 | a => i_bin_to_dec_result_2,
|
---|
134 | b => i_bin_to_dec_result_3,
|
---|
135 | s => i_add_3_bits_result_1);
|
---|
136 |
|
---|
137 | inst_3_bits_add_2: adder_3_bits
|
---|
138 | port map( clk => clk_250MHz,
|
---|
139 | a => i_bin_to_dec_result_4,
|
---|
140 | b => i_bin_to_dec_result_5,
|
---|
141 | s => i_add_3_bits_result_2);
|
---|
142 |
|
---|
143 | inst_3_bits_add_3: adder_3_bits
|
---|
144 | port map( clk => clk_250MHz,
|
---|
145 | a => i_bin_to_dec_result_6,
|
---|
146 | b => i_bin_to_dec_result_7,
|
---|
147 | s => i_add_3_bits_result_3);
|
---|
148 |
|
---|
149 | -- 4 bits adders
|
---|
150 | inst_4_bits_add_0: adder_4_bits
|
---|
151 | port map( clk => clk_250MHz,
|
---|
152 | a => i_add_3_bits_result_0,
|
---|
153 | b => i_add_3_bits_result_1,
|
---|
154 | s => i_add_4_bits_result_0);
|
---|
155 |
|
---|
156 | inst_4_bits_add_1: adder_4_bits
|
---|
157 | port map( clk => clk_250MHz,
|
---|
158 | a => i_add_3_bits_result_2,
|
---|
159 | b => i_add_3_bits_result_3,
|
---|
160 | s => i_add_4_bits_result_1);
|
---|
161 |
|
---|
162 | ---- Final 5 bits adders
|
---|
163 | inst_5_bits_add_0: adder_5_bits
|
---|
164 | port map( clk => clk_250MHz,
|
---|
165 | a => i_add_4_bits_result_0,
|
---|
166 | b => i_add_4_bits_result_1,
|
---|
167 | s => number_of_events);
|
---|
168 |
|
---|
169 | end RTL; |
---|