1 ------------------------------------------------------------------------------- 2 -- File : AxiAds42lb69Deser.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2015-03-20 5 -- Last update: 2015-05-19 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;
27 use unisim.vcomponents.
all;
30 --! @ingroup devices_Ti_ads42lb69 49 -- ADC Data Interface (adcClk domain) 53 -- Register Interface (axiClk domain) 63 end AxiAds42lb69Deser;
68 signal dmux : slv(1 downto 0);
94 -- ADC Reference Signals 110 attribute IODELAY_GROUP : ;
114 IDELAYCTRL_Inst : IDELAYCTRL
116 RDY => delayOut.rdy,
-- 1-bit output: Ready output 117 REFCLK =>
refClk200MHz,
-- 1-bit input: Reference clock input 118 RST => rstSync
);
-- 1-bit input: Active high reset input 120 Sync_delayIn_rst :
entity work.
RstSync 132 for ch in 1 downto 0 generate 134 for i in 7 downto 0 generate 143 -- ADC Data (clk domain) 146 Q1 => adcDataPs
(ch
)(i
),
147 Q2 => adcDataNs
(ch
)(i
),
148 -- IO_Delay (delayClk domain) 157 end generate GEN_DAT;
162 if rising_edge(adcClock) then 163 adcDataP(ch) <= adcDataPs(ch) after TPD_G;
164 adcDataN(ch) <= adcDataNs(ch) after TPD_G;
165 adcDataNd(ch) <= adcDataN(ch) after TPD_G;
166 if dmux(ch) = '0' then 167 adcDmuxA(ch) <= adcDataNd(ch) after TPD_G;
168 adcDmuxB(ch) <= adcDataP(ch) after TPD_G;
170 adcDmuxA(ch) <= adcDataP(ch) after TPD_G;
171 adcDmuxB(ch) <= adcDataN(ch) after TPD_G;
173 for i in 7 downto 0 loop 174 data(ch)(2*i+1) <= adcDmuxB(ch)(i) after TPD_G;
175 data(ch)(2*i) <= adcDmuxA(ch)(i) after TPD_G;
186 -- Asynchronous Reset 188 --Write Ports (wr_clk domain) 191 --Read Ports (rd_clk domain)
out delayOutDataslv( 9 downto 0)
in dinslv( DATA_WIDTH_G- 1 downto 0)
XIL_DEVICE_Gstring := "7SERIES"
IODELAY_GROUP_Gstring := "AXI_ADS42LB69_IODELAY_GRP"
DELAY_INIT_Gslv( 8 downto 0) :=( others => '0')
in dataPSlv8Array( 1 downto 0)
out delayOutAxiAds42lb69DelayOutType
in delayInDataslv( 8 downto 0)
DELAY_INIT_GSlv9VectorArray ( 1 downto 0, 7 downto 0):=( others =>( others =>( others => '0')))
in dataInslv( WIDTH_G- 1 downto 0)
ADC_CLK_FREQ_Greal := 250.0E+6
out doutslv( DATA_WIDTH_G- 1 downto 0)
IODELAY_GROUP_Gstring := "AXI_ADS42LB69_IODELAY_GRP"
RELEASE_DELAY_Ginteger range 3 to positive'high:= 3
XIL_DEVICE_Gstring := "7SERIES"
COMMON_CLK_Gboolean := false
out adcDataSlv16Array( 1 downto 0)
ADC_CLK_FREQ_Greal := 250.0E+6
out dataOutslv( WIDTH_G- 1 downto 0)
in dataNSlv8Array( 1 downto 0)
array(natural range <> ) of slv( 15 downto 0) Slv16Array
in delayInAxiAds42lb69DelayInType
array(natural range <> ,natural range <> ) of slv( 8 downto 0) Slv9VectorArray
array(natural range <> ) of slv( 7 downto 0) Slv8Array
USE_PLL_Gboolean := false
XIL_DEVICE_Gstring := "7SERIES"
DATA_WIDTH_Ginteger range 1 to ( 2** 24):= 16