OpenCores
URL https://opencores.org/ocsvn/mips_enhanced/mips_enhanced/trunk

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [lib/] [techmap/] [maps/] [ddrphy.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  This file is a part of the GRLIB VHDL IP LIBRARY
3
--  Copyright (C) 2003, Gaisler Research
4
--
5
--  This program is free software; you can redistribute it and/or modify
6
--  it under the terms of the GNU General Public License as published by
7
--  the Free Software Foundation; either version 2 of the License, or
8
--  (at your option) any later version.
9
--
10
--  This program is distributed in the hope that it will be useful,
11
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
--  GNU General Public License for more details.
14
--
15
--  You should have received a copy of the GNU General Public License
16
--  along with this program; if not, write to the Free Software
17
--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
-----------------------------------------------------------------------------
19
-- Entity:      ddrphy
20
-- File:        ddrphy.vhd
21
-- Author:      Jiri Gaisler, Gaisler Research
22
-- Description: DDR PHY with tech mapping
23
------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
 
28
library grlib;
29
use grlib.stdlib.all;
30
library techmap;
31
use techmap.gencomp.all;
32
use techmap.allddr.all;
33
 
34
------------------------------------------------------------------
35
-- DDR PHY with tech mapping  ------------------------------------
36
------------------------------------------------------------------
37
 
38
entity ddrphy is
39
  generic (tech : integer := virtex2; MHz : integer := 100;
40
        rstdelay : integer := 200; dbits : integer := 16;
41
        clk_mul : integer := 2 ; clk_div : integer := 2;
42
        rskew : integer :=0; mobile : integer := 0);
43
  port (
44
    rst       : in  std_ulogic;
45
    clk       : in  std_logic;                  -- input clock
46
    clkout    : out std_ulogic;                 -- system clock
47
    clkread   : out std_ulogic;                 -- read clock
48
    lock      : out std_ulogic;                 -- DCM locked
49
 
50
    ddr_clk     : out std_logic_vector(2 downto 0);
51
    ddr_clkb    : out std_logic_vector(2 downto 0);
52
    ddr_clk_fb_out  : out std_logic;
53
    ddr_clk_fb  : in std_logic;
54
    ddr_cke     : out std_logic_vector(1 downto 0);
55
    ddr_csb     : out std_logic_vector(1 downto 0);
56
    ddr_web     : out std_ulogic;                       -- ddr write enable
57
    ddr_rasb    : out std_ulogic;                       -- ddr ras
58
    ddr_casb    : out std_ulogic;                       -- ddr cas
59
    ddr_dm      : out std_logic_vector (dbits/8-1 downto 0);    -- ddr dm
60
    ddr_dqs     : inout std_logic_vector (dbits/8-1 downto 0);    -- ddr dqs
61
    ddr_ad      : out std_logic_vector (13 downto 0);   -- ddr address
62
    ddr_ba      : out std_logic_vector (1 downto 0);    -- ddr bank address
63
    ddr_dq      : inout  std_logic_vector (dbits-1 downto 0); -- ddr data
64
 
65
    addr        : in  std_logic_vector (13 downto 0); -- data mask
66
    ba          : in  std_logic_vector ( 1 downto 0); -- data mask
67
    dqin        : out std_logic_vector (dbits*2-1 downto 0); -- ddr input data
68
    dqout       : in  std_logic_vector (dbits*2-1 downto 0); -- ddr input data
69
    dm          : in  std_logic_vector (dbits/4-1 downto 0); -- data mask
70
    oen         : in  std_ulogic;
71
    dqs         : in  std_ulogic;
72
    dqsoen      : in  std_ulogic;
73
    rasn        : in  std_ulogic;
74
    casn        : in  std_ulogic;
75
    wen         : in  std_ulogic;
76
    csn         : in  std_logic_vector(1 downto 0);
77
    cke         : in  std_logic_vector(1 downto 0);
78
    ck          : in  std_logic_vector(2 downto 0);
79
    moben       : in  std_logic
80
  );
81
end;
82
 
83
architecture rtl of ddrphy is
84
 
85
begin
86
 
87
  inf : if (tech = inferred) generate
88
    ddr_phy0 : generic_ddr_phy
89
     generic map (MHz => MHz, rstdelay => rstdelay
90
-- reduce 200 us start-up delay during simulation
91
-- pragma translate_off
92
        / 200
93
-- pragma translate_on
94
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, rskew => rskew, mobile => mobile
95
        )
96
     port map (
97
        rst, clk, clkout, lock,
98
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
99
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
100
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
101
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
102
        rasn, casn, wen, csn, cke, ck, moben);
103
  end generate;
104
 
105
 
106
  strat2 : if (tech = stratix2) generate
107
 
108
    ddr_phy0 : stratixii_ddr_phy
109
     generic map (MHz => MHz, rstdelay => rstdelay
110
-- reduce 200 us start-up delay during simulation
111
-- pragma translate_off
112
        / 200
113
-- pragma translate_on
114
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits
115
        )
116
     port map (
117
        rst, clk, clkout, lock,
118
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
119
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
120
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
121
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
122
        rasn, casn, wen, csn, cke);
123
 
124
  end generate;
125
 
126
  cyc3 : if (tech = cyclone3) generate
127
 
128
    ddr_phy0 : cycloneiii_ddr_phy
129
     generic map (MHz => MHz, rstdelay => rstdelay
130
-- reduce 200 us start-up delay during simulation
131
-- pragma translate_off
132
        / 200
133
-- pragma translate_on
134
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, rskew => rskew
135
  )
136
     port map (
137
        rst, clk, clkout, lock,
138
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
139
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
140
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
141
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
142
        rasn, casn, wen, csn, cke);
143
 
144
  end generate;
145
 
146
  xc2v : if (tech = virtex2) or (tech = spartan3) generate
147
 
148
    ddr_phy0 : virtex2_ddr_phy
149
     generic map (MHz => MHz, rstdelay => rstdelay
150
-- reduce 200 us start-up delay during simulation
151
-- pragma translate_off
152
        / 200
153
-- pragma translate_on
154
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, rskew => rskew
155
        )
156
     port map (
157
        rst, clk, clkout, lock,
158
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
159
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
160
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
161
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
162
        rasn, casn, wen, csn, cke);
163
 
164
  end generate;
165
 
166
  xc4v : if (tech = virtex4) or (tech = virtex5) generate
167
 
168
    ddr_phy0 : virtex4_ddr_phy
169
     generic map (MHz => MHz, rstdelay => rstdelay
170
-- reduce 200 us start-up delay during simulation
171
-- pragma translate_off
172
        / 200
173
-- pragma translate_on
174
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, rskew => rskew
175
        )
176
     port map (
177
        rst, clk, clkout, lock,
178
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
179
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
180
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
181
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
182
        rasn, casn, wen, csn, cke, ck);
183
 
184
  end generate;
185
 
186
  xc3se : if tech = spartan3e generate
187
 
188
    ddr_phy0 : spartan3e_ddr_phy
189
     generic map (MHz => MHz, rstdelay => rstdelay
190
-- reduce 200 us start-up delay during simulation
191
-- pragma translate_off
192
        / 200
193
-- pragma translate_on
194
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, rskew => rskew
195
        )
196
     port map (
197
        rst, clk, clkout, clkread, lock,
198
        ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
199
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
200
        ddr_dm, ddr_dqs, ddr_ad, ddr_ba, ddr_dq,
201
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
202
        rasn, casn, wen, csn, cke);
203
 
204
  end generate;
205
 
206
end;
207
 
208
 
209
library ieee;
210
use ieee.std_logic_1164.all;
211
 
212
library grlib;
213
use grlib.stdlib.all;
214
library techmap;
215
use techmap.gencomp.all;
216
use techmap.allddr.all;
217
 
218
------------------------------------------------------------------
219
-- DDR2 PHY with tech mapping  ------------------------------------
220
------------------------------------------------------------------
221
 
222
entity ddr2phy is
223
  generic (tech : integer := virtex5; MHz : integer := 100;
224
        rstdelay : integer := 200; dbits : integer := 16;
225
        clk_mul : integer := 2; clk_div : integer := 2;
226
        ddelayb0 : integer := 0; ddelayb1 : integer := 0; ddelayb2 : integer := 0;
227
        ddelayb3 : integer := 0; ddelayb4 : integer := 0; ddelayb5 : integer := 0;
228
        ddelayb6 : integer := 0; ddelayb7 : integer := 0;
229
        numidelctrl : integer := 4; norefclk : integer := 0; rskew : integer := 0);
230
  port (
231
    rst            : in    std_ulogic;
232
    clk            : in    std_logic;   -- input clock
233
    clkref200      : in    std_logic;   -- input 200MHz clock
234
    clkout         : out   std_ulogic;  -- system clock
235
    lock           : out   std_ulogic;  -- DCM locked
236
 
237
    ddr_clk        : out   std_logic_vector(2 downto 0);
238
    ddr_clkb       : out   std_logic_vector(2 downto 0);
239
    ddr_clk_fb_out : out   std_logic;
240
    ddr_clk_fb     : in    std_logic;
241
    ddr_cke        : out   std_logic_vector(1 downto 0);
242
    ddr_csb        : out   std_logic_vector(1 downto 0);
243
    ddr_web        : out   std_ulogic;  -- ddr write enable
244
    ddr_rasb       : out   std_ulogic;  -- ddr ras
245
    ddr_casb       : out   std_ulogic;  -- ddr cas
246
    ddr_dm         : out   std_logic_vector (dbits/8-1 downto 0);  -- ddr dm
247
    ddr_dqs        : inout std_logic_vector (dbits/8-1 downto 0);  -- ddr dqs
248
    ddr_dqsn       : inout std_logic_vector (dbits/8-1 downto 0);  -- ddr dqsn
249
    ddr_ad         : out   std_logic_vector (13 downto 0);         -- ddr address
250
    ddr_ba         : out   std_logic_vector (1 downto 0);          -- ddr bank address
251
    ddr_dq         : inout std_logic_vector (dbits-1 downto 0);    -- ddr data
252
    ddr_odt        : out   std_logic_vector(1 downto 0);
253
 
254
    addr           : in    std_logic_vector (13 downto 0);
255
    ba             : in    std_logic_vector ( 1 downto 0);
256
    dqin           : out   std_logic_vector (dbits*2-1 downto 0);  -- ddr output data
257
    dqout          : in    std_logic_vector (dbits*2-1 downto 0);  -- ddr input data
258
    dm             : in    std_logic_vector (dbits/4-1 downto 0);  -- data mask
259
    oen            : in    std_ulogic;
260
    dqs            : in    std_ulogic;
261
    dqsoen         : in    std_ulogic;
262
    rasn           : in    std_ulogic;
263
    casn           : in    std_ulogic;
264
    wen            : in    std_ulogic;
265
    csn            : in    std_logic_vector(1 downto 0);
266
    cke            : in    std_logic_vector(1 downto 0);
267
    cal_en         : in    std_logic_vector(dbits/8-1 downto 0);
268
    cal_inc        : in    std_logic_vector(dbits/8-1 downto 0);
269
    cal_pll        : in    std_logic_vector(1 downto 0);
270
    cal_rst        : in    std_logic;
271
    odt            : in    std_logic_vector(1 downto 0)
272
    );
273
end;
274
 
275
architecture rtl of ddr2phy is
276
 
277
begin
278
 
279
  xc4v : if (tech = virtex4) or (tech = virtex5) generate
280
 
281
    ddr_phy0 : virtex5_ddr2_phy
282
     generic map (MHz => MHz, rstdelay => rstdelay
283
-- reduce 200 us start-up delay during simulation
284
-- pragma translate_off
285
        / 200
286
-- pragma translate_on
287
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits,
288
        ddelayb0 => ddelayb0, ddelayb1 => ddelayb1, ddelayb2 => ddelayb2,
289
        ddelayb3 => ddelayb3, ddelayb4 => ddelayb4, ddelayb5 => ddelayb5,
290
        ddelayb6 => ddelayb6, ddelayb7 => ddelayb7,
291
   numidelctrl => numidelctrl, norefclk => norefclk,
292
   tech => tech
293
        )
294
     port map (
295
        rst, clk, clkref200, clkout, lock,
296
        ddr_clk, ddr_clkb,
297
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
298
        ddr_dm, ddr_dqs, ddr_dqsn, ddr_ad, ddr_ba, ddr_dq, ddr_odt,
299
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
300
        rasn, casn, wen, csn, cke, cal_en, cal_inc, cal_rst, odt);
301
 
302
  end generate;
303
 
304
  stra3 : if (tech = stratix3) generate
305
 
306
    ddr_phy0 : stratixiii_ddr2_phy
307
     generic map (MHz => MHz, rstdelay => rstdelay
308
-- reduce 200 us start-up delay during simulation
309
-- pragma translate_off
310
        / 200
311
-- pragma translate_on
312
        , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits,
313
        ddelayb0 => ddelayb0, ddelayb1 => ddelayb1, ddelayb2 => ddelayb2,
314
        ddelayb3 => ddelayb3, ddelayb4 => ddelayb4, ddelayb5 => ddelayb5,
315
        ddelayb6 => ddelayb6, ddelayb7 => ddelayb7,
316
   numidelctrl => numidelctrl, norefclk => norefclk,
317
   tech => tech, rskew => rskew
318
        )
319
     port map (
320
        rst, clk, clkref200, clkout, lock,
321
        ddr_clk, ddr_clkb,
322
        ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
323
        ddr_dm, ddr_dqs, ddr_dqsn, ddr_ad, ddr_ba, ddr_dq, ddr_odt,
324
        addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
325
        rasn, casn, wen, csn, cke, cal_en, cal_inc, cal_pll, cal_rst, odt);
326
 
327
  end generate;
328
 
329
  sp3a : if (tech = spartan3) generate
330
    ddr_phy0 : spartan3a_ddr2_phy
331
     generic map (MHz => MHz, rstdelay => rstdelay
332
-- reduce 200 us start-up delay during simulation
333
-- pragma translate_off
334
                  / 200
335
-- pragma translate_on
336
                  , clk_mul => clk_mul, clk_div => clk_div, dbits => dbits, tech => tech, rskew => rskew)
337
     port map (   rst, clk, clkout, lock, ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
338
                  ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb,
339
                  ddr_dm, ddr_dqs, ddr_dqsn, ddr_ad, ddr_ba, ddr_dq, ddr_odt,
340
                  addr, ba, dqin, dqout, dm, oen, dqs, dqsoen,
341
                  rasn, casn, wen, csn, cke, cal_pll, odt);
342
  end generate;
343
 
344
 
345
end;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.