 3.1 数字延时锁定环(DLL)的结构原理 图3是一个DLL的内部原理框图,它由各类时钟延时线和控制逻辑组成。延时线主要用于对时钟输入端CLKIN产生一个延时。通过器件内部的时钟分布网络可将该输入时钟分配给所有的内部寄存器和时钟反馈端CLKFB。控制逻辑则主要用于采样输入时钟和反馈时钟以调整延时线。这里所说的延时线由压控延时或衰减延时组件构成,SpartanII系列芯片选用了后者。DLL可在输入时钟和反馈时钟之间不停地插入延时,直到两个时钟的上升沿同步为止。当两时钟同步时,DLL锁定。在DLL锁定后,只要输入时钟没有变化,两时钟就不会出现可识别偏差。因此,DLL输出时钟就补偿了时钟分布网络带来的输入时钟延时,从而消除了源时钟和负载之间的延时。
3.2 DLL功能的实现 SpartanII系列芯片内含专门实现DLL功能的宏单元模块BUFGDLL,其结构简图如图4所示。该模块由IBUFG、CLKDLL和BUFG三个库元件组成其原理框图如图5所示。图5中,CLKDLL库元件用于实现DLL的主要功能包括完成时钟的零延时输出、时钟的倍频以及分频和镜像操作。而IBUFG和BUFG则分别实现外部时钟的输入以及将输出时钟分配到芯片引脚。本设计的时钟分频就是将62.5MHz的时钟由IBUFG输入经CLKDLL分频后再由CLKDV端传给BUFG然后经片内IOBUF分配到芯片的普通I/O输出引脚。
 4 软件实现 在设计的总体构思和器件选择完成后,必须进行的工作是建立设计输入文件,该文件主要用于描述所设计电路的逻辑功能。这里使用的是XILINX公司提供的开发工具FOUNDATION 4.1。本设计采用硬件描述语言VHDL来设计,其部分程序如下: entity lvds is port ( pclk: in STD LOGIC; pclk_62: out std_logic_vector(31 downto 0); pclk_4: out std_logic_vector(31 downto 0)); end lvds; architecture lvds_arch of lvds is component clkdll port( clkin: in std_logic; clkfb : in std_logic; rst: in std_logic; clk0: out std_logic; clk90 : out std_logic; clk180: out std_logic; clk270: out std_logic; clk2x : out std_logic; clkdv: out std_logic; locked: out std_logic); end component; begin reset n<=‘0' ; uibuf : ibufg port map ( i => pclk, o => clk); udll: clkdll port map( clkin => clk, rst => reset_n, clkfb => clkfb, clk0 => clk0, clk90 => open, clk180 => open, clk270 => open, clk2x => clk2x, clkdv => clkdv, locked => locked ); bufg_clk0: bufg port map ( i => clk0, o=>clk_int2; ); clkfb<=clk_int2; process(clk2x); begin if clk2x′event and clk2x=′1′ then clk_int <=clk int2; clk_int3<= clkdv; pclk_62(0)<=clk_int; pclk_62(1)<=clk_int; … … pclk_62(31)<=clk_int; pclk_4(0)<=clk_int3; pclk_4(1)<=clk_int3; … … pclk_4(31)<=clk_int3; end if; end process; end lvds_arch; 基于FPGA的高频时钟的分频和分配设计-技术文章基于FPGA的高频时钟的分频和分配设计
|