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_rd_data_0.vhd,v $
00015 --* $Revision: 1.3.2.5 $ *
00016 --* $Name: $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 23:46:50 $ *
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_rd_data_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 -------------------------------------------------------------------------------
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
00062
00063 entity ddr2_mem_rd_data_0 is
00064 port (
00065 CLK : in ;
00066 RESET : in ;
00067 CTRL_RDEN : in ;
00068 READ_DATA_RISE : in (data_width-1 downto 0);
00069 READ_DATA_FALL : in (data_width-1 downto 0);
00070 READ_DATA_FIFO_RISE : out (data_width-1 downto 0);
00071 READ_DATA_FIFO_FALL : out (data_width-1 downto 0);
00072 READ_DATA_VALID : out ;
00073 COMP_DONE : out
00074 );
00075 end entity;
00076
00077
00078
00079
00080
00081
00082 architecture arc_rd_data of ddr2_mem_rd_data_0 is
00083
00084
00085 component ddr2_mem_rd_data_fifo_0
00086 port (
00087 CLK : in ;
00088 RESET : in ;
00089 FIFO_RD_EN : in ;
00090 READ_EN_DELAYED_RISE : in ;
00091 READ_EN_DELAYED_FALL : in ;
00092 FIRST_RISING : in ;
00093 READ_DATA_RISE : in (memory_width-1 downto 0);
00094 READ_DATA_FALL : in (memory_width-1 downto 0);
00095 READ_DATA_FIFO_RISE : out (memory_width-1 downto 0);
00096 READ_DATA_FIFO_FALL : out (memory_width-1 downto 0);
00097 READ_DATA_VALID : out
00098 );
00099 end component;
00100
00101
00102 component ddr2_mem_pattern_compare4
00103 port(clk : in ;
00104 rst : in ;
00105 ctrl_rden : in ;
00106 rd_data_rise : in (3 downto 0);
00107 rd_data_fall : in (3 downto 0);
00108 comp_done : out ;
00109 first_rising : out ;
00110 rd_en_rise : out ;
00111 rd_en_fall : out
00112 );
00113 end component;
00114
00115
00116 component ddr2_mem_pattern_compare8
00117 port(clk : in ;
00118 rst : in ;
00119 ctrl_rden : in ;
00120 rd_data_rise : in (7 downto 0);
00121 rd_data_fall : in (7 downto 0);
00122 comp_done : out ;
00123 first_rising : out ;
00124 rd_en_rise : out ;
00125 rd_en_fall : out
00126 );
00127 end component;
00128
00129 signal read_data_valid0 : ;
00130 signal read_data_valid1 : ;
00131 signal read_data_valid2 : ;
00132 signal read_data_valid3 : ;
00133 signal read_data_valid4 : ;
00134 signal read_data_valid5 : ;
00135 signal read_data_valid6 : ;
00136 signal read_data_valid7 : ;
00137 signal read_data_valid8 : ;
00138 signal COMP_DONE_int : (ReadEnable-1 downto 0);
00139 signal FIRST_RISING_int : (ReadEnable-1 downto 0);
00140 signal READ_EN_DELAYED_RISE : (ReadEnable-1 downto 0);
00141 signal READ_EN_DELAYED_FALL : (ReadEnable-1 downto 0);
00142 signal fifo_read_enable_r : ;
00143 signal fifo_read_enable_2r : ;
00144
00145 begin
00146
00147 READ_DATA_VALID <= read_data_valid0;
00148 COMP_DONE <= COMP_DONE_int(0) and COMP_DONE_int(1);
00149
00150
00151 process(CLK)
00152 begin
00153 if (CLK'event and CLK = '1') then
00154 if (RESET = '1') then
00155 fifo_read_enable_r <= '0';
00156 fifo_read_enable_2r <= '0';
00157 else
00158 fifo_read_enable_r <= READ_EN_DELAYED_RISE(0);
00159 fifo_read_enable_2r <= fifo_read_enable_r;
00160 end if;
00161 end if;
00162 end process;
00163
00164
00165 pattern_0 : ddr2_mem_pattern_compare8
00166 port map(clk => CLK ,
00167 rst => RESET,
00168 ctrl_rden => CTRL_RDEN,
00169 rd_data_rise => READ_DATA_RISE(31 downto 24),
00170 rd_data_fall => READ_DATA_FALL(31 downto 24),
00171 comp_done => COMP_DONE_int(0),
00172 first_rising => FIRST_RISING_int(0),
00173 rd_en_rise => READ_EN_DELAYED_RISE(0),
00174 rd_en_fall => READ_EN_DELAYED_FALL(0)
00175 );
00176
00177
00178 pattern_1 : ddr2_mem_pattern_compare8
00179 port map(clk => CLK ,
00180 rst => RESET,
00181 ctrl_rden => CTRL_RDEN,
00182 rd_data_rise => READ_DATA_RISE(63 downto 56),
00183 rd_data_fall => READ_DATA_FALL(63 downto 56),
00184 comp_done => COMP_DONE_int(1),
00185 first_rising => FIRST_RISING_int(1),
00186 rd_en_rise => READ_EN_DELAYED_RISE(1),
00187 rd_en_fall => READ_EN_DELAYED_FALL(1)
00188 );
00189
00190
00191 rd_data_fifo0 : ddr2_mem_rd_data_fifo_0
00192 port map (
00193 CLK => CLK,
00194 RESET => RESET,
00195 FIFO_RD_EN => fifo_read_enable_2r ,
00196 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(0),
00197 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(0),
00198 FIRST_RISING => FIRST_RISING_int (0),
00199 READ_DATA_RISE => READ_DATA_RISE(7 downto 0),
00200 READ_DATA_FALL => READ_DATA_FALL(7 downto 0),
00201 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(7 downto 0),
00202 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(7 downto 0),
00203 READ_DATA_VALID => read_data_valid0
00204 );
00205
00206
00207 rd_data_fifo1 : ddr2_mem_rd_data_fifo_0
00208 port map (
00209 CLK => CLK,
00210 RESET => RESET,
00211 FIFO_RD_EN => fifo_read_enable_2r ,
00212 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(0),
00213 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(0),
00214 FIRST_RISING => FIRST_RISING_int (0),
00215 READ_DATA_RISE => READ_DATA_RISE(15 downto 8),
00216 READ_DATA_FALL => READ_DATA_FALL(15 downto 8),
00217 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(15 downto 8),
00218 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(15 downto 8),
00219 READ_DATA_VALID => read_data_valid1
00220 );
00221
00222
00223 rd_data_fifo2 : ddr2_mem_rd_data_fifo_0
00224 port map (
00225 CLK => CLK,
00226 RESET => RESET,
00227 FIFO_RD_EN => fifo_read_enable_2r ,
00228 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(0),
00229 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(0),
00230 FIRST_RISING => FIRST_RISING_int (0),
00231 READ_DATA_RISE => READ_DATA_RISE(23 downto 16),
00232 READ_DATA_FALL => READ_DATA_FALL(23 downto 16),
00233 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(23 downto 16),
00234 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(23 downto 16),
00235 READ_DATA_VALID => read_data_valid2
00236 );
00237
00238
00239 rd_data_fifo3 : ddr2_mem_rd_data_fifo_0
00240 port map (
00241 CLK => CLK,
00242 RESET => RESET,
00243 FIFO_RD_EN => fifo_read_enable_2r ,
00244 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(0),
00245 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(0),
00246 FIRST_RISING => FIRST_RISING_int (0),
00247 READ_DATA_RISE => READ_DATA_RISE(31 downto 24),
00248 READ_DATA_FALL => READ_DATA_FALL(31 downto 24),
00249 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(31 downto 24),
00250 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(31 downto 24),
00251 READ_DATA_VALID => read_data_valid3
00252 );
00253
00254
00255 rd_data_fifo4 : ddr2_mem_rd_data_fifo_0
00256 port map (
00257 CLK => CLK,
00258 RESET => RESET,
00259 FIFO_RD_EN => fifo_read_enable_2r ,
00260 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(1),
00261 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(1),
00262 FIRST_RISING => FIRST_RISING_int (1),
00263 READ_DATA_RISE => READ_DATA_RISE(39 downto 32),
00264 READ_DATA_FALL => READ_DATA_FALL(39 downto 32),
00265 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(39 downto 32),
00266 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(39 downto 32),
00267 READ_DATA_VALID => read_data_valid4
00268 );
00269
00270
00271 rd_data_fifo5 : ddr2_mem_rd_data_fifo_0
00272 port map (
00273 CLK => CLK,
00274 RESET => RESET,
00275 FIFO_RD_EN => fifo_read_enable_2r ,
00276 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(1),
00277 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(1),
00278 FIRST_RISING => FIRST_RISING_int (1),
00279 READ_DATA_RISE => READ_DATA_RISE(47 downto 40),
00280 READ_DATA_FALL => READ_DATA_FALL(47 downto 40),
00281 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(47 downto 40),
00282 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(47 downto 40),
00283 READ_DATA_VALID => read_data_valid5
00284 );
00285
00286
00287 rd_data_fifo6 : ddr2_mem_rd_data_fifo_0
00288 port map (
00289 CLK => CLK,
00290 RESET => RESET,
00291 FIFO_RD_EN => fifo_read_enable_2r ,
00292 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(1),
00293 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(1),
00294 FIRST_RISING => FIRST_RISING_int (1),
00295 READ_DATA_RISE => READ_DATA_RISE(55 downto 48),
00296 READ_DATA_FALL => READ_DATA_FALL(55 downto 48),
00297 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(55 downto 48),
00298 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(55 downto 48),
00299 READ_DATA_VALID => read_data_valid6
00300 );
00301
00302
00303 rd_data_fifo7 : ddr2_mem_rd_data_fifo_0
00304 port map (
00305 CLK => CLK,
00306 RESET => RESET,
00307 FIFO_RD_EN => fifo_read_enable_2r ,
00308 READ_EN_DELAYED_RISE => READ_EN_DELAYED_RISE(1),
00309 READ_EN_DELAYED_FALL => READ_EN_DELAYED_FALL(1),
00310 FIRST_RISING => FIRST_RISING_int (1),
00311 READ_DATA_RISE => READ_DATA_RISE(63 downto 56),
00312 READ_DATA_FALL => READ_DATA_FALL(63 downto 56),
00313 READ_DATA_FIFO_RISE => READ_DATA_FIFO_RISE(63 downto 56),
00314 READ_DATA_FIFO_FALL => READ_DATA_FIFO_FALL(63 downto 56),
00315 READ_DATA_VALID => read_data_valid7
00316 );
00317
00318 end arc_rd_data;