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

📄 dll_standard.vhd

📁 VHDL的例子
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
LIBRARY UNISIM;
USE UNISIM.VCOMPONENTS.ALL;
ENTITY dll_standard IS
PORT (

		CLKIN	 	: IN  STD_LOGIC;
		RESET 	 	: IN  STD_LOGIC;
        CLK2X  	: OUT STD_LOGIC;
        CLK4X  	: OUT STD_LOGIC;
        LOCKED		: OUT STD_LOGIC);
END dll_standard;

ARCHITECTURE structural OF dll_standard IS

COMPONENT IBUFG
   GENERIC(
      TimingChecksOn: Boolean 	:= DefaultTimingChecksOn;
      InstancePath: STRING 		:= "*";
      Xon: Boolean 				:= DefaultXon;
      MsgOn: Boolean 			:= DefaultMsgOn;
      tpd_I_O                   	:VitalDelayType01 := (0.100 ns, 0.100 ns);
      tipd_I                    	:VitalDelayType01 := (0.000 ns, 0.000 ns));
   PORT(
      	O                       :OUT   STD_ULOGIC;
      	I                       	:IN    STD_ULOGIC);
END COMPONENT;

COMPONENT IBUF
   GENERIC(
      TimingChecksOn			: Boolean := DefaultTimingChecksOn;
      InstancePath			: STRING := "*";
      Xon: Boolean 			:= DefaultXon;
      MsgOn: Boolean 		:= DefaultMsgOn;
      tpd_I_O                :VitalDelayType01 := (0.100 ns, 0.100 ns);
      tipd_I                  :VitalDelayType01 := (0.000 ns, 0.000 ns));
   PORT(
      	O                    :OUT   STD_ULOGIC;
      	I                     :IN    STD_ULOGIC);
END COMPONENT;

COMPONENT CLKDLL
    GENERIC ( 
    	     	TimingChecksOn 		: Boolean := DefaultTimingChecksOn;
             InstancePath 			: STRING := "*";
             Xon  : Boolean 		:= DefaultXon;
             MsgOn : Boolean 		:= DefaultMsgOn;

             tipd_CLKIN   		: VitalDelayType01 := (0.000 ns, 0.000 ns);
             tipd_CLKFB   		: VitalDelayType01 := (0.000 ns, 0.000 ns);
             tipd_RST     		: VitalDelayType01 := (0.000 ns, 0.000 ns);

             tpd_CLKIN_LOCKED : VitalDelayType01 := (0.100 ns, 0.100 ns);

             tperiod_CLKIN_POSEDGE : VitalDelayType  := 0.010 ns;
             MAXPERCLKIN       	: time := 100 ns;

             tpw_CLKIN_posedge 	: VitalDelayType  := 0.010 ns;
             tpw_CLKIN_negedge 	: VitalDelayType  := 0.010 ns;

             tpw_RST_posedge   	: VitalDelayType  := 0.010 ns;

              DUTY_CYCLE_CORRECTION : Boolean := TRUE;
              CLKDV_DIVIDE : real := 2.0);
PORT (
CLKIN   : IN  STD_ULOGIC := '0';
           CLKFB   : IN  STD_ULOGIC := '0';
           RST     : IN  STD_ULOGIC := '0';
           CLK0    : OUT STD_ULOGIC := '0';
           CLK90   : OUT STD_ULOGIC := '0';
           CLK180  : OUT STD_ULOGIC := '0';
           CLK270  : OUT STD_ULOGIC := '0';
           CLK2X   : OUT STD_ULOGIC := '0';
           CLKDV   : OUT STD_ULOGIC := '0';
           LOCKED  : OUT STD_ULOGIC := '0');
END COMPONENT;
COMPONENT BUFG
   GENERIC(
      TimingChecksOn		: Boolean := DefaultTimingChecksOn;
      InstancePath		: STRING := "*";
      Xon: Boolean 		:= DefaultXon;
      MsgOn: Boolean 	:= DefaultMsgOn;
      tpd_I_O           	:VitalDelayType01 := (0.100 ns, 0.100 ns);
      tipd_I            	:VitalDelayType01 := (0.000 ns, 0.000 ns));
   PORT(
      O                 :OUT   STD_ULOGIC;
      I                 :IN    STD_ULOGIC);
END COMPONENT;
COMPONENT OBUF
   GENERIC(
      TimingChecksOn		: Boolean := DefaultTimingChecksOn;
      InstancePath		: STRING := "*";
      Xon: Boolean 		:= DefaultXon;
      MsgOn: Boolean 	:= DefaultMsgOn;
      tpd_I_O           	:VitalDelayType01 := (0.100 ns, 0.100 ns);
      tipd_I            	:VitalDelayType01 := (0.000 ns, 0.000 ns));
   PORT(
      O                 :OUT   STD_ULOGIC;
      I                 :IN    STD_ULOGIC);
END COMPONENT;

COMPONENT SRL16
  generic (
       TimingChecksOn: Boolean := DefaultTimingChecksOn;
       InstancePath: STRING := "*";
       Xon: Boolean := DefaultXon;
       MsgOn: Boolean := DefaultMsgOn;

       tipd_A0   : VitalDelayType01 := (0.0 ns,  0.0 ns);
       tipd_A1   : VitalDelayType01 := (0.0 ns,  0.0 ns);
       tipd_A2   : VitalDelayType01 := (0.0 ns,  0.0 ns);
       tipd_A3   : VitalDelayType01 := (0.0 ns,  0.0 ns);

       tipd_D    : VitalDelayType01 := (0.0 ns,  0.0 ns);
       tipd_CLK  : VitalDelayType01 := (0.0 ns,  0.0 ns);
--最大的PIN到PIN延迟      
       tpd_A0_Q  : VitalDelayType01 := (0.1 ns, 0.1 ns);
       tpd_A1_Q  : VitalDelayType01 := (0.1 ns, 0.1 ns);
       tpd_A2_Q  : VitalDelayType01 := (0.1 ns, 0.1 ns);
       tpd_A3_Q  : VitalDelayType01 := (0.1 ns, 0.1 ns);
       tpd_CLK_Q : VitalDelayType01 := (0.1 ns, 0.1 ns);

       -- 关于SETUP和HOLD的时延设置
       tsetup_D_CLK_posedge_posedge  : VitalDelayType := 0.01 ns;
       tsetup_D_CLK_negedge_posedge  : VitalDelayType := 0.01 ns;

       thold_D_CLK_posedge_posedge   : VitalDelayType := 0.01 ns;
       thold_D_CLK_negedge_posedge   : VitalDelayType := 0.01 ns;

       -- 最小脉冲宽度
       tpw_CLK_posedge : VitalDelayType := 0.01 ns;
       tpw_CLK_negedge : VitalDelayType := 0.01 ns;

       INIT : bit_vector := X"0000");
  PORT (
  		D   : IN STD_ULOGIC;
        CLK : IN STD_ULOGIC;
        A0  : IN STD_ULOGIC;
        A1  : IN STD_ULOGIC;
        A2  : IN STD_ULOGIC;
        A3  : IN STD_ULOGIC;
        Q   : OUT STD_ULOGIC); 
END COMPONENT;


SIGNAL CLKIN_w, RESET_w, CLK2X_dll, CLK2X_g, CLK4X_dll, CLK4X_g : STD_LOGIC;
SIGNAL LOCKED2X, LOCKED2X_delay, RESET4X, LOCKED4X_dll : STD_LOGIC;
SIGNAL logic1 : STD_LOGIC;

BEGIN 

logic1 <= '1';

clkpad 	: IBUFG  PORT MAP (I=>CLKIN, O=>CLKIN_w);
rstpad 	: IBUF   PORT MAP (I=>RESET, O=>RESET_w);

dll2x 	: CLKDLL PORT MAP (
CLKIN=>CLKIN_w,   
CLKFB=>CLK2X_g,
 RST=>RESET_w,
CLK0=>open,
CLK90=>open,
CLK180=>open,
CLK270=>open,
CLK2X=>CLK2X_dll,
 CLKDV=>open, 
LOCKED=>LOCKED2X);

clk2xg : BUFG   PORT MAP (I=>CLK2X_dll,   O=>CLK2X_g);

rstsrl : SRL16  PORT MAP (D=>LOCKED2X, CLK=>CLK2X_g, Q=>LOCKED2X_delay,
                          A3=>logic1, A2=>logic1, A1=>logic1, A0=>logic1);

RESET4X <= not LOCKED2X_delay;

dll4x  : CLKDLL PORT MAP (
CLKIN=>CLK2X_g,  
CLKFB=>CLK4X_g, 
RST=>RESET4X,
CLK0=>open,   
CLK90=>open, 
CLK180=>open, 
CLK270=>open,                          
CLK2X=>CLK4X_dll,
CLKDV=>open, 
LOCKED=>LOCKED4X_dll);
clk4xg : BUFG   PORT MAP (I=>CLK4X_dll,  O=>CLK4X_g);
lckpad : OBUF   PORT MAP (I=>LOCKED4X_dll, O=>LOCKED);

CLK2X <= CLK2X_g;
CLK4X <= CLK4X_g;

 END structural;

⌨️ 快捷键说明

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