8 ----------------------------------------------------------------------------------
10 use IEEE.STD_LOGIC_1164.
ALL;
16 -- Uncomment the following library declaration if using
17 -- arithmetic functions with Signed or Unsigned values
18 --use IEEE.NUMERIC_STD.ALL;
20 -- Uncomment the following library declaration if instantiating
21 -- any Xilinx primitives in this code.
34 ncs : in ;
--ports forwarded to the vme register instances
41 del_register : out del_register_type;
-- result read from the registers;
44 end CMX_delay_generator;
93 --note no -1 on because clock line adds one signal
94 --signal write_detect : std_logic_vector(numactchan*(numbitsinchan+1) - 1 downto 0);
95 signal data_from_vme : arr_16( numactchan*(numbitsinchan+1) - 1 downto 0);
96 signal data_to_vme : arr_16( numactchan*(numbitsinchan+1) - 1 downto 0);
111 gen_inreg_assign_chan: for ichannel in numactchan-1 downto 0 generate
112 --no -1 because the clock adds one:
113 gen_inreg_assign_sig: for ibit in numbitsinchan downto 0 generate
115 --all register except for the last one are acynchroneous
116 gen_async: if ichannel /= numactchan-1 or ibit /= numbitsinchan generate
117 --ireg=ichannel*(numbitsinchan+1)+ibit --(+1 is for clock)
121 ia_vme => start_address+2*
(ichannel*
(numbitsinchan+1
)+ibit
),
134 --vme_inreg_async_inst: vme_inreg_async
136 -- ia_vme => start_address+2*(ichannel*(numbitsinchan+1)+ibit),
142 -- addr_vme => addr_vme,
143 -- data_vme => data_vme,
144 -- data_from_vme => data_from_vme(ichannel*(numbitsinchan+1)+ibit),
145 -- data_to_vme => data_to_vme(ichannel*(numbitsinchan+1)+ibit));
147 end generate gen_async;
149 gen_sync: if ichannel = numactchan-1 and ibit = numbitsinchan generate
150 --ireg=ichannel*(numbitsinchan+1)+ibit --(+1 is for clock)
153 ia_vme => start_address+2*
(ichannel*
(numbitsinchan+1
)+ibit
),
169 --vme_inreg_sync_inst: vme_inreg
171 -- ia_vme => start_address+2*(ichannel*(numbitsinchan+1)+ibit),
178 -- addr_vme => addr_vme,
179 -- data_vme => data_vme,
180 -- data_from_vme => data_from_vme(ichannel*(numbitsinchan+1)+ibit),
181 -- data_to_vme => data_to_vme(ichannel*(numbitsinchan+1)+ibit),
182 -- read_detect => open,
183 -- write_detect => upload_delays);
184 end generate gen_sync;
191 end generate gen_inreg_assign_sig;
192 end generate gen_inreg_assign_chan;
194 --upload_delays<=write_detect(write_detect'high);
out data_vme_outstd_logic_vector (15 downto 0)
in addr_vmestd_logic_vector (15 downto 0)
out data_vme_outstd_logic_vector (15 downto 0)
in addr_vmestd_logic_vector (15 downto 0)
out data_from_vmestd_logic_vector (width - 1 downto 0)
out del_registerdel_register_type
in data_vme_from_belowarr_16
--! inputs from local registers and from
out data_from_vmestd_logic_vector (width - 1 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
out write_detectstd_logic
std_logic_vector (numactchan * (numbitsinchan + 1) - 1 downto 0) bus_drive_local)
out upload_delaysstd_logic
in data_to_vmestd_logic_vector (width - 1 downto 0)
out data_vme_upstd_logic_vector (15 downto 0)
--! connect this to
arr_16 (numactchan * (numbitsinchan + 1) - 1 downto 0) data_from_vme)
arr_16 (numactchan * (numbitsinchan + 1) - 1 downto 0) data_vme_out_local)
out bus_drive_upstd_logic
or of all bus drive requests from below
arr_16 (numactchan * (numbitsinchan + 1) - 1 downto 0) data_to_vme)
in addr_vmestd_logic_vector (15 downto 0)
in data_to_vmestd_logic_vector (width - 1 downto 0)
out data_vme_outstd_logic_vector (15 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
in bus_drive_from_belowstd_logic_vector