CMX
CMX firmware code in-line documentation
 All Classes Namespaces Files Functions Variables
main_sys.vhd
Go to the documentation of this file.
1 
16 
17 LIBRARY ieee;
18 USE ieee.std_logic_1164.all;
19 USE ieee.numeric_std.all;
20 use ieee.std_logic_arith.all;
21 use ieee.std_logic_unsigned.all;
22 LIBRARY work;
23 use work.CMXpackage.all;
25 
26 
27 
28 entity main_sys is
29  generic(
30  numactchan : integer := 16;
32  gen_system : std_logic := '1'
33  );
34  port(
35  clk : in T_SL; -- clock
36  din_cbl : in T_SLV65; -- remote input (multiplicity)
37  din_cbl_ro : in T_SL; -- remote input (overflow)
38  din_lcl : in T_SLV60; -- local input (multiplicity), excluding parity
39  din_lcl_ro : in T_SL; -- local input (overflow)
40  dout : out T_SLV62; -- global output (multiplicity), including parity
41  dout_ro : out T_SL; -- local overflow
42  par_err_cbl : in T_SL; -- parity error
43  force : in T_SL; -- force
44  --VME control:
45  ncs : in std_logic;
46  rd_nwr : in std_logic;
47  ds : in std_logic;
48  addr_vme : in std_logic_vector (15 downto 0);
49  data_vme_in : in std_logic_vector (15 downto 0);
50  data_vme_out : out std_logic_vector (15 downto 0);
51  bus_drive : out std_logic
52  );
53 
54 -- Declarations
55 
56 end main_sys ;
57 
58 
59 architecture struct of main_sys is
60 
61 
62  -- Component Declarations
63  component add3x2
64  port (
65  a : in T_SLV3;
66  b : in T_SLV3;
67  sum : out T_SLV3;
68  clk : in T_SL
69  );
70  end component;
71 
72  component add2x2
73  port (
74  a : in T_SLV2;
75  b : in T_SLV2;
76  sum : out T_SLV2;
77  clk : in T_SL
78  );
79  end component;
80 
81  component parity_gen
82  generic (
83  width : integer := 60
84  );
85  port (
86  din : in std_logic_vector (width-1 downto 0);
87  parity : out std_logic
88  );
89  end component;
90 
91  component CMX_pipeline_module IS
92  GENERIC(
94  PORT(
95  clk : IN std_logic ;
96  din : IN std_logic_vector ;
97  dout : OUT std_logic_vector ;
98  --VME control:
99  ncs : in std_logic;
100  rd_nwr : in std_logic;
101  ds : in std_logic;
102  addr_vme : in std_logic_vector (15 downto 0);
103  data_vme_in : in std_logic_vector (15 downto 0);
104  data_vme_out : out std_logic_vector (15 downto 0);
105  bus_drive : out std_logic
106  );
107  end component CMX_pipeline_module;
108 
109  -- End of component Declarations
110 
111  -- Internal signal declarations
112 
113  signal idout : T_SLV60; -- excluding parity
114  signal hits_dly_d : T_SLV60; -- excluding parity
115  signal parity0 : std_logic;
116  signal parity1 : std_logic;
117 
118  signal din_lcl_spec : T_SLV61;
119  signal hits_dly_d_spec : T_SLV61; -- excluding parity
120  signal din_lcl_ro_d : T_SL; -- local input (overflow delayed)
121  signal par_err_cbl_d0 : T_SL; -- parity error delayed
122  signal dout_tmp : T_SLV62; -- temporary data out
123 
124 
125 begin
126  -- Architecture concurrent statements
127 
128  gen_system_data: if gen_system = '1' generate
129 
130  din_lcl_spec(59 downto 0) <= din_lcl;
131  din_lcl_spec(60) <= din_lcl_ro;
132  hits_dly_d(59 downto 0) <= hits_dly_d_spec(59 downto 0);
134 
135 
137  GENERIC MAP(
139  )
140  PORT MAP(
141  clk => clk,
142  din => din_lcl_spec ,
143  dout => hits_dly_d_spec ,
144  --VME control:
145  ncs => ncs,
146  rd_nwr => rd_nwr,
147  ds => ds,
148  addr_vme => addr_vme,
149  data_vme_in => data_vme_in,
150  data_vme_out => data_vme_out,
151  bus_drive => bus_drive
152  );
153 
154  g0: FOR i IN 0 TO 9 GENERATE
155  I0 : add3x2
156  port map (
157  clk => clk,
158  a => din_cbl ((i*3) + 2 downto i*3), -- 3-bit mutliplicty
159  b => hits_dly_d ((i*3) + 2 downto i*3),
160  sum => idout ((i*3) + 2 downto i*3)
161  );
162  end generate g0;
163 
164  g1: FOR i IN 0 TO 14 GENERATE
165  I0 : add2x2
166  port map (
167  clk => clk,
168  a => din_cbl ((i*2) + 31 downto (i*2) + 30), -- 2-bit multiplicity
169  b => hits_dly_d ((i*2) + 31 downto (i*2) + 30),
170  sum => idout ((i*2) + 31 downto (i*2) + 30)
171  );
172 
173  end generate g1;
174 
175 
176  process(clk)
177  begin
178  if clk'event and clk = '1' then
179  -- global overflow delay
181  -- parity delay
183  end if;
184  end process;
185 
186 
187  end generate gen_system_data;
188 
189 
190  gen_crate_data_only: if gen_system = '0' generate
191 
192 --
193 -- din_cbl(61) & -- parity, mux 1
194 -- din_cbl(60) & -- parity, mux 0
195 -- din_cbl(29 downto 0); -- 3-bit mutliplicty
196 --
197 --
198 -- din_cbl(63) & -- parity, mux 1
199 -- din_cbl(62) & -- parity, mux 0
200 -- din_cbl(59 downto 30); -- 2-bit multiplicity
201 --
202 
203  idout(29 downto 0) <= din_lcl(29 downto 0);
204  idout(59 downto 30) <= din_lcl(59 downto 30);
205 
206  end generate gen_crate_data_only;
207 
209  generic map (
210  width => 30
211  )
212  port map (
213  din => idout(29 downto 0),
214  parity => parity0
215  );
216 
218  generic map (
219  width => 30
220  )
221  port map (
222  din => idout(59 downto 30),
223  parity => parity1
224  );
225 
226 --
227 -- The CTP output
228 --
229  dout_tmp(29 downto 0) <= idout(29 downto 0); -- 3-bit mutliplicty
230  dout_tmp(30) <= parity0;
231  dout_tmp(60 downto 31) <= idout(59 downto 30); -- 2-bit mutliplicty
232  dout_tmp(61) <= parity1;
233 
234 
235  dout <= (others=>'1') when (par_err_cbl_d0 = '1' and force = '1') else dout_tmp;
236 
237 end struct;
std_logic parity0
Definition: main_sys.vhd:115
T_SL par_err_cbl_d0
Definition: main_sys.vhd:121
in addr_vmestd_logic_vector (15 downto 0)
T_SLV49 din_lcl_spec
in din_lcl_roT_SL
Definition: main_sys.vhd:39
T_SLV49 hits_dly_d_spec
in par_err_cblT_SL
Definition: main_sys.vhd:42
add3x2 i0i0
CMX_pipeline_module pipeline_instpipeline_inst
in dinstd_logic_vector
_library_ workwork
Definition: main_crt_vs.vhd:30
out dout_roT_SL
Definition: main_sys.vhd:41
out sumstd_logic_vector (2 downto 0)
Definition: add3x2.vhd:21
out doutstd_logic_vector
std_logic parity1
Definition: main_sys.vhd:116
parity_gen i1_parity1i1_parity1
out doutT_SLV62
Definition: main_sys.vhd:40
gen_systemstd_logic :='1'
Definition: main_sys.vhd:32
in din_cbl_roT_SL
Definition: main_sys.vhd:37
out data_vme_outstd_logic_vector (15 downto 0)
out paritystd_logic
Definition: parity_gen.vhd:24
ADDR_REG_RW_PIPELINE_DELAY_LENGTHinteger :=0
in clkstd_logic
Definition: add3x2.vhd:22
parity_gen i1_parity0i1_parity0
numactchaninteger :=16
Definition: main_sys.vhd:30
in bstd_logic_vector (2 downto 0)
Definition: add3x2.vhd:20
in din_lclT_SLV60
Definition: main_sys.vhd:38
in din_cblT_SLV65
Definition: main_sys.vhd:36
_library_ IEEEIEEE
Definition: main_crt_vs.vhd:24
ADDR_REG_RW_PIPELINE_DELAY_LENGTHinteger :=0
Definition: main_sys.vhd:31
out sumstd_logic_vector (1 downto 0)
Definition: add2x2.vhd:21
widthinteger :=60
Definition: parity_gen.vhd:20
in clkstd_logic
Definition: add2x2.vhd:20
in bstd_logic_vector (1 downto 0)
Definition: add2x2.vhd:19
in clkT_SL
Definition: main_sys.vhd:35
T_SLV48 hits_dly_d
in astd_logic_vector (1 downto 0)
Definition: add2x2.vhd:18
T_SLV62 dout_tmp
Definition: main_sys.vhd:122
in dinstd_logic_vector (width - 1 downto 0)
Definition: parity_gen.vhd:23
in data_vme_instd_logic_vector (15 downto 0)
in astd_logic_vector (2 downto 0)
Definition: add3x2.vhd:19