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

📄 ddr_unisim.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
字号:
--------------------------------------------------------------------------------  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 ------------------------------------------------------------------------------- Entity:      unisim_iddr_reg-- File:        unisim_iddr_reg.vhd-- Author:      David Lindh, Jiri Gaisler - Gaisler Research-- Description: Xilinx DDR input register------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;library techmap;use techmap.gencomp.all;-- pragma translate_offlibrary unisim;use unisim.iddr;--pragma translate_onentity unisim_iddr_reg is  generic (tech : integer := virtex4);  port(         Q1 : out std_ulogic;         Q2 : out std_ulogic;         C1 : in std_ulogic;         C2 : in std_ulogic;         CE : in std_ulogic;         D : in std_ulogic;         R : in std_ulogic;         S : in std_ulogic      );end;  architecture rtl of unisim_iddr_reg is    attribute BOX_TYPE : string;--    attribute syn_useioff : boolean; --    attribute syn_useioff of rtl : architecture is false;    component IDDR      generic ( DDR_CLK_EDGE : string := "SAME_EDGE";          INIT_Q1 : bit := '0';          INIT_Q2 : bit := '0';          SRTYPE : string := "ASYNC");      port        ( Q1 : out std_ulogic;          Q2 : out std_ulogic;          C : in std_ulogic;          CE : in std_ulogic;          D : in std_ulogic;          R : in std_ulogic;          S : in std_ulogic);    end component;    attribute BOX_TYPE of IDDR : component is "PRIMITIVE";  signal preQ2 : std_ulogic;   begin      -- SAME EDGE mode have when this is written an incorrect P&R-- timing model, instead OPPOSITE_MODE with an extra register is used--      V4 : if tech = virtex4 generate--        U0 : IDDR--          generic map(--            DDR_CLK_EDGE => "SAME_EDGE",--            INIT_Q1 =>  '0',--            INIT_Q2 =>  '0',--            SRTYPE =>  "ASYNC")--          Port map(--            Q1 => Q1,--            Q2 => Q2,--            C => C1,--            CE => CE,                 --            D => D,--            R => R,    --            S => S);--     end generate;       V4 : if (tech = virtex4) or (tech = virtex5) generate       U0 : IDDR generic map( DDR_CLK_EDGE => "OPPOSITE_EDGE"--           ,INIT_Q1 =>  '0',--           INIT_Q2 =>  '0',--           SRTYPE =>  "ASYNC")         Port map( Q1 => Q1, Q2 => preQ2, C => C1, CE => CE,                            	   D => D, R => R,    S => S);      q3reg : process (C1, preQ2, R)        begin          if R='1' then --asynchronous reset, active high            Q2 <= '0';          elsif C1'event and C1='1' then --Clock event - posedge            Q2 <= preQ2;          end if;        end process;     end generate;    V2 : if tech = virtex2 or tech = spartan3 generate      -- CE and S inputs inactive for virtex 2            q1reg : process (C1, D, R)      begin        if R='1' then --asynchronous reset, active high          Q1 <= '0';        elsif C1'event and C1='1' then --Clock event - posedge          Q1 <= D;        end if;      end process;      q2reg : process (C1, D, R)      begin        if R='1' then --asynchronous reset, active high         preQ2 <= '0';        elsif C1'event and C1='0' then --Clock event - negedge         preQ2 <= D;        end if;      end process;      q3reg : process (C1, preQ2, R)      begin        if R='1' then --asynchronous reset, active high          Q2 <= '0';        elsif C1'event and C1='1' then --Clock event - posedge          Q2 <= preQ2;        end if;      end process; -- NOTE: You must include the following constraints in the .ucf -- file when running back-end tools, -- in order to ensure that IOB DDR registers are used: -- -- INST "q2_reg" IOB=TRUE; -- INST "q1_reg" IOB=TRUE; -- -- Depending on the synthesis tools you use, it may be required to -- check the edif file for modifications to -- original net names...in this case, Synopsys changed the -- names: q1 and q2 to q1_reg and q2_reg    end generate;      end;library ieee;use ieee.std_logic_1164.all;library techmap;use techmap.gencomp.all;-- pragma translate_offlibrary unisim;use unisim.oddr;use unisim.FDDRRSE;--pragma translate_onentity unisim_oddr_reg is  generic ( tech : integer := virtex4);   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;architecture rtl of unisim_oddr_reg is  attribute BOX_TYPE : string;  component ODDR    generic      ( DDR_CLK_EDGE : string := "OPPOSITE_EDGE";--        INIT : bit := '0';        SRTYPE : string := "SYNC");    port      (        Q : out std_ulogic;        C : 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;  attribute BOX_TYPE of    ODDR : component is "PRIMITIVE";  component FDDRRSE--    generic ( INIT : bit := '0');    port      (        Q : out std_ulogic;        C0 : in std_ulogic;        C1 : in std_ulogic;        CE : in std_ulogic;        D0 : in std_ulogic;        D1 : in std_ulogic;        R : in std_ulogic;        S : in std_ulogic      );  end component;  attribute BOX_TYPE of    FDDRRSE : component is "PRIMITIVE";  signal preD2 : std_ulogic;  begin-- SAME EDGE mode have when this is written an incorrect P&R-- timing model, instead OPPOSITE_MODE with an extra register is used--    V4 : if tech = virtex4 generate--      U0 : ODDR--        generic map(--          DDR_CLK_EDGE => "SAME_EDGE",--          INIT => '0',--          SRTYPE => "ASYNC")--        port map(--          Q => Q,--          C => C1,--          CE => CE,--          D1 => D1,--          D2 => D2,--          R => R,--          S => S);--      end generate;  V4 : if (tech = virtex4) or (tech = virtex5) generate    d2reg : process (C1, D2, R)       begin         if R='1' then --asynchronous reset, active high           preD2 <= '0';         elsif C1'event and C1='1' then --Clock event - posedge           preD2 <= D2;         end if;       end process;       U0 : ODDR generic map( DDR_CLK_EDGE => "OPPOSITE_EDGE" -- ,INIT => '0'         , SRTYPE => "ASYNC")       port map(         Q => Q,         C => C1,         CE => CE,         D1 => D1,         D2 => preD2,         R => R,         S => S);  end generate;  V2 : if tech = virtex2 or tech = spartan3 generate      d2reg : process (C1, D2, R)      begin        if R='1' then --asynchronous reset, active high          preD2 <= '0';        elsif C1'event and C1='1' then --Clock event - posedge          preD2 <= D2;        end if;      end process;      c_dm : component FDDRRSE--        generic map( INIT => '0')        port map(          Q =>  Q,          D0 => D1,          D1 => preD2,          C0 => C1,          C1 => C2,          CE => CE,          R => R,          S => S);  end generate;      end ;library ieee;use ieee.std_logic_1164.all;library techmap;use techmap.gencomp.all;-- pragma translate_offlibrary unisim;use unisim.fd;use unisim.FDDRRSE;--pragma translate_onentity oddrv2 is  generic ( tech : integer := virtex4);   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;architecture rtl of oddrv2 is  component FD	generic ( INIT : bit := '0');	port (  Q : out std_ulogic;		C : in std_ulogic;		D : in std_ulogic);  end component;  component FDDRRSE    port      (        Q : out std_ulogic;        C0 : in std_ulogic;        C1 : in std_ulogic;        CE : in std_ulogic;        D0 : in std_ulogic;        D1 : in std_ulogic;        R : in std_ulogic;        S : in std_ulogic      );  end component;  signal preD2 : std_ulogic;  begin  rf : FD port map ( Q => preD2, C => C1, D => D2);  rr : FDDRRSE  port map ( Q => Q, C0 => C1, C1 => C2, 	CE => CE, D0 => D1, D1 => preD2, R => R, S => R);end;library ieee;use ieee.std_logic_1164.all;library techmap;use techmap.gencomp.all;-- pragma translate_offlibrary unisim;use unisim.fd;use unisim.oddr2;--pragma translate_onentity oddrc3e is  generic ( tech : integer := virtex4);   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;architecture rtl of oddrc3e is  component FD	generic ( INIT : bit := '0');	port (  Q : out std_ulogic;		C : in std_ulogic;		D : in std_ulogic);  end component;  component ODDR2	generic	(		DDR_ALIGNMENT : string := "NONE";		INIT : bit := '0';		SRTYPE : string := "SYNC"	);	port	(		Q : out std_ulogic;		C0 : in std_ulogic;		C1 : in std_ulogic;		CE : in std_ulogic;		D0 : in std_ulogic;		D1 : in std_ulogic;		R : in std_ulogic;		S : in std_ulogic	);  end component;  signal preD2 : std_ulogic;  begin  rf : FD port map ( Q => preD2, C => C1, D => D2);  rr : ODDR2  port map ( Q => Q, C0 => C1, C1 => C2, 	CE => CE, D0 => D1, D1 => preD2, R => R, S => R);end;

⌨️ 快捷键说明

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