📄 ddrrec.vhd
字号:
w_data_valid : std_logic_vector((log2(buffersize)-1) downto 0); sync_adr : std_logic_vector((bufferadr-1) downto 0); sync_wdata : std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0); sync_write : std_ulogic; sync_busy : std_ulogic; sync_busy_adr : std_logic_vector((bufferadr-1) downto 0); sync2_adr : std_logic_vector((log2(buffersize)-1) downto 0); sync2_wdata : std_logic_vector((ahbadr-1+1) downto 0); sync2_write : std_ulogic; sync2_busy : std_ulogic; doRead : std_ulogic; doWrite : std_ulogic; new_burst : std_ulogic; startp : integer range 0 to 7; ahbstartp : integer range 0 to 7; even_odd_write : integer range 0 to 1; burst_hsize : integer range 1 to 8; offset : std_logic_vector(2 downto 0); ahboffset : std_logic_vector(2 downto 0); read_data : std_logic_vector(maxdqsize-1 downto 0); cur_hrdata : std_logic_vector((ahbdata-1) downto 0); cur_hready : std_ulogic; cur_hresp : std_logic_vector(1 downto 0); prev_retry : std_ulogic; prev_error : std_ulogic; burst_dm : burst_mask_type; end record;------------------------------------------------------------------------------- -- APB controller - Local variables type apb_reg_type is record ddrcfg_reg : std_logic_vector(31 downto 0); end record;------------------------------------------------------------------------------- -- High speed RW - Local variables type rw_reg_type is record cbufstate : cmdbuffercycletype; cmdstate : cmdcycletype; rwstate : rwcycletype; cur_buf : two_buf_adr_type; cur_ahb : integer range 0 to 1; use_bl : integer range 2 to 8; use_ml : integer range 1 to 8; use_buf : std_logic_vector((log2(buffersize)-1) downto 0); use_ahb : integer range 0 to 1; use_cas : std_ulogic; rw_cmd : std_logic_vector(2 downto 0); rw_bl : integer range 2 to 8; rw_cas : integer range 2 to 3; next_bl : integer range 2 to 8; next_ml : integer range 1 to 8; next_buf : std_logic_vector((log2(buffersize)-1) downto 0); next_ahb : integer range 0 to 1; next_cas : std_logic_vector(1 downto 0); next_adr : std_logic_vector(adrbits-1 downto 0); next_cs : std_logic_vector(1 downto 0); next_cmd : std_logic_vector(2 downto 0); set_cmd : std_logic_vector(2 downto 0); set_adr : std_logic_vector(adrbits-1 downto 0); set_cs : std_logic_vector(1 downto 0); set_cke : std_ulogic; hs_busy : std_ulogic; cmdDone : two_buf_adr_type; begin_read : std_ulogic; begin_write : std_ulogic; dq_dqs_oe : std_ulogic; w_ce : std_ulogic; r_ce : std_ulogic; cnt : integer range 0 to 8; holdcnt : integer range 0 to 31; r2wholdcnt : integer range 0 to 15; act2precnt : integer range 0 to 15; wait_time : integer range 0 to 31; readwait : std_logic_vector(6 downto 0); writewait : std_logic_vector(1 downto 0); bufwait : bufwaittype; ahbwait : ahbwaittype; blwait : blwaittype; mlwait : mlwaittype; caswait : std_logic_vector(6 downto 0); dm1_o : std_logic_vector((maxdmsize-1) downto 0); dm2_o : std_logic_vector((maxdmsize-1) downto 0); dqs1_o : std_ulogic; sync_adr : two_buf_data_type; sync_write : std_logic_vector(1 downto 0); sync_wdata : std_logic_vector(2*(maxdqsize+maxdmsize)-1 downto 0); end record;------------------------------------------------------------------------------- -- High speed CMD - Local variables type cmd_reg_type is record cur_cmd : std_logic_vector(2 downto 0); cur_cs : std_logic_vector(1 downto 0); cur_adr : std_logic_vector(adrbits-1 downto 0); next_cmd : std_logic_vector(2 downto 0); next_cs : std_logic_vector(1 downto 0); next_adr : std_logic_vector(adrbits-1 downto 0); end record;------------------------------------------------------------------------------- -- Main controller - Local variables type main_reg_type is record -- For main controller mainstate : maincycletype; loadcmdbuffer : std_ulogic; cmdbufferdata : std_logic_vector(2 downto 0); adrbufferdata : std_logic_vector(adrbits-1 downto 0); use_ahb : integer range 0 to 1; use_bl : integer range 2 to 8; use_cas : std_logic_vector(1 downto 0); use_buf : std_logic_vector((log2(buffersize)-1) downto 0); burstlength : integer range 2 to 8; rw_cmd_done : two_buf_adr_type; lmradr : std_logic_vector(adrbits-1 downto 0); memCmdDone : std_ulogic; lockAHB : std_logic_vector(1 downto 0); pre_row : pre_row_type; pre_chg : std_logic_vector(7 downto 0); pre_bankadr : two_pre_bank_type; sync2_adr : two_buf_adr_type; -- For init statemachine initstate : initcycletype; doMemInit : std_ulogic; memInitDone : std_ulogic; initDelay : integer range 0 to 255; cs : std_logic_vector(1 downto 0); -- For address calculator coladdress : two_ddr_adr_type; tmpcoladdress : two_ddr_adr_type; rowaddress : two_ddr_adr_type; addressrange : integer range 0 to 31; tmpcolbits : integer range 0 to 15; colbits : integer range 0 to 15; rowbits : integer range 0 to 15; bankselect : two_ddr_bank_type; intbankbits : two_ddr_bank_type; -- For refresh timer statemachine timerstate : timercycletype; doRefresh : std_ulogic; refreshDone : std_ulogic; refreshTime : integer range 0 to 4095; maxRefreshTime : integer range 0 to 32767; idlecnt : integer range 0 to 10; refreshcnt : integer range 0 to 65535; -- For DDRCFG register (APB) apbstate : apbcycletype; apb_cmd_done : std_ulogic; ready : std_ulogic; ddrcfg : config_out_type; end record;--------------------------------------------------------------------------------- Components------------------------------------------------------------------------------- component ahb_slv generic ( hindex : integer := 0; haddr : integer := 0; hmask : integer := 16#f80#; sepclk : integer := 0; dqsize : integer := 64; dmsize : integer := 8; tech : integer := virtex2); port ( rst : in std_ulogic; hclk : in std_ulogic; clk0 : in std_ulogic; csi : in ahb_ctrl_in_type; cso : out ahb_ctrl_out_type); end component; component ddr_in generic ( tech : integer); port ( Q1 : out std_ulogic; Q2 : out std_ulogic; C1 : in std_ulogic; C2 : in std_ulogic; CE : in std_ulogic;-- DQS : in std_logic; -- used for lattice-- DDRCLKPOL: in std_logic; -- used for lattice D : in std_ulogic; R : in std_ulogic; S : in std_ulogic); end component; component ddr_out generic ( tech : integer); port ( Q : out std_ulogic; C1 : in std_ulogic; C2 : in std_ulogic; CE : in std_ulogic; D1 : in std_ulogic; D2 : in std_ulogic; R : in std_ulogic; S : in std_ulogic); end component; component hs generic( tech : in integer; dqsize : in integer; dmsize : in integer; strobesize: in integer; clkperiod : in integer); port ( rst : in std_ulogic; clk0 : in std_ulogic; clk90 : in std_ulogic; clk180 : in std_ulogic; clk270 : in std_ulogic; hclk : in std_ulogic; hssi : in hs_in_type; hsso : out hs_out_type); end component; end ddrrec;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -