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/] [gaisler/] [ddr/] [ddr2spa.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:      ddr2spa
20
-- File:        ddr2spa.vhd
21
-- Author:      Nils-Johan Wessman - Gaisler Research
22
-- Description: 16-, 32- or 64-bit DDR2 memory controller module.
23
------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
library grlib;
28
use grlib.amba.all;
29
use grlib.stdlib.all;
30
library gaisler;
31
use grlib.devices.all;
32
use gaisler.memctrl.all;
33
library techmap;
34
use techmap.gencomp.all;
35
 
36
entity ddr2spa is
37
  generic (
38
    fabtech : integer := virtex4;
39
    memtech : integer := 0;
40
    rskew   : integer := 0;
41
    hindex  : integer := 0;
42
    haddr   : integer := 0;
43
    hmask   : integer := 16#f00#;
44
    ioaddr  : integer := 16#000#;
45
    iomask  : integer := 16#fff#;
46
    MHz     : integer := 100;
47
    TRFC    : integer := 130;
48
    clkmul  : integer := 2;
49
    clkdiv  : integer := 2;
50
    col     : integer := 9;
51
    Mbyte   : integer := 16;
52
    rstdel  : integer := 200;
53
    pwron   : integer := 0;
54
    oepol   : integer := 0;
55
    ddrbits : integer := 16;
56
    ahbfreq : integer := 50;
57
    readdly : integer := 1; -- 1 added read latency cycle
58
    ddelayb0 : integer := 0; -- Data delay value (0 - 63)
59
    ddelayb1 : integer := 0; -- Data delay value (0 - 63)
60
    ddelayb2 : integer := 0; -- Data delay value (0 - 63)
61
    ddelayb3 : integer := 0; -- Data delay value (0 - 63)
62
    ddelayb4 : integer := 0; -- Data delay value (0 - 63)
63
    ddelayb5 : integer := 0; -- Data delay value (0 - 63)
64
    ddelayb6 : integer := 0; -- Data delay value (0 - 63)
65
    ddelayb7 : integer := 0; -- Data delay value (0 - 63)
66
    numidelctrl : integer := 4;
67
    norefclk : integer := 0;
68
    odten    : integer := 0
69
  );
70
  port (
71
    rst_ddr    : in  std_ulogic;
72
    rst_ahb    : in  std_ulogic;
73
    clk_ddr    : in  std_ulogic;
74
    clk_ahb    : in  std_ulogic;
75
    clkref200  : in  std_logic;
76
    lock       : out std_ulogic;    -- DCM locked
77
    clkddro    : out std_ulogic;    -- DCM locked
78
    clkddri    : in  std_ulogic;
79
    ahbsi      : in  ahb_slv_in_type;
80
    ahbso      : out ahb_slv_out_type;
81
    ddr_clk        : out std_logic_vector(2 downto 0);
82
    ddr_clkb       : out std_logic_vector(2 downto 0);
83
    ddr_clk_fb_out : out   std_logic;
84
    ddr_clk_fb     : in    std_logic;
85
    ddr_cke        : out std_logic_vector(1 downto 0);
86
    ddr_csb        : out std_logic_vector(1 downto 0);
87
    ddr_web        : out std_ulogic;                       -- ddr write enable
88
    ddr_rasb       : out std_ulogic;                       -- ddr ras
89
    ddr_casb       : out std_ulogic;                       -- ddr cas
90
    ddr_dm         : out std_logic_vector (ddrbits/8-1 downto 0);    -- ddr dm
91
    ddr_dqs        : inout std_logic_vector (ddrbits/8-1 downto 0);  -- ddr dqs
92
    ddr_dqsn       : inout std_logic_vector (ddrbits/8-1 downto 0); -- ddr dqsn
93
    ddr_ad         : out std_logic_vector (13 downto 0);   -- ddr address
94
    ddr_ba         : out std_logic_vector (1 downto 0);    -- ddr bank address
95
    ddr_dq         : inout  std_logic_vector (ddrbits-1 downto 0); -- ddr data
96
    ddr_odt        : out std_logic_vector(1 downto 0)
97
  );
98
end;
99
 
100
architecture rtl of ddr2spa is
101
 
102
constant DDR_FREQ : integer := (clkmul * MHz) / clkdiv;
103
constant FAST_AHB : integer := AHBFREQ / DDR_FREQ;
104
signal sdi     : sdctrl_in_type;
105
signal sdo     : sdctrl_out_type;
106
--signal clkread  : std_ulogic;
107
 
108
begin
109
 
110
  ddr_phy0 : ddr2_phy generic map (tech => fabtech, MHz => MHz,
111
      dbits => ddrbits, rstdelay => rstdel, clk_mul => clkmul,
112
      clk_div => clkdiv,
113
      ddelayb0 => ddelayb0, ddelayb1 => ddelayb1, ddelayb2 => ddelayb2,
114
      ddelayb3 => ddelayb3, ddelayb4 => ddelayb4, ddelayb5 => ddelayb5,
115
      ddelayb6 => ddelayb6, ddelayb7 => ddelayb7,
116
      numidelctrl => numidelctrl, norefclk => norefclk, rskew => rskew)
117
  port map (rst_ddr, clk_ddr, clkref200, clkddro, lock,
118
      ddr_clk, ddr_clkb, ddr_clk_fb_out, ddr_clk_fb,
119
      ddr_cke, ddr_csb, ddr_web, ddr_rasb, ddr_casb, ddr_dm,
120
      ddr_dqs, ddr_dqsn, ddr_ad, ddr_ba, ddr_dq, ddr_odt, sdi, sdo);
121
 
122
  ddr16 : if ddrbits = 16 generate
123
    ddrc : ddr2sp16a generic map (memtech => memtech, hindex => hindex,
124
      haddr => haddr, hmask => hmask, ioaddr => ioaddr, iomask => iomask,
125
      pwron => pwron, MHz => DDR_FREQ, TRFC => TRFC, col => col, Mbyte => Mbyte,
126
      fast => FAST_AHB, readdly => readdly, odten => odten)
127
    port map (rst_ahb, clkddri, clk_ahb, ahbsi, ahbso, sdi, sdo);
128
  end generate;
129
 
130
  ddr32 : if ddrbits = 32 generate
131
    ddrc : ddr2sp32a generic map (memtech => memtech, hindex => hindex,
132
      haddr => haddr, hmask => hmask, ioaddr => ioaddr, iomask => iomask,
133
      pwron => pwron, MHz => DDR_FREQ, TRFC => TRFC, col => col, Mbyte => Mbyte,
134
      fast => FAST_AHB/2, readdly => readdly, odten => odten)
135
    port map (rst_ahb, clkddri, clk_ahb, ahbsi, ahbso, sdi, sdo);
136
  end generate;
137
 
138
  ddr64 : if ddrbits = 64 generate
139
    ddrc : ddr2sp64a generic map (memtech => memtech, hindex => hindex,
140
      haddr => haddr, hmask => hmask, ioaddr => ioaddr, iomask => iomask,
141
      pwron => pwron, MHz => DDR_FREQ, TRFC => TRFC, col => col, Mbyte => Mbyte,
142
      fast => FAST_AHB/4, readdly => readdly, odten => odten)
143
    port map (rst_ahb, clkddri, clk_ahb, ahbsi, ahbso, sdi, sdo);
144
  end generate;
145
end;

powered by: WebSVN 2.1.0

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