memctrl.vhd
1215 lines
| 43.0 KiB
| text/x-vhdl
|
VhdlLexer
martin
|
r100 | ------------------------------------------------------------------------------ | ||
-- This file is a part of the GRLIB VHDL IP LIBRARY | ||||
-- Copyright (C) 2003 - 2008, Gaisler Research | ||||
-- Copyright (C) 2008 - 2010, Aeroflex Gaisler | ||||
-- | ||||
-- This program is free software; you can redistribute it and/or modify | ||||
-- it under the terms of the GNU General Public License as published by | ||||
-- the Free Software Foundation; either version 2 of the License, or | ||||
-- (at your option) any later version. | ||||
-- | ||||
-- This program is distributed in the hope that it will be useful, | ||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
-- GNU General Public License for more details. | ||||
-- | ||||
-- You should have received a copy of the GNU General Public License | ||||
-- along with this program; if not, write to the Free Software | ||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
----------------------------------------------------------------------------- | ||||
-- Entity: memctrl | ||||
-- File: memctrl.vhd | ||||
-- Author: Jiri Gaisler - Gaisler Research | ||||
-- Description: Memory controller package | ||||
------------------------------------------------------------------------------ | ||||
library ieee; | ||||
use ieee.std_logic_1164.all; | ||||
library grlib; | ||||
use grlib.amba.all; | ||||
use grlib.stdlib.log2; | ||||
library techmap; | ||||
use techmap.gencomp.all; | ||||
package memctrl is | ||||
type memory_in_type is record | ||||
data : std_logic_vector(31 downto 0); -- Data bus address | ||||
brdyn : std_logic; | ||||
bexcn : std_logic; | ||||
writen : std_logic; | ||||
wrn : std_logic_vector(3 downto 0); | ||||
bwidth : std_logic_vector(1 downto 0); | ||||
sd : std_logic_vector(63 downto 0); | ||||
cb : std_logic_vector(15 downto 0); | ||||
scb : std_logic_vector(15 downto 0); | ||||
edac : std_logic; | ||||
end record; | ||||
constant memory_in_none : memory_in_type := | ||||
((others => '0'), '0', '0', '0', (others => '0'), (others => '0'), | ||||
(others => '0'), (others => '0'), (others => '0'), '0'); | ||||
type memory_out_type is record | ||||
address : std_logic_vector(31 downto 0); | ||||
data : std_logic_vector(31 downto 0); | ||||
sddata : std_logic_vector(63 downto 0); | ||||
ramsn : std_logic_vector(7 downto 0); | ||||
ramoen : std_logic_vector(7 downto 0); | ||||
ramn : std_ulogic; | ||||
romn : std_ulogic; | ||||
mben : std_logic_vector(3 downto 0); | ||||
iosn : std_logic; | ||||
romsn : std_logic_vector(7 downto 0); | ||||
oen : std_logic; | ||||
writen : std_logic; | ||||
wrn : std_logic_vector(3 downto 0); | ||||
bdrive : std_logic_vector(3 downto 0); | ||||
vbdrive : std_logic_vector(31 downto 0); --vector bus drive | ||||
svbdrive : std_logic_vector(63 downto 0); --vector bus drive sdram | ||||
read : std_logic; | ||||
sa : std_logic_vector(14 downto 0); | ||||
cb : std_logic_vector(15 downto 0); | ||||
scb : std_logic_vector(15 downto 0); | ||||
vcdrive : std_logic_vector(15 downto 0); --vector bus drive cb | ||||
svcdrive : std_logic_vector(15 downto 0); --vector bus drive cb sdram | ||||
ce : std_ulogic; | ||||
sdram_en : std_ulogic; -- SDRAM enabled | ||||
rs_edac_en : std_ulogic; -- Reed-Solomon enabled | ||||
end record; | ||||
constant memory_out_none : memory_out_type := | ||||
((others => '0'), (others => '0'), (others => '0'), (others => '1'), | ||||
(others => '1'), '1', '1', (others => '1'), '1', (others => '1'), | ||||
'1', '1', (others => '1'), (others => '1'), (others => '1'), | ||||
(others => '1'), '0', (others => '0'), (others => '1'), (others => '1'), | ||||
(others => '1'), (others => '1'), '0', '0', '0'); | ||||
type sdctrl_in_type is record | ||||
wprot : std_ulogic; | ||||
data : std_logic_vector (127 downto 0); -- data in | ||||
cb : std_logic_vector(63 downto 0); | ||||
regrdata : std_logic_vector(63 downto 0); -- PHY-specific reg in | ||||
end record; | ||||
constant sdctrl_in_none : sdctrl_in_type := | ||||
('0', (others => '0'), (others => '0'), (others => '0')); | ||||
type sdctrl_out_type is record | ||||
sdcke : std_logic_vector ( 1 downto 0); -- clk en | ||||
sdcsn : std_logic_vector ( 1 downto 0); -- chip sel | ||||
sdwen : std_ulogic; -- write en | ||||
rasn : std_ulogic; -- row addr stb | ||||
casn : std_ulogic; -- col addr stb | ||||
dqm : std_logic_vector ( 15 downto 0); -- data i/o mask | ||||
bdrive : std_ulogic; -- bus drive | ||||
qdrive : std_ulogic; -- bus drive | ||||
vbdrive : std_logic_vector(63 downto 0); -- vector bus drive | ||||
address : std_logic_vector (16 downto 2); -- address out | ||||
data : std_logic_vector (127 downto 0); -- data out | ||||
cb : std_logic_vector(63 downto 0); | ||||
ce : std_ulogic; | ||||
ba : std_logic_vector (2 downto 0); -- bank address | ||||
sdck : std_logic_vector(2 downto 0); | ||||
moben : std_logic; -- Mobile support | ||||
cal_en : std_logic_vector(7 downto 0); -- enable delay calibration | ||||
cal_inc : std_logic_vector(7 downto 0); -- inc/dec delay | ||||
cal_pll : std_logic_vector(1 downto 0); -- (enable,inc/dec) pll phase | ||||
cal_rst : std_logic; -- calibration reset | ||||
odt : std_logic_vector(1 downto 0); -- In Die Termination | ||||
conf : std_logic_vector(63 downto 0); | ||||
oct : std_logic; -- On Chip Termination | ||||
vcbdrive : std_logic_vector(31 downto 0); -- cb vector bus drive | ||||
cbdqm : std_logic_vector(7 downto 0); | ||||
cbcal_en : std_logic_vector(3 downto 0); | ||||
cbcal_inc : std_logic_vector(3 downto 0); | ||||
read_pend : std_logic_vector(7 downto 0); -- Read pending within 7...0 | ||||
-- cycles (not including phy delays) | ||||
-- PHY-specific register interface | ||||
regwdata : std_logic_vector(63 downto 0); | ||||
regwrite : std_logic_vector(1 downto 0); | ||||
end record; | ||||
constant sdctrl_out_none : sdctrl_out_type := | ||||
((others => '0'), (others => '0'), '0', '0', '0', (others => '0'), | ||||
'0', '0', (others => '0'), (others => '0'), (others => '0'), | ||||
(others => '0'), '0', (others => '0'), (others => '0'), '0', | ||||
(others => '0'), (others => '0'), (others => '0'), '0', | ||||
(others => '0'), (others => '0'), '0', (others => '0'), | ||||
(others => '0'), (others => '0'), (others => '0'), "00000000", | ||||
(others => '0'), "00"); | ||||
type sdram_out_type is record | ||||
sdcke : std_logic_vector ( 1 downto 0); -- clk en | ||||
sdcsn : std_logic_vector ( 1 downto 0); -- chip sel | ||||
sdwen : std_ulogic; -- write en | ||||
rasn : std_ulogic; -- row addr stb | ||||
casn : std_ulogic; -- col addr stb | ||||
dqm : std_logic_vector ( 7 downto 0); -- data i/o mask | ||||
end record; | ||||
component sdctrl | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
wprot : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
sdbits : integer := 32; | ||||
oepol : integer := 0; | ||||
pageburst : integer := 0; | ||||
mobile : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component sdctrl64 | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
wprot : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
pageburst : integer := 0; | ||||
mobile : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ftsdctrl is | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
wprot : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
sdbits : integer := 32; | ||||
edacen : integer := 1; | ||||
errcnt : integer := 0; | ||||
cntbits : integer range 1 to 8 := 1; | ||||
oepol : integer := 0; | ||||
pageburst : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ftsdctrl64 | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
wprot : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
pageburst : integer := 0; | ||||
mobile : integer := 0; | ||||
edac : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component srctrl | ||||
generic ( | ||||
hindex : integer := 0; | ||||
romaddr : integer := 0; | ||||
rommask : integer := 16#ff0#; | ||||
ramaddr : integer := 16#400#; | ||||
rammask : integer := 16#ff0#; | ||||
ioaddr : integer := 16#200#; | ||||
iomask : integer := 16#ff0#; | ||||
ramws : integer := 0; | ||||
romws : integer := 2; | ||||
iows : integer := 2; | ||||
rmw : integer := 0; | ||||
prom8en : integer := 0; | ||||
oepol : integer := 0; | ||||
srbanks : integer range 1 to 5 := 1; | ||||
banksz : integer range 0 to 13 := 13; | ||||
romasel : integer range 0 to 28 := 19 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sri : in memory_in_type; | ||||
sro : out memory_out_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ftsrctrl is | ||||
generic ( | ||||
hindex : integer := 0; | ||||
romaddr : integer := 0; | ||||
rommask : integer := 16#ff0#; | ||||
ramaddr : integer := 16#400#; | ||||
rammask : integer := 16#ff0#; | ||||
ioaddr : integer := 16#200#; | ||||
iomask : integer := 16#ff0#; | ||||
ramws : integer := 0; | ||||
romws : integer := 2; | ||||
iows : integer := 2; | ||||
rmw : integer := 0; | ||||
srbanks : integer range 1 to 8 := 1; | ||||
banksz : integer range 0 to 15 := 15; | ||||
rombanks : integer range 1 to 8 := 1; | ||||
rombanksz : integer range 0 to 15 := 15; | ||||
rombankszdef : integer range 0 to 15 := 15; | ||||
pindex : integer := 0; | ||||
paddr : integer := 0; | ||||
pmask : integer := 16#fff#; | ||||
edacen : integer range 0 to 1 := 1; | ||||
errcnt : integer range 0 to 1 := 0; | ||||
cntbits : integer range 1 to 8 := 1; | ||||
wsreg : integer := 0; | ||||
oepol : integer := 0; | ||||
prom8en : integer := 0; | ||||
netlist : integer := 0; | ||||
tech : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
apbo : out apb_slv_out_type; | ||||
sri : in memory_in_type; | ||||
sro : out memory_out_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
type sdram_in_type is record | ||||
haddr : std_logic_vector(31 downto 0); -- memory address | ||||
rhaddr : std_logic_vector(31 downto 0); -- latched memory address | ||||
hready : std_ulogic; | ||||
hsize : std_logic_vector(1 downto 0); | ||||
hsel : std_ulogic; | ||||
hwrite : std_ulogic; | ||||
htrans : std_logic_vector(1 downto 0); | ||||
rhtrans : std_logic_vector(1 downto 0); | ||||
nhtrans : std_logic_vector(1 downto 0); | ||||
idle : std_ulogic; | ||||
enable : std_ulogic; | ||||
error : std_ulogic; | ||||
merror : std_ulogic; | ||||
brmw : std_ulogic; | ||||
edac : std_ulogic; | ||||
srdis : std_logic; | ||||
end record; | ||||
type sdram_mctrl_out_type is record | ||||
address : std_logic_vector(16 downto 2); | ||||
busy : std_ulogic; | ||||
aload : std_ulogic; | ||||
bdrive : std_ulogic; | ||||
hready : std_ulogic; | ||||
hsel : std_ulogic; | ||||
bsel : std_ulogic; | ||||
hresp : std_logic_vector (1 downto 0); | ||||
vhready : std_ulogic; | ||||
prdata : std_logic_vector (31 downto 0); | ||||
end record; | ||||
type wprot_out_type is record | ||||
wprothit : std_ulogic; | ||||
end record; | ||||
component sdmctrl | ||||
generic ( | ||||
pindex : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
wprot : integer := 0; | ||||
sdbits : integer := 32; | ||||
pageburst : integer := 0; | ||||
mobile : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
sdi : in sdram_in_type; | ||||
sdo : out sdram_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
wpo : in wprot_out_type; | ||||
sdmo : out sdram_mctrl_out_type | ||||
); | ||||
end component; | ||||
component ftsdmctrl | ||||
generic ( | ||||
pindex : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
wprot : integer := 0; | ||||
sdbits : integer := 32; | ||||
syncrst : integer := 0; | ||||
pageburst : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
sdi : in sdram_in_type; | ||||
sdo : out sdram_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
wpo : in wprot_out_type; | ||||
sdmo : out sdram_mctrl_out_type | ||||
); | ||||
end component; | ||||
component ftmctrl | ||||
generic ( | ||||
hindex : integer := 0; | ||||
pindex : integer := 0; | ||||
romaddr : integer := 16#000#; | ||||
rommask : integer := 16#E00#; | ||||
ioaddr : integer := 16#200#; | ||||
iomask : integer := 16#E00#; | ||||
ramaddr : integer := 16#400#; | ||||
rammask : integer := 16#C00#; | ||||
paddr : integer := 0; | ||||
pmask : integer := 16#fff#; | ||||
wprot : integer := 0; | ||||
invclk : integer := 0; | ||||
fast : integer := 0; | ||||
romasel : integer := 28; | ||||
sdrasel : integer := 29; | ||||
srbanks : integer := 4; | ||||
ram8 : integer := 0; | ||||
ram16 : integer := 0; | ||||
sden : integer := 0; | ||||
sepbus : integer := 0; | ||||
sdbits : integer := 32; | ||||
sdlsb : integer := 2; -- set to 12 for the GE-HPE board | ||||
oepol : integer := 0; | ||||
edac : integer := 0; | ||||
syncrst : integer := 0; | ||||
pageburst : integer := 0; | ||||
scantest : integer := 0; | ||||
writefb : integer := 0; | ||||
netlist : integer := 0; | ||||
tech : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
memi : in memory_in_type; | ||||
memo : out memory_out_type; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
apbo : out apb_slv_out_type; | ||||
wpo : in wprot_out_type; | ||||
sdo : out sdram_out_type | ||||
); | ||||
end component; | ||||
component ssrctrl | ||||
generic ( | ||||
hindex : integer := 0; | ||||
pindex : integer := 0; | ||||
romaddr : integer := 0; | ||||
rommask : integer := 16#ff0#; | ||||
ramaddr : integer := 16#400#; | ||||
rammask : integer := 16#ff0#; | ||||
ioaddr : integer := 16#200#; | ||||
iomask : integer := 16#ff0#; | ||||
paddr : integer := 0; | ||||
pmask : integer := 16#fff#; | ||||
oepol : integer := 0; | ||||
bus16 : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
apbo : out apb_slv_out_type; | ||||
sri : in memory_in_type; | ||||
sro : out memory_out_type | ||||
); | ||||
end component; | ||||
type ddrmem_in_type is record | ||||
cke : std_ulogic; | ||||
cs : std_logic_vector(1 downto 0); | ||||
control : std_logic_vector(2 downto 0); --RAS,CAS,WE | ||||
ba : std_logic_vector(1 downto 0); | ||||
adr : std_logic_vector(13 downto 0); | ||||
dq : std_logic_vector(63 downto 0); | ||||
dm : std_logic_vector(15 downto 0); | ||||
dqs : std_logic_vector(15 downto 0); | ||||
dq_oe : std_logic_vector(63 downto 0); | ||||
dqs_oe : std_logic_vector(15 downto 0); | ||||
end record; | ||||
type ddrmem_out_type is record | ||||
dq : std_logic_vector(63 downto 0); | ||||
dqs : std_logic_vector(15 downto 0); | ||||
end record; | ||||
component ddrctrl | ||||
generic ( | ||||
hindex1 : integer := 0; | ||||
haddr1 : integer := 0; | ||||
hmask1 : integer := 16#f80#; | ||||
hindex2 : integer := 0; | ||||
haddr2 : integer := 0; | ||||
hmask2 : integer := 16#f80#; | ||||
pindex : integer := 3; | ||||
paddr : integer := 0; | ||||
numahb : integer := 1; -- Allowed: 1, 2 | ||||
ahb1sepclk : integer := 0; -- Allowed: 0, 1 | ||||
ahb2sepclk : integer := 0; -- Allowed: 0, 1 | ||||
modbanks : integer := 1; -- Allowed: 1, 2 | ||||
numchips : integer := 8; -- Allowed: 1, 2, 4, 8, 16 | ||||
chipbits : integer := 8; -- Allowed: 4, 8, 16 | ||||
chipsize : integer := 128; -- Allowed: 64, 128, 256, 512, 1024 (MB) | ||||
plldelay : integer := 0; -- Allowed: 0, 1 (Use 200us start up delay) | ||||
tech : integer := 0; | ||||
clkperiod : integer := 10); -- 100 Mhz | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk0 : in std_ulogic; | ||||
clk90 : in std_ulogic; | ||||
clk180 : in std_ulogic; | ||||
clk270 : in std_ulogic; | ||||
hclk1 : in std_ulogic; | ||||
hclk2 : in std_ulogic; | ||||
pclk : in std_ulogic; | ||||
ahb1si : in ahb_slv_in_type; | ||||
ahb1so : out ahb_slv_out_type; | ||||
ahb2si : in ahb_slv_in_type; | ||||
ahb2so : out ahb_slv_out_type; | ||||
apbsi : in apb_slv_in_type; | ||||
apbso : out apb_slv_out_type; | ||||
-- dapbso : out apb_slv_out_type; | ||||
ddsi : out ddrmem_in_type; | ||||
ddso : in ddrmem_out_type); | ||||
end component; | ||||
component ftsrctrl_v1 | ||||
generic ( | ||||
hindex: Integer := 1; | ||||
romaddr: Integer := 16#000#; | ||||
rommask: Integer := 16#ff0#; | ||||
ramaddr: Integer := 16#400#; | ||||
rammask: Integer := 16#ff0#; | ||||
ioaddr: Integer := 16#200#; | ||||
iomask: Integer := 16#ff0#; | ||||
ramws: Integer := 0; | ||||
romws: Integer := 0; | ||||
iows: Integer := 0; | ||||
rmw: Integer := 1; | ||||
srbanks: Integer range 1 to 8 := 8; | ||||
banksz: Integer range 0 to 13 := 0; | ||||
rombanks: Integer range 1 to 8 := 8; | ||||
rombanksz: Integer range 0 to 13 := 0; | ||||
rombankszdef: Integer range 0 to 13 := 6; | ||||
romasel: Integer range 0 to 28 := 0; | ||||
pindex: Integer := 0; | ||||
paddr: Integer := 16#000#; | ||||
pmask: Integer := 16#fff#; | ||||
edacen: Integer range 0 to 1 := 1; | ||||
errcnt: Integer range 0 to 1 := 0; | ||||
cntbits: Integer range 1 to 8 := 1; | ||||
wsreg: Integer := 1; | ||||
oepol: Integer := 0); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
apbo : out apb_slv_out_type; | ||||
sri : in memory_in_type; | ||||
sro : out memory_out_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddrsp | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
col : integer := 9; | ||||
Mbit : integer := 256; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddrsp64a | ||||
generic ( | ||||
memtech : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
col : integer := 9; | ||||
Mbyte : integer := 16; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
mobile : integer := 0; | ||||
confapi : integer := 0; | ||||
conf0 : integer := 0; | ||||
conf1 : integer := 0; | ||||
regoutput : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddrsp32a | ||||
generic ( | ||||
memtech : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
col : integer := 9; | ||||
Mbyte : integer := 16; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
mobile : integer := 0; | ||||
confapi : integer := 0; | ||||
conf0 : integer := 0; | ||||
conf1 : integer := 0; | ||||
regoutput : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddrsp16a | ||||
generic ( | ||||
memtech : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
col : integer := 9; | ||||
Mbyte : integer := 16; | ||||
fast : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
mobile : integer := 0; | ||||
confapi : integer := 0; | ||||
conf0 : integer := 0; | ||||
conf1 : integer := 0; | ||||
regoutput : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
clkread : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddrspa | ||||
generic ( | ||||
fabtech : integer := 0; | ||||
memtech : integer := 0; | ||||
rskew : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
clkmul : integer := 2; | ||||
clkdiv : integer := 2; | ||||
col : integer := 9; | ||||
Mbyte : integer := 16; | ||||
rstdel : integer := 200; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
ddrbits : integer := 16; | ||||
ahbfreq : integer := 50; | ||||
mobile : integer := 0; | ||||
confapi : integer := 0; | ||||
conf0 : integer := 0; | ||||
conf1 : integer := 0; | ||||
regoutput : integer range 0 to 1 := 0 | ||||
); | ||||
port ( | ||||
rst_ddr : in std_ulogic; | ||||
rst_ahb : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
lock : out std_ulogic; -- DCM locked | ||||
clkddro : out std_ulogic; -- DCM locked | ||||
clkddri : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
ddr_clk : out std_logic_vector(2 downto 0); | ||||
ddr_clkb : out std_logic_vector(2 downto 0); | ||||
ddr_clk_fb_out : out std_logic; | ||||
ddr_clk_fb : in std_logic; | ||||
ddr_cke : out std_logic_vector(1 downto 0); | ||||
ddr_csb : out std_logic_vector(1 downto 0); | ||||
ddr_web : out std_ulogic; -- ddr write enable | ||||
ddr_rasb : out std_ulogic; -- ddr ras | ||||
ddr_casb : out std_ulogic; -- ddr cas | ||||
ddr_dm : out std_logic_vector (ddrbits/8-1 downto 0); -- ddr dm | ||||
ddr_dqs : inout std_logic_vector (ddrbits/8-1 downto 0); -- ddr dqs | ||||
ddr_ad : out std_logic_vector (13 downto 0); -- ddr address | ||||
ddr_ba : out std_logic_vector (1 downto 0); -- ddr bank address | ||||
ddr_dq : inout std_logic_vector (ddrbits-1 downto 0) -- ddr data | ||||
); | ||||
end component; | ||||
component ddr2buf is | ||||
generic (tech : integer := 0; wabits : integer := 6; wdbits : integer := 8; | ||||
rabits : integer := 6; rdbits : integer := 8; | ||||
sepclk : integer := 0; wrfst : integer := 0; testen : integer := 0); | ||||
port ( | ||||
rclk : in std_ulogic; | ||||
renable : in std_ulogic; | ||||
raddress : in std_logic_vector((rabits -1) downto 0); | ||||
dataout : out std_logic_vector((rdbits -1) downto 0); | ||||
wclk : in std_ulogic; | ||||
write : in std_ulogic; | ||||
writebig : in std_ulogic; | ||||
waddress : in std_logic_vector((wabits -1) downto 0); | ||||
datain : in std_logic_vector((wdbits -1) downto 0); | ||||
testin : in std_logic_vector(3 downto 0) := "0000"); | ||||
end component; | ||||
type ddr_request_type is record | ||||
startaddr : std_logic_vector(31 downto 0); | ||||
endaddr : std_logic_vector(9 downto 0); | ||||
hsize : std_logic_vector(2 downto 0); | ||||
hwrite : std_ulogic; | ||||
hio : std_ulogic; | ||||
maskdata : std_ulogic; | ||||
maskcb : std_ulogic; | ||||
end record; | ||||
component ddr2spax_ahb is | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
burstlen : integer := 8; | ||||
nosync : integer := 0; | ||||
ahbbits : integer := ahbdw | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
request : out ddr_request_type; | ||||
start_tog : out std_logic; | ||||
done_tog : in std_logic; | ||||
wbwaddr : out std_logic_vector(log2(burstlen) downto 0); | ||||
wbwdata : out std_logic_vector(ahbdw-1 downto 0); | ||||
wbwrite : out std_logic; | ||||
wbwritebig: out std_logic; | ||||
rbraddr : out std_logic_vector(log2(burstlen*32/ahbdw)-1 downto 0); | ||||
rbrdata : in std_logic_vector(ahbdw-1 downto 0) | ||||
); | ||||
end component; | ||||
component ft_ddr2spax_ahb is | ||||
generic ( | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
burstlen : integer := 8; | ||||
nosync : integer := 0; | ||||
ahbbits : integer := 64; | ||||
bufbits : integer := 96; | ||||
ddrbits : integer := 16; | ||||
hwidthen : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
ce : out std_logic; | ||||
request : out ddr_request_type; | ||||
start_tog : out std_logic; | ||||
done_tog : in std_logic; | ||||
wbwaddr : out std_logic_vector(log2(burstlen)-2 downto 0); | ||||
wbwdata : out std_logic_vector(bufbits-1 downto 0); | ||||
wbwrite : out std_logic; | ||||
wbwritebig: out std_logic; | ||||
rbraddr : out std_logic_vector(log2(burstlen*32/ahbbits)-1 downto 0); | ||||
rbrdata : in std_logic_vector(bufbits-1 downto 0); | ||||
hwidth : in std_logic | ||||
); | ||||
end component; | ||||
component ddr2spax_ddr is | ||||
generic ( | ||||
ddrbits : integer := 32; | ||||
burstlen : integer := 8; | ||||
MHz : integer := 100; | ||||
TRFC : integer := 130; | ||||
col : integer := 9; | ||||
Mbyte : integer := 8; | ||||
fastahb : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
readdly : integer := 1; | ||||
odten : integer := 0; | ||||
octen : integer := 0; | ||||
dqsgating : integer := 0; | ||||
nosync : integer := 0; | ||||
eightbanks : integer range 0 to 1 := 0; -- Set to 1 if 8 banks instead of 4 | ||||
dqsse : integer range 0 to 1 := 0; -- single ended DQS | ||||
ddr_syncrst: integer range 0 to 1 := 0; | ||||
chkbits : integer := 0; | ||||
bigmem : integer range 0 to 1 := 0; | ||||
raspipe : integer range 0 to 1 := 0; | ||||
hwidthen : integer range 0 to 1 := 0 | ||||
); | ||||
port ( | ||||
ddr_rst : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
request : in ddr_request_type; | ||||
start_tog: in std_logic; | ||||
done_tog : out std_logic; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type; | ||||
wbraddr : out std_logic_vector(log2((16*burstlen)/ddrbits) downto 0); | ||||
wbrdata : in std_logic_vector(2*(ddrbits+chkbits)-1 downto 0); | ||||
rbwaddr : out std_logic_vector(log2((16*burstlen)/ddrbits)-1 downto 0); | ||||
rbwdata : out std_logic_vector(2*(ddrbits+chkbits)-1 downto 0); | ||||
rbwrite : out std_logic; | ||||
hwidth : in std_ulogic | ||||
); | ||||
end component; | ||||
component ddr2spax is | ||||
generic ( | ||||
memtech : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
ddrbits : integer := 32; | ||||
burstlen : integer := 8; | ||||
MHz : integer := 100; | ||||
TRFC : integer := 130; | ||||
col : integer := 9; | ||||
Mbyte : integer := 8; | ||||
fastahb : integer := 0; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
readdly : integer := 1; | ||||
odten : integer := 0; | ||||
octen : integer := 0; | ||||
dqsgating : integer := 0; | ||||
nosync : integer := 0; | ||||
eightbanks : integer range 0 to 1 := 0; -- Set to 1 if 8 banks instead of 4 | ||||
dqsse : integer range 0 to 1 := 0; -- single ended DQS | ||||
ddr_syncrst: integer range 0 to 1 := 0; | ||||
ahbbits : integer := ahbdw; | ||||
ft : integer range 0 to 1 := 0; | ||||
bigmem : integer range 0 to 1 := 0; | ||||
raspipe : integer range 0 to 1 := 0; | ||||
hwidthen : integer range 0 to 1 := 0 | ||||
); | ||||
port ( | ||||
ddr_rst : in std_ulogic; | ||||
ahb_rst : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
sdi : in sdctrl_in_type; | ||||
sdo : out sdctrl_out_type; | ||||
hwidth : in std_ulogic | ||||
); | ||||
end component; | ||||
component ddr2spa | ||||
generic ( | ||||
fabtech : integer := 0; | ||||
memtech : integer := 0; | ||||
rskew : integer := 0; | ||||
hindex : integer := 0; | ||||
haddr : integer := 0; | ||||
hmask : integer := 16#f00#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
MHz : integer := 100; | ||||
TRFC : integer := 130; | ||||
clkmul : integer := 2; | ||||
clkdiv : integer := 2; | ||||
col : integer := 9; | ||||
Mbyte : integer := 16; | ||||
rstdel : integer := 200; | ||||
pwron : integer := 0; | ||||
oepol : integer := 0; | ||||
ddrbits : integer := 16; | ||||
ahbfreq : integer := 50; | ||||
readdly : integer := 1; | ||||
ddelayb0 : integer := 0; | ||||
ddelayb1 : integer := 0; | ||||
ddelayb2 : integer := 0; | ||||
ddelayb3 : integer := 0; | ||||
ddelayb4 : integer := 0; | ||||
ddelayb5 : integer := 0; | ||||
ddelayb6 : integer := 0; | ||||
ddelayb7 : integer := 0; | ||||
cbdelayb0 : integer := 0; | ||||
cbdelayb1 : integer := 0; | ||||
cbdelayb2 : integer := 0; | ||||
cbdelayb3 : integer := 0; | ||||
numidelctrl : integer := 4; | ||||
norefclk : integer := 0; | ||||
odten : integer := 0; | ||||
octen : integer := 0; | ||||
dqsgating : integer := 0; | ||||
nosync : integer := 0; | ||||
eightbanks : integer := 0; | ||||
dqsse : integer range 0 to 1 := 0; | ||||
burstlen : integer range 4 to 128 := 8; | ||||
ahbbits : integer := ahbdw; | ||||
ft : integer range 0 to 1 := 0; | ||||
ftbits : integer := 0; | ||||
bigmem : integer range 0 to 1 := 0; | ||||
raspipe : integer range 0 to 1 := 0 | ||||
); | ||||
port ( | ||||
rst_ddr : in std_ulogic; | ||||
rst_ahb : in std_ulogic; | ||||
clk_ddr : in std_ulogic; | ||||
clk_ahb : in std_ulogic; | ||||
clkref200 : in std_ulogic; | ||||
lock : out std_ulogic; -- DCM locked | ||||
clkddro : out std_ulogic; -- DCM locked | ||||
clkddri : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
ddr_clk : out std_logic_vector(2 downto 0); | ||||
ddr_clkb : out std_logic_vector(2 downto 0); | ||||
ddr_clk_fb_out : out std_logic; | ||||
ddr_clk_fb : in std_logic; | ||||
ddr_cke : out std_logic_vector(1 downto 0); | ||||
ddr_csb : out std_logic_vector(1 downto 0); | ||||
ddr_web : out std_ulogic; -- ddr write enable | ||||
ddr_rasb : out std_ulogic; -- ddr ras | ||||
ddr_casb : out std_ulogic; -- ddr cas | ||||
ddr_dm : out std_logic_vector ((ddrbits+ftbits)/8-1 downto 0); -- ddr dm | ||||
ddr_dqs : inout std_logic_vector ((ddrbits+ftbits)/8-1 downto 0); -- ddr dqs | ||||
ddr_dqsn : inout std_logic_vector ((ddrbits+ftbits)/8-1 downto 0); -- ddr dqsn | ||||
ddr_ad : out std_logic_vector (13 downto 0); -- ddr address | ||||
ddr_ba : out std_logic_vector (1+eightbanks downto 0); -- ddr bank address | ||||
ddr_dq : inout std_logic_vector (ddrbits+ftbits-1 downto 0); -- ddr data | ||||
ddr_odt : out std_logic_vector(1 downto 0); | ||||
ce : out std_logic | ||||
); | ||||
end component; | ||||
component ddrphy_wrap | ||||
generic (tech : integer := virtex2; MHz : integer := 100; | ||||
rstdelay : integer := 200; dbits : integer := 16; | ||||
clk_mul : integer := 2 ; clk_div : integer := 2; | ||||
rskew : integer := 0; mobile : integer := 0); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_logic; -- input clock | ||||
clkout : out std_ulogic; -- system clock | ||||
clkread : out std_ulogic; -- system clock | ||||
lock : out std_ulogic; -- DCM locked | ||||
ddr_clk : out std_logic_vector(2 downto 0); | ||||
ddr_clkb : out std_logic_vector(2 downto 0); | ||||
ddr_clk_fb_out : out std_logic; | ||||
ddr_clk_fb : in std_logic; | ||||
ddr_cke : out std_logic_vector(1 downto 0); | ||||
ddr_csb : out std_logic_vector(1 downto 0); | ||||
ddr_web : out std_ulogic; -- ddr write enable | ||||
ddr_rasb : out std_ulogic; -- ddr ras | ||||
ddr_casb : out std_ulogic; -- ddr cas | ||||
ddr_dm : out std_logic_vector (dbits/8-1 downto 0); -- ddr dm | ||||
ddr_dqs : inout std_logic_vector (dbits/8-1 downto 0); -- ddr dqs | ||||
ddr_ad : out std_logic_vector (13 downto 0); -- ddr address | ||||
ddr_ba : out std_logic_vector (1 downto 0); -- ddr bank address | ||||
ddr_dq : inout std_logic_vector (dbits-1 downto 0); -- ddr data | ||||
sdi : out sdctrl_in_type; | ||||
sdo : in sdctrl_out_type); | ||||
end component; | ||||
component ddr2phy_wrap | ||||
generic ( | ||||
tech : integer := virtex2; MHz : integer := 100; | ||||
rstdelay : integer := 200; dbits : integer := 16; padbits : integer := 0; | ||||
clk_mul : integer := 2; clk_div : integer := 2; | ||||
ddelayb0 : integer := 0; ddelayb1 : integer := 0; ddelayb2 : integer := 0; | ||||
ddelayb3 : integer := 0; ddelayb4 : integer := 0; ddelayb5 : integer := 0; | ||||
ddelayb6 : integer := 0; ddelayb7 : integer := 0; | ||||
cbdelayb0 : integer := 0; cbdelayb1: integer := 0; cbdelayb2: integer := 0; | ||||
cbdelayb3 : integer := 0; | ||||
numidelctrl : integer := 4; norefclk : integer := 0; rskew : integer := 0; | ||||
eightbanks : integer range 0 to 1 := 0; dqsse : integer range 0 to 1 := 0; | ||||
abits : integer := 14; nclk : integer := 3; ncs : integer := 2; | ||||
cben : integer := 0; chkbits : integer := 8; ctrl2en : integer := 0); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_logic; -- input clock | ||||
clkref200 : in std_logic; -- input 200MHz clock | ||||
clkout : out std_ulogic; -- system clock | ||||
lock : out std_ulogic; -- DCM locked | ||||
ddr_clk : out std_logic_vector(nclk-1 downto 0); | ||||
ddr_clkb : out std_logic_vector(nclk-1 downto 0); | ||||
ddr_clk_fb_out : out std_logic; | ||||
ddr_clk_fb : in std_logic; | ||||
ddr_cke : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_csb : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_web : out std_ulogic; -- ddr write enable | ||||
ddr_rasb : out std_ulogic; -- ddr ras | ||||
ddr_casb : out std_ulogic; -- ddr cas | ||||
ddr_dm : out std_logic_vector ((dbits+padbits)/8-1 downto 0); -- ddr dm | ||||
ddr_dqs : inout std_logic_vector ((dbits+padbits)/8-1 downto 0); -- ddr dqs | ||||
ddr_dqsn : inout std_logic_vector ((dbits+padbits)/8-1 downto 0); -- ddr dqs | ||||
ddr_ad : out std_logic_vector (abits-1 downto 0); -- ddr address | ||||
ddr_ba : out std_logic_vector (1+eightbanks downto 0); -- ddr bank address | ||||
ddr_dq : inout std_logic_vector (dbits+padbits-1 downto 0); -- ddr data | ||||
ddr_odt : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_cbdm : out std_logic_vector(chkbits/8-1 downto 0); | ||||
ddr_cbdqs : inout std_logic_vector(chkbits/8-1 downto 0); | ||||
ddr_cbdqsn : inout std_logic_vector(chkbits/8-1 downto 0); | ||||
ddr_cbdq : inout std_logic_vector(chkbits-1 downto 0); | ||||
ddr_web2 : out std_ulogic; -- ddr write enable | ||||
ddr_rasb2 : out std_ulogic; -- ddr ras | ||||
ddr_casb2 : out std_ulogic; -- ddr cas | ||||
ddr_ad2 : out std_logic_vector (abits-1 downto 0); -- ddr address | ||||
ddr_ba2 : out std_logic_vector (1+eightbanks downto 0); -- ddr bank address | ||||
sdi : out sdctrl_in_type; | ||||
sdo : in sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ddr2phy_wrap_cbd is | ||||
generic (tech : integer := virtex2; MHz : integer := 100; | ||||
rstdelay : integer := 200; dbits : integer := 16; padbits : integer := 0; | ||||
clk_mul : integer := 2 ; clk_div : integer := 2; | ||||
ddelayb0 : integer := 0; ddelayb1 : integer := 0; ddelayb2 : integer := 0; | ||||
ddelayb3 : integer := 0; ddelayb4 : integer := 0; ddelayb5 : integer := 0; | ||||
ddelayb6 : integer := 0; ddelayb7 : integer := 0; | ||||
cbdelayb0 : integer := 0; cbdelayb1: integer := 0; cbdelayb2: integer := 0; | ||||
cbdelayb3 : integer := 0; | ||||
numidelctrl : integer := 4; norefclk : integer := 0; odten : integer := 0; | ||||
rskew : integer := 0; eightbanks : integer range 0 to 1 := 0; | ||||
dqsse : integer range 0 to 1 := 0; | ||||
abits : integer := 14; nclk : integer := 3; ncs : integer := 2; | ||||
chkbits : integer := 0; ctrl2en : integer := 0); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_logic; -- input clock | ||||
clkref200 : in std_logic; -- input 200MHz clock | ||||
clkout : out std_ulogic; -- system clock | ||||
lock : out std_ulogic; -- DCM locked | ||||
ddr_clk : out std_logic_vector(nclk-1 downto 0); | ||||
ddr_clkb : out std_logic_vector(nclk-1 downto 0); | ||||
ddr_clk_fb_out : out std_logic; | ||||
ddr_clk_fb : in std_logic; | ||||
ddr_cke : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_csb : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_web : out std_ulogic; -- ddr write enable | ||||
ddr_rasb : out std_ulogic; -- ddr ras | ||||
ddr_casb : out std_ulogic; -- ddr cas | ||||
ddr_dm : out std_logic_vector ((dbits+padbits+chkbits)/8-1 downto 0); -- ddr dm | ||||
ddr_dqs : inout std_logic_vector ((dbits+padbits+chkbits)/8-1 downto 0); -- ddr dqs | ||||
ddr_dqsn : inout std_logic_vector ((dbits+padbits+chkbits)/8-1 downto 0); -- ddr dqs | ||||
ddr_ad : out std_logic_vector (abits-1 downto 0); -- ddr address | ||||
ddr_ba : out std_logic_vector (1+eightbanks downto 0); -- ddr bank address | ||||
ddr_dq : inout std_logic_vector (dbits+padbits+chkbits-1 downto 0); -- ddr data | ||||
ddr_odt : out std_logic_vector(ncs-1 downto 0); | ||||
ddr_web2 : out std_ulogic; -- ddr write enable | ||||
ddr_rasb2 : out std_ulogic; -- ddr ras | ||||
ddr_casb2 : out std_ulogic; -- ddr cas | ||||
ddr_ad2 : out std_logic_vector (abits-1 downto 0); -- ddr address | ||||
ddr_ba2 : out std_logic_vector (1+eightbanks downto 0); -- ddr bank address | ||||
sdi : out sdctrl_in_type; | ||||
sdo : in sdctrl_out_type | ||||
); | ||||
end component; | ||||
component ftsrctrl8 is | ||||
generic ( | ||||
hindex : integer := 0; | ||||
ramaddr : integer := 16#400#; | ||||
rammask : integer := 16#ff0#; | ||||
ioaddr : integer := 16#200#; | ||||
iomask : integer := 16#ff0#; | ||||
ramws : integer := 0; | ||||
iows : integer := 2; | ||||
srbanks : integer range 1 to 8 := 1; | ||||
banksz : integer range 0 to 15 := 15; | ||||
pindex : integer := 0; | ||||
paddr : integer := 0; | ||||
pmask : integer := 16#fff#; | ||||
edacen : integer range 0 to 1 := 1; | ||||
errcnt : integer range 0 to 1 := 1; | ||||
cntbits : integer range 1 to 8 := 1; | ||||
wsreg : integer := 0; | ||||
oepol : integer := 0 | ||||
); | ||||
port ( | ||||
rst : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
apbi : in apb_slv_in_type; | ||||
apbo : out apb_slv_out_type; | ||||
sri : in memory_in_type; | ||||
sro : out memory_out_type | ||||
); | ||||
end component; | ||||
type spimctrl_in_type is record | ||||
miso : std_ulogic; | ||||
mosi : std_ulogic; | ||||
cd : std_ulogic; | ||||
end record; | ||||
type spimctrl_out_type is record | ||||
mosi : std_ulogic; | ||||
mosioen : std_ulogic; | ||||
sck : std_ulogic; | ||||
csn : std_ulogic; | ||||
cdcsnoen : std_ulogic; | ||||
errorn : std_ulogic; | ||||
ready : std_ulogic; | ||||
initialized : std_ulogic; | ||||
end record; | ||||
component spimctrl | ||||
generic ( | ||||
hindex : integer := 0; | ||||
hirq : integer := 0; | ||||
faddr : integer := 16#000#; | ||||
fmask : integer := 16#fff#; | ||||
ioaddr : integer := 16#000#; | ||||
iomask : integer := 16#fff#; | ||||
spliten : integer := 0; | ||||
oepol : integer := 0; | ||||
sdcard : integer range 0 to 1 := 0; | ||||
readcmd : integer range 0 to 255 := 16#0B#; | ||||
dummybyte : integer range 0 to 1 := 1; | ||||
dualoutput : integer range 0 to 1 := 0; | ||||
scaler : integer range 1 to 512 := 1; | ||||
altscaler : integer range 1 to 512 := 1; | ||||
pwrupcnt : integer := 0; | ||||
maxahbaccsz : integer range 0 to 256 := AHBDW | ||||
); | ||||
port ( | ||||
rstn : in std_ulogic; | ||||
clk : in std_ulogic; | ||||
ahbsi : in ahb_slv_in_type; | ||||
ahbso : out ahb_slv_out_type; | ||||
spii : in spimctrl_in_type; | ||||
spio : out spimctrl_out_type | ||||
); | ||||
end component; | ||||
end; | ||||