1 ----------------------------------------------------------------------------------
10 ----------------------------------------------------------------------------------
12 use IEEE.STD_LOGIC_1164.
ALL;
16 -- Uncomment the following library declaration if instantiating
17 -- any Xilinx primitives in this code.
27 DATA24: in arr_word (numactchan-1 downto 0);
28 CLKPAR: in (numactchan - 1 downto 0);
32 del_register: in del_register_type;
--input from VME holding 5 bit delay
33 --for every data and clkpar signal of
36 --upload of the registers into the
109 ia_vme => ADDR_REG_RO_IDELAYCTRL_RDY ,
128 ia_vme => ADDR_REG_RO_IDELAYCTRL_RST ,
147 ia_vme => ADDR_REG_RO_IDELAYCTRL_WAS_RST ,
164 ioctrlgen: for ctrl in 0 to num_IDELAYCTRL - 1 generate
167 --this generates a long clock reset pulse for ioctrl after the MMCM has locked
171 begin -- process rst_ioctrl
192 REFCLK =>
REF_CLK_200,
-- 1-bit reference clock input
196 end generate ioctrlgen;
198 iodelgen_chan: for channel in 0 to numactchan - 1 generate
199 iodelgen_bit: for bitnum in 0 to numbitsinchan - 1 generate
203 CINVCTRL_SEL => FALSE,
-- Enable dynamic clock inversion (TRUE/FALSE)
204 DELAY_SRC =>
"I",
-- Delay input ("I", "CLKIN", "DATAIN", "IO", "O")
205 HIGH_PERFORMANCE_MODE => TRUE,
-- Reduced jitter (TRUE), Reduced power (FALSE)
206 IDELAY_TYPE =>
"VAR_LOADABLE",
-- "DEFAULT", "FIXED", "VARIABLE", or "VAR_LOADABLE"
207 IDELAY_VALUE =>
0,
-- Input delay tap setting (0-31)
208 ODELAY_TYPE =>
"FIXED" ,
-- "FIXED", "VARIABLE", or "VAR_LOADABLE"
209 ODELAY_VALUE =>
0,
-- Output delay tap setting (0-31)
210 REFCLK_FREQUENCY =>
200.0,
-- IDELAYCTRL clock input frequency in MHz
211 SIGNAL_PATTERN =>
"DATA" -- "DATA" or "CLOCK" input signal
214 CNTVALUEOUT =>
open,
-- 5-bit output: Counter value output
215 DATAOUT =>
DELAYED_DATA24(channel
)(bitnum
),
-- 1-bit output: Delayed data output
216 C =>
CLK_40,
-- 1-bit input: Clock input
217 CE => '0',
-- 1-bit input: Active high enable increment/decrement input
218 CINVCTRL => '0',
-- 1-bit input: Dynamic clock inversion input
219 CLKIN => '0',
-- 1-bit input: Clock delay input
220 CNTVALUEIN =>
del_register(channel,bitnum
),
-- 5-bit input: Counter value input
221 DATAIN => '0',
-- 1-bit input: Internal delay data input
222 IDATAIN =>
DATA24 (channel
)(bitnum
),
-- 1-bit input: Data input from the I/O
223 INC => '0',
-- 1-bit input: Increment / Decrement tap delay input
224 ODATAIN => '0',
-- 1-bit input: Output delay data input
225 RST =>
upload_delays ,
-- 1-bit input: Active-high reset tap-delay input
226 T => '1'
-- 1-bit input: 3-state input
229 end generate iodelgen_bit;
233 CINVCTRL_SEL => FALSE,
-- Enable dynamic clock inversion (TRUE/FALSE)
234 DELAY_SRC =>
"I",
-- Delay input ("I", "CLKIN", "DATAIN", "IO", "O")
235 HIGH_PERFORMANCE_MODE => TRUE,
-- Reduced jitter (TRUE), Reduced power (FALSE)
236 IDELAY_TYPE =>
"VAR_LOADABLE",
-- "DEFAULT", "FIXED", "VARIABLE", or "VAR_LOADABLE"
237 IDELAY_VALUE =>
0,
-- Input delay tap setting (0-31)
238 ODELAY_TYPE =>
"FIXED" ,
-- "FIXED", "VARIABLE", or "VAR_LOADABLE"
239 ODELAY_VALUE =>
0,
-- Output delay tap setting (0-31)
240 REFCLK_FREQUENCY =>
200.0,
-- IDELAYCTRL clock input frequency in MHz
241 SIGNAL_PATTERN =>
"CLOCK" -- "DATA" or "CLOCK" input signal
244 CNTVALUEOUT =>
open,
-- 5-bit output: Counter value output
245 DATAOUT =>
DELAYED_CLKPAR(channel
),
-- 1-bit output: Delayed data output
246 C =>
CLK_40,
-- 1-bit input: Clock input
247 CE => '0',
-- 1-bit input: Active high enable increment/decrement input
248 CINVCTRL => '0',
-- 1-bit input: Dynamic clock inversion input
249 CLKIN => '0',
-- 1-bit input: Clock delay input
250 CNTVALUEIN =>
del_register(channel,numbitsinchan
),
-- 5-bit input: Counter value input
251 DATAIN => '0',
-- 1-bit input: Internal delay data input
252 IDATAIN =>
CLKPAR (channel
),
-- 1-bit input: Data input from the I/O
253 INC => '0',
-- 1-bit input: Increment / Decrement tap delay input
254 ODATAIN => '0',
-- 1-bit input: Output delay data input
255 RST =>
upload_delays ,
-- 1-bit input: Active-high reset tap-delay input
256 T => '1'
-- 1-bit input: 3-state input
259 end generate iodelgen_chan;
out data_vme_outstd_logic_vector (15 downto 0)
in data_vme_instd_logic_vector (15 downto 0)
in addr_vmestd_logic_vector (15 downto 0)
out data_vmestd_logic_vector (15 downto 0)
rst_ioctrlREF_CLK_200,REF_CLK_READY
out IDELAYCTRL_RDYstd_logic_vector (num_IDELAYCTRL - 1 downto 0)
std_logic_vector (num_IDELAYCTRL - 1 downto 0) rst_after_clkrdy
vme_outreg_notri_async vme_outreg_reg_ro_idelayctrl_was_rstvme_outreg_reg_ro_idelayctrl_was_rst
idelayctrl idelayctrl_instidelayctrl_inst
std_logic_vector (2 downto 0) bus_drive_from_below
in data_vme_from_belowarr_16
--! inputs from local registers and from
out DELAYED_CLKPARstd_logic_vector (numactchan - 1 downto 0)
arr_ctr_16bit (num_IDELAYCTRL - 1 downto 0) IDELcount_rst_pulse_next
iodelaye1 iodelaye1_inst_dataiodelaye1_inst_data
in REF_CLK_READYstd_logic
vme_outreg_notri_async vme_outreg_reg_ro_idelayctrl_rdyvme_outreg_reg_ro_idelayctrl_rdy
std_logic_vector (15 downto 0) data_to_vme_REG_RO_IDELAYCTRL_WAS_RST
std_logic_vector (15 downto 0) data_to_vme_REG_RO_IDELAYCTRL_RST
in CLKPARstd_logic_vector (numactchan - 1 downto 0)
std_logic_vector (num_IDELAYCTRL - 1 downto 0) IDELAYCTRL_RDY_sig
std_logic_vector (15 downto 0) data_to_vme_REG_RO_IDELAYCTRL_RDY
out data_vme_upstd_logic_vector (15 downto 0)
--! connect this to
in addr_vmestd_logic_vector (15 downto 0)
in upload_delaysstd_logic
out bus_drive_upstd_logic
or of all bus drive requests from below
in del_registerdel_register_type
iodelaye1 iodelaye1_inst_clkpariodelaye1_inst_clkpar
out DELAYED_DATA24arr_word (numactchan - 1 downto 0)
arr_ctr_16bit (num_IDELAYCTRL - 1 downto 0) IDELcount_rst_pulse
in DATA24arr_word (numactchan - 1 downto 0)
vme_outreg_notri_async vme_outreg_reg_ro_idelayctrl_rstvme_outreg_reg_ro_idelayctrl_rst
in data_to_vmestd_logic_vector (width - 1 downto 0)
arr_16 (2 downto 0) data_vme_from_below
in bus_drive_from_belowstd_logic_vector