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

📄 stratixii_ddr_phy.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 2 页
字号:
		dqs_datain_l => dqs_datain_l,		dll_delayctrlout => sub_wire0,		dqinclk => sub_wire1,		dqsundelayedout => sub_wire2,		dqs_padio => dqs_padio	);END RTL;library ieee;use ieee.std_logic_1164.all;library grlib;use grlib.stdlib.all;library techmap;use techmap.gencomp.all;library altera_mf;use altera_mf.altera_mf_components.all;-------------------------------------------------------------------- STRATIX2 DDR PHY -----------------------------------------------------------------------------------------------------------------entity stratixii_ddr_phy is  generic (MHz : integer := 100; rstdelay : integer := 200;	dbits : integer := 16; clk_mul : integer := 2 ;	clk_div : integer := 2);  port (    rst       : in  std_ulogic;    clk       : in  std_logic;          	-- input clock    clkout    : 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     addr  	: in  std_logic_vector (13 downto 0); -- data mask    ba    	: in  std_logic_vector ( 1 downto 0); -- data mask    dqin  	: out std_logic_vector (dbits*2-1 downto 0); -- ddr input data    dqout 	: in  std_logic_vector (dbits*2-1 downto 0); -- ddr input data    dm    	: in  std_logic_vector (dbits/4-1 downto 0); -- data mask    oen       	: in  std_ulogic;    dqs       	: in  std_ulogic;    dqsoen     	: in  std_ulogic;    rasn      	: in  std_ulogic;    casn      	: in  std_ulogic;    wen       	: in  std_ulogic;    csn       	: in  std_logic_vector(1 downto 0);    cke       	: in  std_logic_vector(1 downto 0)  );end;architecture rtl of stratixii_ddr_phy issignal vcc, gnd, dqsn, oe, lockl : std_logic;signal ddr_clk_fb_outr : std_ulogic;signal ddr_clk_fbl, fbclk : std_ulogic;signal ddr_rasnr, ddr_casnr, ddr_wenr : std_ulogic;signal ddr_clkl, ddr_clkbl : std_logic_vector(2 downto 0);signal ddr_csnr, ddr_ckenr, ckel : std_logic_vector(1 downto 0);signal clk_0ro, clk_90ro, clk_180ro, clk_270ro : std_ulogic;signal clk_0r, clk_90r, clk_180r, clk_270r : std_ulogic;signal clk0r, clk90r, clk180r, clk270r : std_ulogic;signal locked, vlockl, ddrclkfbl : std_ulogic;signal clk4, clk5 : std_logic;signal ddr_dqin  	: std_logic_vector (dbits-1 downto 0); -- ddr datasignal ddr_dqout  	: std_logic_vector (dbits-1 downto 0); -- ddr datasignal ddr_dqoen  	: std_logic_vector (dbits-1 downto 0); -- ddr datasignal ddr_adr      	: std_logic_vector (13 downto 0);   -- ddr addresssignal ddr_bar      	: std_logic_vector (1 downto 0);   -- ddr addresssignal ddr_dmr      	: std_logic_vector (dbits/8-1 downto 0);   -- ddr addresssignal ddr_dqsin  	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal ddr_dqsoen 	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal ddr_dqsoutl 	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal dqsdel, dqsclk 	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal da     		: std_logic_vector (dbits-1 downto 0); -- ddr datasignal dqinl		: std_logic_vector (dbits-1 downto 0); -- ddr datasignal dllrst		: std_logic_vector(0 to 3);signal dll0rst		: std_logic_vector(0 to 3);signal mlock, mclkfb, mclk, mclkfx, mclk0 : std_ulogic;signal gndv             : std_logic_vector (dbits-1 downto 0);    -- ddr dqssignal pclkout	: std_logic_vector (5 downto 1);signal ddr_clkin	: std_logic_vector(0 to 2);signal dqinclk  	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal dqsoclk  	: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqssignal dqsnv  		: std_logic_vector (dbits/8-1 downto 0);    -- ddr dqsconstant DDR_FREQ : integer := (MHz * clk_mul) / clk_div;component altdqs_stxii	generic (width : integer := 2; period : string := "10000ps");	PORT	(		dqs_datain_h		: IN STD_LOGIC_VECTOR (width-1 downto 0);		dqs_datain_l		: IN STD_LOGIC_VECTOR (width-1 downto 0);		inclk		: IN STD_LOGIC ;		oe		: IN STD_LOGIC_VECTOR (width-1 downto 0);		outclk		: IN STD_LOGIC_VECTOR (width-1 downto 0);		dll_delayctrlout		: OUT STD_LOGIC_VECTOR (5 DOWNTO 0);		dqinclk		: OUT STD_LOGIC_VECTOR (width-1 downto 0);		dqs_padio		: INOUT STD_LOGIC_VECTOR (width-1 downto 0);		dqsundelayedout		: OUT STD_LOGIC_VECTOR (width-1 downto 0)	);END component;type phasevec is array (1 to 3) of string(1 to 4);type phasevecarr is array (10 to 13) of phasevec;constant phasearr : phasevecarr := (	("2500", "5000", "7500"), ("2273", "4545", "6818"),   -- 100 & 110 MHz	("2083", "4167", "6250"), ("1923", "3846", "5769"));  -- 120 & 130 MHztype periodtype is array (10 to 13) of string(1 to 6);constant periodstr : periodtype := ("9999ps", "9090ps", "8333ps", "7692ps");begin  oe <= not oen; vcc <= '1'; gnd <= '0'; gndv <= (others => '0');  mclk <= clk;--  clkout <= clk_270r; --  clkout <= clk_0r when DDR_FREQ >= 110 else clk_270r;   clkout <= clk_90r when DDR_FREQ > 120 else clk_0r;   clk0r <= clk_270r; clk90r <= clk_0r;  clk180r <= clk_90r; clk270r <= clk_180r;  dll : altpll  generic map (       operation_mode => "NORMAL",    inclk0_input_frequency   => 1000000/MHz,    inclk1_input_frequency   => 1000000/MHz,    clk4_multiply_by => clk_mul, clk4_divide_by => clk_div,     clk3_multiply_by => clk_mul, clk3_divide_by => clk_div,     clk2_multiply_by => clk_mul, clk2_divide_by => clk_div,     clk1_multiply_by => clk_mul, clk1_divide_by => clk_div,    clk0_multiply_by => clk_mul, clk0_divide_by => clk_div,     clk3_phase_shift => phasearr(DDR_FREQ/10)(3),     clk2_phase_shift => phasearr(DDR_FREQ/10)(2),     clk1_phase_shift => phasearr(DDR_FREQ/10)(1) --    clk3_phase_shift => "6250", clk2_phase_shift => "4167", clk1_phase_shift => "2083"--    clk3_phase_shift => "7500", clk2_phase_shift => "5000", clk1_phase_shift => "2500"  )  port map ( inclk(0) => mclk, inclk(1) => gnd,  clk(0) => clk_0r,         clk(1) => clk_90r, clk(2) => clk_180r, clk(3) => clk_270r,         clk(4) => clk4, clk(5) => clk5, locked => lockl);  rstdel : process (mclk, rst, lockl)  begin      if rst = '0' then dllrst <= (others => '1');      elsif rising_edge(mclk) then	dllrst <= dllrst(1 to 3) & '0';      end if;  end process;  rdel : if rstdelay /= 0 generate    rcnt : process (clk_0r)    variable cnt : std_logic_vector(15 downto 0);    variable vlock, co : std_ulogic;    begin      if rising_edge(clk_0r) then        co := cnt(15);        vlockl <= vlock;        if lockl = '0' then	  cnt := conv_std_logic_vector(rstdelay*DDR_FREQ, 16); vlock := '0';        else	  if vlock = '0' then	    cnt := cnt -1;  vlock := cnt(15) and not co;	  end if;        end if;      end if;      if lockl = '0' then	vlock := '0';      end if;    end process;  end generate;  locked <= lockl when rstdelay = 0 else vlockl;  lock <= locked;  -- Generate external DDR clock--  fbclkpad : altddio_out generic map (width => 1)--    port map ( datain_h(0) => vcc, datain_l(0) => gnd,--	outclock => clk90r, dataout(0) => ddr_clk_fb_out);  ddrclocks : for i in 0 to 2 generate    clkpad : altddio_out generic map (width => 1, INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h(0) => vcc, datain_l(0) => gnd,	outclock => clk90r, dataout(0) => ddr_clk(i));    clknpad : altddio_out generic map (width => 1, INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h(0) => gnd, datain_l(0) => vcc,	outclock => clk90r, dataout(0) => ddr_clkb(i));  end generate;  csnpads : altddio_out generic map (width => 2, INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h => csn(1 downto 0), datain_l => csn(1 downto 0),	outclock => clk0r, dataout => ddr_csb(1 downto 0));  ckepads : altddio_out generic map (width => 2, INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h => ckel(1 downto 0), datain_l => ckel(1 downto 0),	outclock => clk0r, dataout => ddr_cke(1 downto 0));  ddrbanks : for i in 0 to 1 generate    ckel(i) <= cke(i) and locked;  end generate;  rasnpad : altddio_out generic map (width => 1,	INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h(0) => rasn, datain_l(0) => rasn,	outclock => clk0r, dataout(0) => ddr_rasb);  casnpad : altddio_out generic map (width => 1,	INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h(0) => casn, datain_l(0) => casn,	outclock => clk0r, dataout(0) => ddr_casb);  wenpad : altddio_out generic map (width => 1,	INTENDED_DEVICE_FAMILY => "STRATIX")    port map ( datain_h(0) => wen, datain_l(0) => wen,	outclock => clk0r, dataout(0) => ddr_web);  dmpads : altddio_out generic map (width => dbits/8,	INTENDED_DEVICE_FAMILY => "STRATIX")    port map (	datain_h => dm(dbits/8*2-1 downto dbits/8),	datain_l => dm(dbits/8-1 downto 0),	outclock => clk0r, dataout => ddr_dm    );  bapads : altddio_out generic map (width => 2)    port map (	datain_h => ba, datain_l => ba,	outclock => clk0r, dataout => ddr_ba    );  addrpads : altddio_out generic map (width => 14)    port map (	datain_h => addr, datain_l => addr,	outclock => clk0r, dataout => ddr_ad    );  -- DQS generation  dqsnv <= (others => dqsn);  dqsoclk <= (others => clk90r);           altdqs0 : altdqs_stxii generic map (dbits/8, periodstr(DDR_FREQ/10))    port map (dqs_datain_h => dqsnv, dqs_datain_l => gndv(dbits/8-1 downto 0), 	inclk => clk270r, oe => ddr_dqsoen, outclk => dqsoclk, 	dll_delayctrlout => open, dqinclk => dqinclk, dqs_padio => ddr_dqs, 	dqsundelayedout	=> open );  -- Data bus  dqgen : for i in 0 to dbits/8-1 generate    qi : altddio_bidir generic map (width => 8, oe_reg =>"REGISTERED",	INTENDED_DEVICE_FAMILY => "STRATIXII")    port map (	datain_l => dqout(i*8+7 downto i*8),	datain_h => dqout(i*8+7+dbits downto dbits+i*8), 	inclock => dqinclk(i), --clk270r, 	outclock => clk0r, oe => oe,	dataout_h => dqin(i*8+7 downto i*8),	dataout_l => dqin(i*8+7+dbits downto dbits+i*8), --dqinl(i*8+7 downto i*8),	padio => ddr_dq(i*8+7 downto i*8));  end generate;  dqsreg : process(clk180r)  begin    if rising_edge(clk180r) then      dqsn <= oe;    end if;  end process;  oereg : process(clk0r)  begin    if rising_edge(clk0r) then      ddr_dqsoen(dbits/8-1 downto 0) <= (others => not dqsoen);    end if;  end process;end;

⌨️ 快捷键说明

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