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/ddr/mem_interface_top_v4_dq_iob.vhd,v $ *
00015 --* $Revision: 1.3.2.3 $ *
00016 --* $Name: dev $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 17:57:44 $ *
00019 --* *
00020 --**************************************************************
00021 -------------------------------------------------------------------------------
00022 -- Copyright (c) 2005 Xilinx, Inc.
00023 -- This design is confidential and proprietary of Xilinx, All Rights Reserved.
00024 -------------------------------------------------------------------------------
00025 -- ____ ____
00026 -- / /\/ /
00027 -- /___/ \ / Vendor: Xilinx
00028 -- \ \ \/ Version: 1.6
00029 -- \ \ Application : MIG
00030 -- / / Filename: mem_interface_top_v4_dq_iob.vhd
00031 -- /___/ /\ Date Last Modified: Wed Jun 1 2005
00032 -- \ \ / \Date Created: Mon May 2 2005
00033 -- \___\/\___\
00034 -- Device: Virtex-4
00035 -- Design Name: DDR1_SDRAM
00036 -- Description: Places the data in the IOBs.
00037 -------------------------------------------------------------------------------
00038
00039
00040 library ieee;
00041
00042 use ieee.std_logic_1164.all;
00043
00044 library unisim;
00045
00046 use unisim.vcomponents.all;
00047
00048 entity mem_interface_top_v4_dq_iob is
00049 port( CLK : in ;
00050 CLK90 : in ;
00051 CAL_CLK : in ;
00052 RESET : in ;
00053 DATA_DLYINC : in ;
00054 DATA_DLYCE : in ;
00055 DATA_DLYRST : in ;
00056 WRITE_DATA_RISE : in ;
00057 WRITE_DATA_Fall : in ;
00058 CTRL_WREN : in ;
00059 DDR_DQ : inout ;
00060 READ_DATA_RISE : out ;
00061 READ_DATA_Fall : out
00062 );
00063 end mem_interface_top_v4_dq_iob;
00064
00065 architecture arch of mem_interface_top_v4_dq_iob is
00066
00067 component ODDR
00068 generic( SRTYPE : := "SYNC";
00069 DDR_CLK_EDGE : := "SAME_EDGE"
00070 );
00071 port( Q : out ;
00072 C : in ;
00073 CE : in ;
00074 D1 : in ;
00075 D2 : in ;
00076 R : in ;
00077 S : in
00078 );
00079 end component;
00080
00081 component FDCE
00082 -- generic( IOB : string := "TRUE"
00083 -- );
00084 port( Q : out ;
00085 C : in ;
00086 CE : in ;
00087 CLR : in ;
00088 D : in
00089 );
00090 end component;
00091
00092 component IOBUF
00093 port( I : in ;
00094 T : in ;
00095 IO : inout ;
00096 O : out
00097 );
00098 end component;
00099
00100 component IDELAY
00101 generic( IOBDELAY_TYPE : := "VARIABLE";
00102 IOBDELAY_VALUE : := 0
00103 );
00104 port( O : out ;
00105 I : in ;
00106 C : in ;
00107 CE : in ;
00108 INC : in ;
00109 RST : in
00110 );
00111 end component;
00112
00113 component IDDR
00114 generic( SRTYPE : := "SYNC";
00115 DDR_CLK_EDGE : := "SAME_EDGE_PIPELINED"
00116 );
00117 port( Q1 : out ;
00118 Q2 : out ;
00119 C : in ;
00120 CE : in ;
00121 D : in ;
00122 R : in ;
00123 S : in
00124 );
00125 end component;
00126
00127 signal dq_in : ;
00128 signal dq_out : ;
00129 signal dq_delayed : ;
00130 signal write_en_L : ;
00131 signal write_en_L_r1 : ;
00132 signal vcc : ;
00133 signal gnd : ;
00134
00135
00136
00137
00138 begin
00139
00140 vcc <= '1';
00141 gnd <= '0';
00142
00143 write_en_L <= not CTRL_WREN;
00144
00145 oddr_dq: ODDR
00146 -- generic map( SRTYPE => "SYNC",
00147 -- DDR_CLK_EDGE => "SAME_EDGE"
00148 -- );
00149 port map( Q => dq_out,
00150 C => CLK90,
00151 CE => vcc,
00152 D1 => WRITE_DATA_RISE,
00153 D2 => WRITE_DATA_Fall,
00154 R => RESET,
00155 S => gnd
00156 );
00157
00158 tri_state_dq: FDCE
00159 -- generic map( IOB => "TRUE"
00160 -- );
00161 port map( Q => write_en_L_r1,
00162 C => CLK90,
00163 CE => vcc,
00164 CLR => RESET,
00165 D => write_en_L
00166 );
00167
00168 iobuf_dq: IOBUF port map
00169 ( I => dq_out,
00170 T => write_en_L_r1,
00171 IO => DDR_DQ,
00172 O => dq_in
00173 );
00174
00175 idelay_dq: IDELAY
00176 generic map(
00177 IOBDELAY_TYPE => "VARIABLE",
00178 IOBDELAY_VALUE => 0
00179 )
00180 port map(
00181 O => dq_delayed,
00182 I => dq_in,
00183 C => CAL_CLK,
00184 CE => DATA_DLYCE,
00185 INC => DATA_DLYINC,
00186 RST => DATA_DLYRST
00187 );
00188
00189 iddr_dq: IDDR
00190 -- generic map( SRTYPE => "SYNC",
00191 -- DDR_CLK_EDGE => "SAME_EDGE_PIPELINED"
00192 -- );
00193 port map
00194 ( Q1 => READ_DATA_RISE,
00195 Q2 => READ_DATA_Fall,
00196 C => CLK ,
00197 CE => vcc ,
00198 D => dq_delayed,
00199 R => RESET,
00200 S => gnd
00201 );
00202
00203 end arch;