1 ------------------------------------------------------------------------------- 2 -- File : AxiAds42lb69DeserBit.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2015-03-20 5 -- Last update: 2015-03-23 6 ------------------------------------------------------------------------------- 7 -- Description: ADC DDR Deserializer 8 ------------------------------------------------------------------------------- 9 -- This file is part of 'SLAC Firmware Standard Library'. 10 -- It is subject to the license terms in the LICENSE.txt file found in the 11 -- top-level directory of this distribution and at: 12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 13 -- No part of 'SLAC Firmware Standard Library', including this file, 14 -- may be copied, modified, propagated, or distributed except according to 15 -- the terms contained in the LICENSE.txt file. 16 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.std_logic_unsigned.
all;
21 use ieee.std_logic_arith.
all;
30 --! @ingroup devices_Ti_ads42lb69 38 -- ADC Data (clk domain) 43 -- IO_Delay (delayClk domain) 51 end AxiAds42lb69DeserBit;
60 signal delayOutData1 : slv(8 downto 0);
61 signal delayOutData2 : slv(8 downto 0);
66 attribute IODELAY_GROUP : ;
76 IDELAYE2_inst : IDELAYE2
78 CINVCTRL_SEL =>
"FALSE",
-- Enable dynamic clock inversion (FALSE, TRUE) 79 DELAY_SRC =>
"IDATAIN",
-- Delay input (IDATAIN, DATAIN) 80 HIGH_PERFORMANCE_MODE =>
"FALSE",
-- Reduced jitter ("TRUE"), Reduced power ("FALSE") 81 IDELAY_TYPE =>
"VAR_LOAD",
-- FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE 82 IDELAY_VALUE => conv_integer
(DELAY_INIT_G(4 downto 0)),
-- Input delay tap setting (0-31) 83 PIPE_SEL =>
"FALSE",
-- Select pipelined mode, FALSE, TRUE 84 REFCLK_FREQUENCY =>
200.0,
-- IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0). 85 SIGNAL_PATTERN =>
"DATA") -- DATA, CLOCK input signal 87 CNTVALUEOUT =>
delayOutData(4 downto 0),
-- 5-bit output: Counter value output 88 DATAOUT => dataDly,
-- 1-bit output: Delayed data output 89 C =>
delayClk,
-- 1-bit input: Clock input 90 CE => '0',
-- 1-bit input: Active high enable increment/decrement input 91 CINVCTRL => '0',
-- 1-bit input: Dynamic clock inversion input 92 CNTVALUEIN =>
delayInData(4 downto 0),
-- 5-bit input: Counter value input 93 DATAIN => '0',
-- 1-bit input: Internal delay data input 94 IDATAIN =>
data,
-- 1-bit input: Data input from the I/O 95 INC => '0',
-- 1-bit input: Increment / Decrement tap delay input 96 LD => '1',
-- 1-bit input: Load IDELAY_VALUE input 97 LDPIPEEN => '0',
-- 1-bit input: Enable PIPELINE register to load data input 98 REGRST =>
delayInLoad);
-- 1-bit input: Active-high reset tap-delay input 102 DDR_CLK_EDGE =>
"SAME_EDGE_PIPELINED",
-- "OPPOSITE_EDGE", "SAME_EDGE", or "SAME_EDGE_PIPELINED" 103 INIT_Q1 => '0',
-- Initial value of Q1: '0' or '1' 104 INIT_Q2 => '0',
-- Initial value of Q2: '0' or '1' 105 SRTYPE =>
"SYNC") -- Set/Reset type: "SYNC" or "ASYNC" 107 D => dataDly,
-- 1-bit DDR data input 108 C =>
clk,
-- 1-bit clock input 109 CE => '1',
-- 1-bit clock enable input 110 R => '0',
-- 1-bit reset 111 S => '0',
-- 1-bit set 112 Q1 =>
Q1,
-- 1-bit output for positive edge of clock 113 Q2 =>
Q2);
-- 1-bit output for negative edge of clock 117 GEN_ULTRASCALE : if (XIL_DEVICE_G = "ULTRASCALE") generate 119 -- when DELAY_FORMAT is "COUNT" the delay is not PVT calibrated 120 -- Therefore, do not use an IDELAYCTRL component 121 -- Leave the REFCLK_FREQUENCY attribute at the default value (300 MHz). 122 -- Tie the EN_VTC input pin Low 130 IDELAYE3_inst : IDELAYE3
132 CASCADE =>
"MASTER",
-- Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE) 133 DELAY_FORMAT =>
"COUNT",
-- Units of the DELAY_VALUE (COUNT, TIME) 134 DELAY_SRC =>
"IDATAIN",
-- Delay input (DATAIN, IDATAIN) 135 DELAY_TYPE =>
"VAR_LOAD",
-- Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD) 136 DELAY_VALUE => conv_integer
(DELAY_INIT_G),
-- Input delay value setting 137 IS_CLK_INVERTED => '0',
-- Optional inversion for CLK 138 IS_RST_INVERTED => '0',
-- Optional inversion for RST 139 REFCLK_FREQUENCY =>
300.0,
-- IDELAYCTRL clock input frequency in MHz (200.0-2400.0) 140 UPDATE_MODE =>
"ASYNC") -- Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC) 142 CASC_IN => '0',
-- 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT 143 CASC_OUT => cascOut,
-- 1-bit output: Cascade delay output to ODELAY input cascade 144 CASC_RETURN => cascRet,
-- 1-bit input: Cascade delay returning from slave ODELAY DATAOUT 145 DATAIN => '0',
-- 1-bit input: Data input from the logic 146 IDATAIN =>
data,
-- 1-bit input: Data input from the IOBUF 147 DATAOUT => dataDly,
-- 1-bit output: Delayed data output 148 CLK =>
delayClk,
-- 1-bit input: Clock input 149 EN_VTC => '0',
-- 1-bit input: Keep delay constant over VT 150 INC => '0',
-- 1-bit input: Increment / Decrement tap delay input 151 CE => '0',
-- 1-bit input: Active high enable increment/decrement input 152 LOAD =>
delayInLoad,
-- 1-bit input: Load DELAY_VALUE input 153 RST =>
delayRst,
-- 1-bit input: Asynchronous Reset to the DELAY_VALUE 154 CNTVALUEIN =>
delayInData,
-- 9-bit input: Counter value input 155 CNTVALUEOUT => delayOutData1
);
-- 9-bit output: Counter value output 157 ODELAYE3_inst : ODELAYE3
159 CASCADE =>
"SLAVE_END",
-- Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE) 160 DELAY_FORMAT =>
"COUNT",
-- Units of the DELAY_VALUE (COUNT, TIME) 161 DELAY_TYPE =>
"VAR_LOAD",
-- Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD) 162 DELAY_VALUE => conv_integer
(DELAY_INIT_G),
-- Input delay value setting 163 IS_CLK_INVERTED => '0',
-- Optional inversion for CLK 164 IS_RST_INVERTED => '0',
-- Optional inversion for RST 165 REFCLK_FREQUENCY =>
300.0,
-- IDELAYCTRL clock input frequency in MHz (200.0-2400.0) 166 UPDATE_MODE =>
"ASYNC") -- Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC) 168 CASC_IN => cascOut,
-- 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT 169 CASC_OUT =>
open,
-- 1-bit output: Cascade delay output to IDELAY input cascade 170 CASC_RETURN => '0',
-- 1-bit input: Cascade delay returning from slave IDELAY DATAOUT 171 ODATAIN => '0',
-- 1-bit input: Data input 172 DATAOUT => cascRet,
-- 1-bit output: Delayed data from ODATAIN input port 173 CLK =>
delayClk,
-- 1-bit input: Clock input 174 EN_VTC => '0',
-- 1-bit input: Keep delay constant over VT 175 INC => '0',
-- 1-bit input: Increment / Decrement tap delay input 176 CE => '0',
-- 1-bit input: Active high enable increment/decrement input 177 LOAD =>
delayInLoad,
-- 1-bit input: Load DELAY_VALUE input 178 RST =>
delayRst,
-- 1-bit input: Asynchronous Reset to the DELAY_VALUE 179 CNTVALUEIN =>
delayInData,
-- 9-bit input: Counter value input 180 CNTVALUEOUT => delayOutData2
);
-- 9-bit output: Counter value output 182 delayOutData <= resize(delayOutData1, 10, '0') + delayOutData2;
186 DDR_CLK_EDGE =>
"SAME_EDGE_PIPELINED",
-- "OPPOSITE_EDGE", "SAME_EDGE", or "SAME_EDGE_PIPELINED" 187 IS_C_INVERTED => '0'
) 189 D => dataDly,
-- 1-bit DDR data input 190 C =>
clk,
-- 1-bit clock input 191 CB => clkb,
-- 1-bit inverted clock input 192 R => '0',
-- 1-bit reset 193 Q1 =>
Q1,
-- 1-bit output for positive edge of clock 194 Q2 =>
Q2);
-- 1-bit output for negative edge of clock
out delayOutDataslv( 9 downto 0)
IODELAY_GROUP_Gstring := "AXI_ADS42LB69_IODELAY_GRP"
DELAY_INIT_Gslv( 8 downto 0) :=( others => '0')
in delayInDataslv( 8 downto 0)
XIL_DEVICE_Gstring := "7SERIES"