⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddrrec.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 2 页
字号:
--------------------------------------------------------------------------------  This file is a part of the GRLIB VHDL IP LIBRARY--  Copyright (C) 2003, Gaisler Research----  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 ------------------------------------------------------------------------------- File:        ddrrec.vhd-- Author:      David Lindh - Gaisler Research-- Description: DDR-RAM memory controller interface records------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;library grlib;use grlib.amba.all;use grlib.stdlib.all;library gaisler;use grlib.devices.all;use gaisler.memctrl.all; library techmap;use techmap.gencomp.all;use techmap.allmem.all;package ddrrec is--------------------------------------------------------------------------------- Options-------------------------------------------------------------------------------    -- This can be changed   constant buffersize : integer := 4;  -- Data buffer size, 2,4,8.,.-1024 (8 word) bursts--------------------------------------------------------------------------------- Data sizes, should not haveto be changed-------------------------------------------------------------------------------      type dm_arr is array(4 to 16) of integer;   constant dmvector   : dm_arr  := (2,others => 1);   constant maxdqsize : integer := 64;   constant maxdmsize : integer := 16;   constant maxstrobesize : integer := 16;   constant adrbits    : integer := 16;    -- BA + row/col address -1 (2+14-1)   constant ahbadr     : integer := 32;     -- AHB addressbits   constant ahbdata    : integer := 32;     -- AHB databits   constant bufferadr  : integer := log2(buffersize)+2;   constant ddrcfg_reset : std_logic_vector(31 downto 0):=     '1'  &                              --refresh     "00" &                              -- CAS     "00" &                              -- Memcmd     "10" &                              -- Burst length     '0'  &                              -- Auto Precharge     "11" &                              -- Read prediction     "00" &                              -- Write protection      x"00000";   --Memory commands (RAS, CAS, WE)  constant CMD_READ   : std_logic_vector(2 downto 0) := "101";  constant CMD_WRITE  : std_logic_vector(2 downto 0) := "100";  constant CMD_NOP    : std_logic_vector(2 downto 0) := "111";  constant CMD_ACTIVE : std_logic_vector(2 downto 0) := "011";  constant CMD_BT     : std_logic_vector(2 downto 0) := "110";  constant CMD_PRE    : std_logic_vector(2 downto 0) := "010";  constant CMD_AR     : std_logic_vector(2 downto 0) := "001";  constant CMD_LMR    : std_logic_vector(2 downto 0) := "000";  constant BANK0  : std_logic_vector(1 downto 0) := "10";  constant BANK1  : std_logic_vector(1 downto 0) := "01";  constant BANK01 : std_logic_vector(1 downto 0) := "00";  type burst_mask_type is array (buffersize-1 downto 0) of integer range 1 to 8;  type two_burst_mask_type is array (1 downto 0) of burst_mask_type;  type two_buf_adr_type is array (1 downto 0) of std_logic_vector((log2(buffersize)-1) downto 0);  type two_buf_data_type is array (1 downto 0) of std_logic_vector((bufferadr-1) downto 0);  type pre_row_type is array (7 downto 0) of std_logic_vector(adrbits-1 downto 0);  type two_ddr_adr_type is array (1 downto 0) of std_logic_vector(adrbits-1 downto 0);  type two_ddr_bank_type is array (1 downto 0) of std_logic_vector(1 downto 0);  type two_pre_bank_type is array (1 downto 0) of integer range 0 to 7;  type blwaittype is array (6 downto 0) of integer range 2 to 8;  type mlwaittype is array (1 downto 0) of integer range 1 to 8;   type bufwaittype is array (6 downto 0) of std_logic_vector((log2(buffersize)-1) downto 0);  type ahbwaittype is array (6 downto 0) of integer range 0 to 1; --------------------------------------------------------------------------------- Records-------------------------------------------------------------------------------     -- APB controller  type apb_ctrl_in_type is record    apbsi : apb_slv_in_type;    apb_cmd_done : std_ulogic;    ready    : std_ulogic;  end record;  type apb_ctrl_out_type is record    apbso   : apb_slv_out_type;    ddrcfg_reg : std_logic_vector(31 downto 0);  end record;-------------------------------------------------------------------------------  -- Sync ram dp (data-fifo)  type syncram_dp_in_type is record    address1 :  std_logic_vector((bufferadr -1) downto 0);    datain1  :  std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0);    enable1  :  std_ulogic;    write1   :  std_ulogic;    address2 :  std_logic_vector((bufferadr-1) downto 0);    datain2  :  std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0);    enable2  :  std_ulogic;    write2   :  std_ulogic;  end record;  type syncram_dp_out_type is record    dataout1 :  std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0);    dataout2 :  std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0);  end record;  type two_syncram_dp_out_type is array (1 downto 0) of  syncram_dp_out_type;  type two_syncram_dp_in_type is array (1 downto 0) of  syncram_dp_in_type;   -------------------------------------------------------------------------------  -- Sync ram 2p (adr-fifo)  type syncram_2p_in_type is record    renable  :  std_ulogic;    raddress :  std_logic_vector((log2(buffersize) -1) downto 0);     write    :  std_ulogic;    waddress :  std_logic_vector((log2(buffersize)-1) downto 0);    datain   :  std_logic_vector((ahbadr-1+1) downto 0);  end record;  type syncram_2p_out_type is record    dataout  :  std_logic_vector((ahbadr-1+1) downto 0);  end record;  -----------------------------------------------------------------------------  -- High speed interface towards memory  type hs_in_type is record    bl        : integer range 2 to 8;    ml        : integer range 1 to 8;    cas       : std_logic_vector(1 downto 0);    buf       : std_logic_vector((log2(buffersize)-1) downto 0);    ahb       : integer range 0 to 1;    cs        : std_logic_vector(1 downto 0);    adr       : std_logic_vector(adrbits-1 downto 0);    cmd       : std_logic_vector(2 downto 0);    cmd_valid : std_ulogic;    dsramso   : two_syncram_dp_out_type;    ddso      : ddrmem_out_type;                              end record;  type hs_out_type is record    hs_busy   : std_ulogic;    cmdDone   : two_buf_adr_type;    dsramsi   : two_syncram_dp_in_type;    ddsi      : ddrmem_in_type;  end record;                                                              -----------------------------------------------------------------------------  -- AHB controller    type ahb_ctrl_in_type is record    ahbsi        : ahb_slv_in_type;    asramsi      : syncram_2p_in_type;    dsramsi      : syncram_dp_in_type;    burstlength  : integer range 2 to 8;    r_predict    : std_ulogic;    w_prot       : std_ulogic;    locked       : std_ulogic;    rw_cmd_done  : std_logic_vector((log2(buffersize) -1) downto 0);  end record;  type ahb_ctrl_out_type is record    ahbso        : ahb_slv_out_type;    asramso      : syncram_2p_out_type;    dsramso      : syncram_dp_out_type;    rw_cmd_valid : std_logic_vector((log2(buffersize) -1) downto 0);    w_data_valid : std_logic_vector((log2(buffersize) -1) downto 0);    burst_dm     : burst_mask_type;  end record;  type two_ahb_ctrl_out_type is array (1 downto 0) of ahb_ctrl_out_type;  type two_ahb_ctrl_in_type is array (1 downto 0) of ahb_ctrl_in_type;  -----------------------------------------------------------------------------  -- Main controller  type main_ctrl_in_type is record    apbctrlso  : apb_ctrl_out_type;    ahbctrlso  : two_ahb_ctrl_out_type;    hsso       : hs_out_type;  end record;  type main_ctrl_out_type is record    apbctrlsi : apb_ctrl_in_type;    ahbctrlsi : two_ahb_ctrl_in_type;    hssi      : hs_in_type;  end record;-------------------------------------------------------------------------------  -- DDRCFG register  type config_out_type is record    refresh  : std_ulogic;    cas      : std_logic_vector(1 downto 0);    memcmd   : std_logic_vector(1 downto 0);    bl       : std_logic_vector(1 downto 0);    autopre  : std_ulogic;    r_predict : std_logic_vector(1 downto 0);    w_prot   : std_logic_vector(1 downto 0);    ready    : std_ulogic;  end record;   ------------------------------------------------------------------------------- -- State machines-------------------------------------------------------------------------------   type apbcycletype is (idle, refresh, cmd, wait_lmr1, wait_lmr2, cmdlmr, cmdDone, cmdDone2);  type timercycletype is (t1, t2, t3, t4);  type initcycletype is (idle, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);  type maincycletype is (init, idle, pre1, act1, w1, r1, rw, c1, c2);  type rwcycletype is (idle, r, w);  type cmdbuffercycletype is (no_cmd, new_cmd);  type cmdcycletype is(idle, hold);   ----------------------------------------------------------------------------- -- AHB - Local variables   type ahb_reg_type is record     readcounter      : integer range 0 to 8;     writecounter     : integer range 0 to 8;     blockburstlength : integer range 0 to 8;     hready           : std_ulogic;     hresp            : std_logic_vector(1 downto 0);     rwadrbuffer      : std_logic_vector((ahbadr-1) downto 0);     use_read_buffer  : std_logic_vector((log2(buffersize)-1) downto 0);     pre_read_buffer  : std_logic_vector((log2(buffersize)-1) downto 0);     pre_read_adr     : std_logic_vector((ahbadr-1) downto 0);     pre_read_valid   : std_ulogic;     use_write_buffer : std_logic_vector((log2(buffersize)-1) downto 0);     rw_cmd_valid     : std_logic_vector((log2(buffersize)-1) downto 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -