
FPGA—DCM—数字时钟管理器.doc
9页数字时钟管理器一、 设计目的1、 学习设计IP Core,并在使用中体会器便利性;2、 利用IP Core的方式设计一个数字时钟管理器(Digital Clock Manager)二、 设计原理1、 DCM概述DCM提供了一个完整的可以供片内和片外使用的时钟发生器DCM使用完全数字延迟线技术,允许高精度地控制时钟的相位和频率;使用完全的数字反馈系统,可以动态补偿由于温度和电压偏移引起的时钟相位和频率的偏差DCM主要具有以下四项特点:数字时钟使同步、数字频率合成、数字相位移动、数字频谱调制2、Spartan-3E系列器件DCM模块的引出端口说明Spartan-3E系列器件DCM模块,引出端示意如图1所示图1 DCM的引出端下面对DCM模块的信号作一些简要说明:CLKIN:输入时钟,是DCM的基准时钟信号CLKFB:反馈时钟输入,必须是来自CLK0或CLK2X的时钟RST:复位信号DSSEN:数字扩频使能控制高电平允许PSCLK:动态相位移动时钟,只有在动态调相时才有用PSEN:动态相位移动使能控制高电平允许PSINCDEC:动态相位移动增加或减小控制高电平,增加相位移动,低电平减小相位移动。
CLK0、CLK90、CLKl80、CLK270:是DCM的输出时钟,它们与CLKIN的相位差分别固定是0度、90度、180度、270度在低频模式下,这4个输出都有效;在高频模式下,只有CLKl80输出有效当DCM的属性DLL—FREQI厄NCY_MODE设为HIGH,即为高频模式,设置为LOW即为低频模式CLK2X:DCM的输出时钟,频率是CLKIN的2倍频CLK2X180:DCM的输出时钟,与CLK2X同频率,相位差180度CLKDV:DCM的输出时钟,是CLK0的分频输出,分频倍数可以设置为1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,9,10,11,12,13,14,15,16CLKFX:DCM频率合成器的输出,可以是CLKIN频率的任意倍频或分频CLKFXl80:DCM频率合成器的输出,与CLKFX的频率相同,相位差180度LOCKED:DCM输出的标志信号,当DCM的锁相环成功实现锁相后,LOCKED输出高电平只有在LOCKED=1时,DCM的所有输出时钟才是稳定可靠的STATUS[7:0]:DCM输出的状态标志信号当STATUS[0]=1,表示相位移动溢出;当STATUS[1]=1,表示CLKIN停止,STATUS[2:7]没用。
PSDONE:DCM的输出标志信号,表示动态调相完成对固定调相模式无用三、 设计步骤1、 建立工程建立名为DigitalClockManager的VHDL工程文件,如图:图1 建立工程点击Next,然后点击Finish即可之后再建立名为DCM_Module的VHDL文件,以实现对IP Core的调用2、 选择IP Core的类型及型号(1)新建名为DCM的IP核文件,如图:图2 建立IP核(2)选择IP Core类型和型号图3 选择IP Core类型3、 DCM参数设置(1)打开IP Core的参数设置窗口的第一页,并进行参数选择图4 DCM参数设置页面1(2)单击【Next】,进入参数设置页面2,进行时钟缓冲器的设置图5 DCM参数设置页面2(3)单击【Next】,进入参数设置页面2图6 DCM参数设置页面34、在DCM_Module文件中编写DCM的调用代码,然后进行综合,综合无误后编写激励文件进行仿真并分析四、 仿真结果1、 仿真分析图7 仿真波形图仿真波形图从上至下依次为:CLK_IN时钟,复位信号RST,反馈输入CLKIN_IBUFG,DCM的输出为CLK0,CLK90,CLK2X,CLKDV,CLKFX以及LOCKED信号。
输入时钟CLKIN的频率是50MHz;当实现锁相后,LOCKED输出高电平,然后DCM的输出时钟才有效;所有的输出时钟相对输入时钟CLK_IN,相位移动(32/256)*20ns=2.5ns,可见PHASE_SHIFT的参数对所有输出时钟的影响是相同的;CLK2X的频率是100MHz,即是CLKIN频率的2倍;由于设置了CLKFX_MULTIPLY=4,CIKFX_DIVIDE=1,则CLKFX的频率是50*4=200MHz,即是CLK_IN的4倍;由于分频参数CLKDV_DIVIDE默认为2,所以CLKDV的频率是50/2=25MHz五、 思考题数字时钟管理器DCM,具有时钟使同步、频率合成、相位移动、频谱调制等功能时钟使同步"可以用来减小FPGA片内以及片外的时钟延时偏差;频率合成器允许用较低频率的输入时钟产生高达420MHz的输出时钟,可以降低高速时钟在PCB板上走线造成的信号畸变;移相器可以产生高精度的固定或动态相位移动;数字扩频逻辑可以对1x输出时钟进行频谱调制所有这些功能都是数字可编程精确控制的,比传统的分立锁相环等方法更加方便、灵活、可靠使用IP Core的设计方法可以大大优化我们的程序设计,并且也比程序写出的分频代码更加的准确可靠。
六、 代码1、顶层代码:`timescale 1ns / 1psmodule DCM_module(CLK_IN,RST,CLKIN_IBUFG,CLK0,CLK90,CLK2X,CLKDV,CLKFX,LOCKED);input CLK_IN,RST,CLKIN_IBUFG;output CLK0,CLK90,CLK2X,CLKDV,CLKFX,LOCKED;wire CLK0,CLK90,CLK2X,CLKDV,CLKFX,LOCKED;DCM DCM(.CLKIN(CLK_IN),.RST(RST),.CLKFB(CLKIN_IBUFG),.CLK0(CLK0),.CLK90(CLK90), .CLK2X(CLK2X),.CLKDV(CLKDV),.CLKFX(CLKFX),.LOCKED(LOCKED));endmodule2、激励文件:`timescale 1ns / 1psmodule DCM_test; // Inputs reg CLK_IN; reg RST; reg CLKIN_IBUFG; // Outputs wire CLK0; wire CLK90; wire CLK2X; wire CLKDV; wire CLKFX; wire LOCKED; // Instantiate the Unit Under Test (UUT) DCM_module uut ( .CLK_IN(CLK_IN), .RST(RST), .CLKIN_IBUFG(CLKIN_IBUFG), .CLK0(CLK0), .CLK90(CLK90), .CLK2X(CLK2X), .CLKDV(CLKDV), .CLKFX(CLKFX), .LOCKED(LOCKED) ); initial begin CLK_IN = 0; CLKIN_IBUFG = 0; forever begin #10 CLK_IN = ~CLK_IN; CLKIN_IBUFG = ~CLKIN_IBUFG; end end initial begin RST = 1; #100 RST = 0; end endmodule。
