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_dqs_iob.vhd,v $ *
00015 --* $Revision: 1.4.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_dqs_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 stobes 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_dqs_iob is
00049 port(
00050 CLK : in ;
00051 CAL_CLK : in ;
00052 DLYINC : in ;
00053 DLYCE : in ;
00054 DLYRST : in ;
00055 CTRL_DQS_RST : in ;
00056 CTRL_DQS_EN : in ;
00057 DDR_DQS : inout ;
00058 DQS_RISE : out
00059 );
00060 end mem_interface_top_v4_dqs_iob;
00061
00062 architecture arch of mem_interface_top_v4_dqs_iob is
00063
00064 component IDELAY
00065 generic(IOBDELAY_TYPE : := "VARIABLE";
00066 IOBDELAY_VALUE : := 0
00067 );
00068 port(O : out ;
00069 I : in ;
00070 C : in ;
00071 CE : in ;
00072 INC : in ;
00073 RST : in
00074 );
00075 end component;
00076
00077 component ODDR
00078 generic(SRTYPE : := "SYNC";
00079 DDR_CLK_EDGE : := "OPPOSITE_EDGE"
00080 );
00081 port(Q : out ;
00082 C : in ;
00083 CE : in ;
00084 D1 : in ;
00085 D2 : in ;
00086 R : in ;
00087 S : in
00088 );
00089 end component;
00090
00091 component IOBUF
00092 port(I : in ;
00093 T : in ;
00094 IO : inout ;
00095 O : out
00096 );
00097 end component;
00098
00099 component FD
00100 -- generic( IOB : boolean := TRUE
00101 -- );
00102 port(Q : out ;
00103 C : in ;
00104 D : in
00105 );
00106 end component;
00107
00108 signal dqs_in : ;
00109 signal dqs_out : ;
00110 signal dqs_delayed : ;
00111 signal ctrl_dqs_en_r1 : ;
00112 signal vcc : ;
00113 signal gnd : ;
00114 signal clk180 : ;
00115 signal dqs_int : ;
00116 signal data1 : ;
00117
00118 begin
00119
00120 vcc <= '1';
00121 gnd <= '0';
00122 clk180 <= not CLK;
00123
00124 process(clk180)
00125 begin
00126 if(clk180'event and clk180 = '1') then
00127 if (CTRL_DQS_RST = '1') then
00128 data1 <= '0';
00129 else
00130 data1 <= '1';
00131 end if;
00132 end if;
00133 end process;
00134
00135 idelay_dqs : IDELAY
00136 generic map(
00137 IOBDELAY_TYPE => "VARIABLE",
00138 IOBDELAY_VALUE => 0
00139 )
00140 port map(
00141 O => dqs_delayed,
00142 I => dqs_in ,
00143 C => CAL_CLK ,
00144 CE => DLYCE,
00145 INC => DLYINC,
00146 RST => DLYRST
00147 );
00148
00149 dqs_pipe1 : FD --generic map( IOB => "TRUE");
00150 port map
00151 (Q => dqs_int,
00152 C => CLK,
00153 D => dqs_delayed
00154 );
00155
00156 dqs_pipe2 : FD --generic map( IOB => "TRUE");
00157 port map
00158 (Q => DQS_RISE,
00159 C => CLK,
00160 D => dqs_int
00161 );
00162
00163 oddr_dqs : ODDR
00164 -- generic map( SRTYPE => "SYNC";
00165 -- DDR_CLK_EDGE => "OPPOSITE_EDGE"
00166 -- );
00167 port map
00168 (Q => dqs_out,
00169 C => clk180,
00170 CE => vcc,
00171 D1 => data1 ,
00172 D2 => gnd,
00173 R => gnd,
00174 S => gnd
00175 );
00176
00177 tri_state_dqs : FD --generic map( IOB => "TRUE");
00178 port map
00179 (Q => ctrl_dqs_en_r1,
00180 C => clk180,
00181 D => CTRL_DQS_EN
00182 );
00183
00184 iobuf_dqs : IOBUF port map
00185 (I => dqs_out,
00186 T => ctrl_dqs_en_r1,
00187 IO => DDR_DQS,
00188 O => dqs_in
00189 );
00190
00191 end arch;