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_data_tap_inc.vhd,v $
00015 --* $Revision: 1.2.2.4 $ *
00016 --* $Name: dev $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 22:24:27 $ *
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_data_tap_inc.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
00043 library ieee;
00044
00045 use ieee.std_logic_1164.all;
00046
00047 use ieee.std_logic_unsigned.all;
00048
00049 use ieee.numeric_std.all;
00050 -- pragma translate_off
00051
00052 library unisim;
00053
00054 use unisim.vcomponents.all;
00055 -- pragma translate_on
00056
00057
00058
00059
00060
00061
00062 entity ddr2_mem_data_tap_inc is
00063 port (
00064 CAL_CLK : in ;
00065 RESET : in ;
00066 DQS_SEL_DONE : in ;
00067 DATA_DLYINC : out ;
00068 DATA_DLYCE : out ;
00069 DATA_DLYRST : out ;
00070 DATA_TAP_SEL_DONE : out ;
00071 VALID_DATA_TAP_COUNT : in ;
00072 DATA_TAP_COUNT : in (5 downto 0)
00073 );
00074 end entity;
00075
00076
00077
00078
00079
00080
00081 architecture arc_data_tap_inc of ddr2_mem_data_tap_inc is
00082
00083 signal data_dlyinc_clk0 : ;
00084 signal data_dlyce_clk0 : ;
00085 signal data_dlyrst_clk0 : ;
00086 signal data_tap_inc_counter : (5 downto 0);
00087 signal data_tap_sel_clk : ;
00088 signal data_tap_sel_r1 : ;
00089 signal DQS_SEL_DONE_r : ;
00090 signal VALID_DATA_TAP_COUNT_r : ;
00091
00092 begin
00093
00094 DATA_TAP_SEL_DONE <= data_tap_sel_r1;
00095 DATA_DLYINC <= data_dlyinc_clk0;
00096 DATA_DLYCE <= data_dlyce_clk0;
00097 DATA_DLYRST <= data_dlyrst_clk0;
00098
00099
00100 process(CAL_CLK)
00101 begin
00102 if (CAL_CLK'event and CAL_CLK = '1') then
00103 if (RESET = '1') then
00104 DQS_SEL_DONE_r <= '0';
00105 elsif(DQS_SEL_DONE = '1') then
00106 DQS_SEL_DONE_r <= '1';
00107 else
00108 DQS_SEL_DONE_r <= DQS_SEL_DONE_r;
00109 end if;
00110 end if;
00111 end process;
00112
00113
00114 process(CAL_CLK)
00115 begin
00116 if (CAL_CLK'event and CAL_CLK = '1') then
00117 if (RESET = '1') then
00118 data_tap_sel_clk <= '0';
00119 elsif (data_tap_inc_counter(5 downto 0) = "000001") then
00120 data_tap_sel_clk <= '1';
00121 end if;
00122 end if;
00123 end process;
00124
00125
00126 process(CAL_CLK)
00127 begin
00128 if (CAL_CLK'event and CAL_CLK = '1') then
00129 if (RESET = '1') then
00130 data_tap_sel_r1 <= '0';
00131 VALID_DATA_TAP_COUNT_r <= '0';
00132 else
00133 data_tap_sel_r1 <= data_tap_sel_clk;
00134 VALID_DATA_TAP_COUNT_r <= VALID_DATA_TAP_COUNT;
00135 end if;
00136 end if;
00137 end process;
00138
00139
00140 process(CAL_CLK)
00141 begin
00142 if (CAL_CLK'event and CAL_CLK = '1') then
00143 if (RESET = '1' or DQS_SEL_DONE_r = '0') then -- Data IDELAY in no change mode
00144 data_dlyinc_clk0 <= '0';
00145 data_dlyce_clk0 <= '0';
00146 data_dlyrst_clk0 <= '1';
00147 data_tap_inc_counter(5 downto 0) <= "000000";
00148 elsif (VALID_DATA_TAP_COUNT_r = '1') then
00149 data_dlyinc_clk0 <= '0';
00150 data_dlyce_clk0 <= '0';
00151 data_dlyrst_clk0 <= '0';
00152 data_tap_inc_counter(5 downto 0) <= DATA_TAP_COUNT(5 downto 0);
00153 elsif (data_tap_inc_counter(5 downto 0) /= "000000") then -- Data IDELAY incremented
00154 data_dlyinc_clk0 <= '1';
00155 data_dlyce_clk0 <= '1';
00156 data_dlyrst_clk0 <= '0';
00157 data_tap_inc_counter(5 downto 0) <= data_tap_inc_counter(5 downto 0) - "000001";
00158 else -- Data IDELAY no change mode
00159 data_dlyinc_clk0 <= '0';
00160 data_dlyce_clk0 <= '0';
00161 data_dlyrst_clk0 <= '0';
00162 data_tap_inc_counter(5 downto 0) <= "000000";
00163 end if;
00164 end if;
00165 end process;
00166
00167 end arc_data_tap_inc;