00001 --**************************************************************
00002 --* *
00003 --* The source code for the ATLAS BCM "AAA" FPGA is made *
00004 --* available via the GNU General Public License (GPL) *
00005 --* unless otherwise stated below. *
00006 --* *
00007 --* In case of problems/questions/bug reports etc. please *
00008 --* contact michael.niegl@cern.ch *
00009 --* *
00010 --**************************************************************
00011
00012 --**************************************************************
00013 --* *
00014 --* $Source: /local/reps/bcmfpga/bcm_aaa/bcm_aaa/ddr2/ddr2_mem_tap_logic_0.vhd,v $
00015 --* $Revision: 1.3.2.4 $ *
00016 --* $Name: dev $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 18:48:14 $ *
00019
00020
00021 --* *
00022 --**************************************************************
00023 -------------------------------------------------------------------------------
00024 -- Copyright (c) 2005 Xilinx, Inc.
00025 -- This design is confidential and proprietary of Xilinx, All Rights Reserved.
00026 -------------------------------------------------------------------------------
00027 -- ____ ____
00028 -- / /\/ /
00029 -- /___/ \ / Vendor: Xilinx
00030 -- \ \ \/ Version: 1.6
00031 -- \ \ Application : MIG
00032 -- / / Filename: ddr2_mem_tap_logic_0.vhd
00033 -- /___/ /\ Date Last Modified: Wed Jun 1 2005
00034 -- \ \ / \Date Created: Mon May 2 2005
00035 -- \___\/\___\
00036 --
00037 -- Device: Virtex-4
00038 -- Design Name: DDR2_V4
00039 -- Description :
00040 -------------------------------------------------------------------------------
00041
00042 library ieee;
00043
00044 use ieee.std_logic_1164.all;
00045
00046 use ieee.std_logic_unsigned.all;
00047
00048 use ieee.numeric_std.all;
00049 library work;
00050 use work.ddr2_mem_parameters_0.all;
00051 -- pragma translate_off
00052
00053 library unisim;
00054
00055 use unisim.vcomponents.all;
00056 -- pragma translate_on
00057
00058
00059
00060
00061 entity ddr2_mem_tap_logic_0 is
00062 port (
00063 CLK : in ;
00064 CAL_CLK : in ;
00065 RESET0 : in ;
00066 RESET_CAL_CLK : in ;
00067 CTRL_DUMMYREAD_START : in ;
00068 idelay_ctrl_rdy : in ;
00069 dqs_delayed : in (data_strobe_width-1 downto 0);
00070 data_idelay_inc : out (ReadEnable-1 downto 0);
00071 data_idelay_ce : out (ReadEnable-1 downto 0);
00072 data_idelay_rst : out (ReadEnable-1 downto 0);
00073 dqs_idelay_inc : out (ReadEnable-1 downto 0);
00074 dqs_idelay_ce : out (ReadEnable-1 downto 0);
00075 dqs_idelay_rst : out (ReadEnable-1 downto 0);
00076 SEL_DONE : out
00077 );
00078 end entity;
00079
00080
00081
00082
00083 architecture arc_tap_logic of ddr2_mem_tap_logic_0 is
00084
00085
00086 component ddr2_mem_tap_ctrl
00087 port (
00088 CAL_CLK : in ;
00089 RESET : in ;
00090 RDY_STATUS : in ;
00091 DQS : in ;
00092 CTRL_DUMMYREAD_START : in ;
00093 DLYINC : out ;
00094 DLYCE : out ;
00095 DLYRST : out ;
00096 SEL_DONE : out ;
00097 VALID_DATA_TAP_COUNT : out ;
00098 DATA_TAP_COUNT : out (5 downto 0)
00099 );
00100 end component;
00101
00102
00103 component ddr2_mem_data_tap_inc
00104 port (
00105 CAL_CLK : in ;
00106 RESET : in ;
00107 DQS_SEL_DONE : in ;
00108 DATA_DLYINC : out ;
00109 DATA_DLYCE : out ;
00110 DATA_DLYRST : out ;
00111 DATA_TAP_SEL_DONE : out ;
00112 VALID_DATA_TAP_COUNT : in ;
00113 DATA_TAP_COUNT : in (5 downto 0)
00114 );
00115 end component;
00116
00117 signal data_tap_select : (ReadEnable-1 downto 0);
00118 signal dqs_tap_sel_done : (ReadEnable-1 downto 0);
00119 signal valid_tap_count : (ReadEnable-1 downto 0);
00120 signal data_tap_count0 : (5 downto 0);
00121 signal data_tap_count1 : (5 downto 0);
00122 signal data_tap_count2 : (5 downto 0);
00123 signal data_tap_inc_done : ;
00124 signal tap_sel_done : ;
00125
00126 begin
00127
00128 SEL_DONE <= tap_sel_done;
00129
00130
00131 process(CLK)
00132 begin
00133 if CLK'event and CLK = '1' then
00134 if (RESET0 = '1') then
00135 data_tap_inc_done <= '0';
00136 tap_sel_done <= '0';
00137 else
00138 data_tap_inc_done <= data_tap_select(0) and data_tap_select(1) and data_tap_select(2);
00139 tap_sel_done <= data_tap_inc_done;
00140 end if;
00141 end if;
00142 end process;
00143
00144 --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00145 --// tap_ctrl instances for DDR_DQS strobes
00146 --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00147
00148 tap_ctrl_0 : ddr2_mem_tap_ctrl
00149 port map (
00150 CAL_CLK => CAL_CLK,
00151 RESET => RESET_CAL_CLK,
00152 RDY_STATUS => idelay_ctrl_rdy ,
00153 DQS => dqs_delayed(3),
00154 CTRL_DUMMYREAD_START => CTRL_DUMMYREAD_START,
00155 DLYINC => dqs_idelay_inc(0),
00156 DLYCE => dqs_idelay_ce(0),
00157 DLYRST => dqs_idelay_rst(0),
00158 SEL_DONE => dqs_tap_sel_done (0),
00159 VALID_DATA_TAP_COUNT => valid_tap_count(0),
00160 DATA_TAP_COUNT => data_tap_count0(5 downto 0)
00161 );
00162
00163
00164 tap_ctrl_1 : ddr2_mem_tap_ctrl
00165 port map (
00166 CAL_CLK => CAL_CLK,
00167 RESET => RESET_CAL_CLK,
00168 RDY_STATUS => idelay_ctrl_rdy ,
00169 DQS => dqs_delayed(7),
00170 CTRL_DUMMYREAD_START => CTRL_DUMMYREAD_START,
00171 DLYINC => dqs_idelay_inc(1),
00172 DLYCE => dqs_idelay_ce(1),
00173 DLYRST => dqs_idelay_rst(1),
00174 SEL_DONE => dqs_tap_sel_done (1),
00175 VALID_DATA_TAP_COUNT => valid_tap_count(1),
00176 DATA_TAP_COUNT => data_tap_count1(5 downto 0)
00177 );
00178
00179
00180 tap_ctrl_2 : ddr2_mem_tap_ctrl
00181 port map (
00182 CAL_CLK => CAL_CLK,
00183 RESET => RESET_CAL_CLK,
00184 RDY_STATUS => idelay_ctrl_rdy ,
00185 DQS => dqs_delayed(1),
00186 CTRL_DUMMYREAD_START => CTRL_DUMMYREAD_START,
00187 DLYINC => dqs_idelay_inc(2),
00188 DLYCE => dqs_idelay_ce(2),
00189 DLYRST => dqs_idelay_rst(2),
00190 SEL_DONE => dqs_tap_sel_done (2),
00191 VALID_DATA_TAP_COUNT => valid_tap_count(2),
00192 DATA_TAP_COUNT => data_tap_count2(5 downto 0)
00193 );
00194
00195 --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00196 --// instances of data_tap_inc for each dqs and associated tap_ctrl
00197 --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00198
00199 data_tap_inc_0 : ddr2_mem_data_tap_inc
00200 port map (
00201 CAL_CLK => CAL_CLK,
00202 RESET => RESET_CAL_CLK,
00203 DQS_SEL_DONE => dqs_tap_sel_done (0),
00204 DATA_DLYINC => data_idelay_inc (0),
00205 DATA_DLYCE => data_idelay_ce(0),
00206 DATA_DLYRST => data_idelay_rst (0),
00207 DATA_TAP_SEL_DONE => data_tap_select(0),
00208 VALID_DATA_TAP_COUNT => valid_tap_count(0),
00209 DATA_TAP_COUNT => data_tap_count0(5 downto 0)
00210 );
00211
00212
00213 data_tap_inc_1 : ddr2_mem_data_tap_inc
00214 port map (
00215 CAL_CLK => CAL_CLK,
00216 RESET => RESET_CAL_CLK,
00217 DQS_SEL_DONE => dqs_tap_sel_done (1),
00218 DATA_DLYINC => data_idelay_inc (1),
00219 DATA_DLYCE => data_idelay_ce(1),
00220 DATA_DLYRST => data_idelay_rst (1),
00221 DATA_TAP_SEL_DONE => data_tap_select(1),
00222 VALID_DATA_TAP_COUNT => valid_tap_count(1),
00223 DATA_TAP_COUNT => data_tap_count1(5 downto 0)
00224 );
00225
00226
00227 data_tap_inc_2 : ddr2_mem_data_tap_inc
00228 port map (
00229 CAL_CLK => CAL_CLK,
00230 RESET => RESET_CAL_CLK,
00231 DQS_SEL_DONE => dqs_tap_sel_done (2),
00232 DATA_DLYINC => data_idelay_inc (2),
00233 DATA_DLYCE => data_idelay_ce(2),
00234 DATA_DLYRST => data_idelay_rst (2),
00235 DATA_TAP_SEL_DONE => data_tap_select(2),
00236 VALID_DATA_TAP_COUNT => valid_tap_count(2),
00237 DATA_TAP_COUNT => data_tap_count2(5 downto 0)
00238 );
00239
00240 end arc_tap_logic;