SURF  1.0
AxiAd9467Core.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : AxiAd9467Core.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2014-09-23
5 -- Last update: 2014-09-24
6 -------------------------------------------------------------------------------
7 -- Description: AXI-Lite interface to AD9467 ADC IC
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 -------------------------------------------------------------------------------
17 
18 library ieee;
19 use ieee.std_logic_1164.all;
20 
21 use work.StdRtlPkg.all;
22 use work.AxiLitePkg.all;
23 use work.AxiAd9467Pkg.all;
24 
25 --! @see entity
26  --! @ingroup devices_AnalogDevices_ad9467
27 entity AxiAd9467Core is
28  generic (
29  TPD_G : time := 1 ns;
30  STATUS_CNT_WIDTH_G : natural range 1 to 32 := 32;
31  AXI_CLK_FREQ_G : real := 125.0E+6; -- units of Hz
32  ADC_CLK_FREQ_G : real := 250.0E+6; -- units of Hz
34  DEMUX_INIT_G : sl := '0';
35  DELAY_INIT_G : Slv5Array(0 to 7) := (others => "00000");
36  IODELAY_GROUP_G : string := "AXI_AD9467_IODELAY_GRP");
37  port (
38  -- ADC Ports
42  -- ADC Data Interface (adcClk domain)
43  adcClk : in sl;
44  adcRst : in sl;
45  adcData : out slv(15 downto 0);
46  -- IDELAY Reference clock
48  -- AXI-Lite Register Interface (axiClk domain)
49  axiClk : in sl;
50  axiRst : in sl;
55 end AxiAd9467Core;
56 
57 architecture mapping of AxiAd9467Core is
58 
61 
62 begin
63 
65 
66  AxiAd9467Reg_Inst : entity work.AxiAd9467Reg
67  generic map(
68  TPD_G => TPD_G,
73  port map(
74  -- AXI-Lite Register Interface
75  axiClk => axiClk,
76  axiRst => axiRst,
81  -- Register Inputs/Outputs
82  status => status,
83  config => config,
84  -- Clock and reset
85  adcClk => adcClk,
86  adcRst => adcRst,
87  refClk200Mhz => refClk200Mhz);
88 
89  AxiAd9467Spi_Inst : entity work.AxiAd9467Spi
90  generic map(
91  TPD_G => TPD_G,
93  port map (
94  --ADC SPI I/O ports
95  adcCs => adcOut.cs,
96  adcSck => adcOut.sck,
97  adcSdio => adcInOut.sdio,
98  -- AXI-Lite Interface
99  axiClk => axiClk,
100  axiRst => axiRst,
101  adcSpiIn => config.spi,
102  adcSpiOut => status.spi);
103 
104  AxiAd9467Pll_Inst : entity work.AxiAd9467Pll
105  generic map(
106  TPD_G => TPD_G,
108  port map (
109  -- ADC Clocking ports
110  adcClkOutP => adcOut.clkP,
111  adcClkOutN => adcOut.clkN,
112  adcClkInP => adcIn.clkP,
113  adcClkInN => adcIn.clkN,
114  -- PLL Status
115  pllLocked => status.pllLocked,
116  -- ADC Reference Signals
117  adcClk => adcClk,
118  adcRst => adcRst);
119 
120  AxiAd9467Deser_Inst : entity work.AxiAd9467Deser
121  generic map(
122  TPD_G => TPD_G,
125  port map (
126  --ADC I/O ports
127  adcDataOrP => adcIn.orP,
128  adcDataOrN => adcIn.orN,
129  adcDataInP => adcIn.dataP,
130  adcDataInN => adcIn.dataN,
131  -- ADC Interface
132  adcClk => adcClk,
133  adcRst => adcRst,
134  adcData => status.adcData,
135  -- IDELAY Interface
137  delayin => config.delay,
138  delayOut => status.delay);
139 
140  AxiAd9467Mon_Inst : entity work.AxiAd9467Mon
141  generic map (
142  TPD_G => TPD_G,
144  port map (
145  adcClk => adcClk,
146  adcRst => adcRst,
147  adcData => status.adcData,
148  adcDataMon => status.adcDataMon);
149 
150 end mapping;
in adcDataInNslv( 7 downto 0)
in statusAxiAd9467StatusType
in adcDataInPslv( 7 downto 0)
AXI_CLK_FREQ_Greal := 125.0E+6
out adcClkOutPsl
AxiAd9467ConfigType config
out adcDataslv( 15 downto 0)
DELAY_INIT_GSlv5Array( 0 to 7) :=( others => "00000")
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
AxiLiteWriteMasterType
Definition: AxiLitePkg.vhd:111
std_logic sl
Definition: StdRtlPkg.vhd:28
out axiWriteSlaveAxiLiteWriteSlaveType
STATUS_CNT_WIDTH_Gnatural range 1 to 32:= 32
TPD_Gtime := 1 ns
IODELAY_GROUP_Gstring := "AXI_AD9467_IODELAY_GRP"
out adcClkOutNsl
out pllLockedsl
IODELAY_GROUP_Gstring := "AXI_AD9467_IODELAY_GRP"
in adcDataslv( 15 downto 0)
TPD_Gtime := 1 ns
DEMUX_INIT_Gsl := '0'
TPD_Gtime := 1 ns
inout adcInOutAxiAd9467InOutType
out axiReadSlaveAxiLiteReadSlaveType
TPD_Gtime := 1 ns
DELAY_INIT_GSlv5Array( 0 to 7) :=( others => "00000")
ADC_CLK_FREQ_Greal := 250.0E+6
out delayOutAxiAd9467DelayOutType
out adcDataMonSlv16Array( 0 to 15)
TPD_Gtime := 1 ns
out axiReadSlaveAxiLiteReadSlaveType
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
Definition: AxiLitePkg.vhd:36
STATUS_CNT_WIDTH_Gnatural range 1 to 32:= 32
in adcInAxiAd9467InType
AXI_CLK_FREQ_Greal := 125.0E+6
in axiReadMasterAxiLiteReadMasterType
AxiAd9467StatusType status
out adcDataslv( 15 downto 0)
AxiLiteReadMasterType
Definition: AxiLitePkg.vhd:59
in axiWriteMasterAxiLiteWriteMasterType
ADC_CLK_FREQ_Greal := 250.0E+6
out adcOutAxiAd9467OutType
in delayinAxiAd9467DelayInType
out adcSpiOutAxiAd9467SpiOutType
in axiWriteMasterAxiLiteWriteMasterType
AxiLiteReadSlaveType
Definition: AxiLitePkg.vhd:85
array(natural range <> ) of slv( 4 downto 0) Slv5Array
Definition: StdRtlPkg.vhd:406
DEMUX_INIT_Gsl := '0'
out configAxiAd9467ConfigType
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
inout adcSdiosl
ADC_CLK_FREQ_Greal := 250.0E+6
in adcSpiInAxiAd9467SpiInType
DELAY_INIT_GSlv5Array( 0 to 7) :=( others => "00000")
TPD_Gtime := 1 ns
out axiWriteSlaveAxiLiteWriteSlaveType
in axiReadMasterAxiLiteReadMasterType
std_logic_vector slv
Definition: StdRtlPkg.vhd:29