电子开发网
您的位置电子开发网>EDA技术>

DCM使用详解

时间:2009-09-25   来源:   作者:   点击:……  字体大小:【

本文翻译自Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs 

DCM主要功能
1. 分频倍频:DCM可以将输入时钟进行multiply或者divide,从而得到新的输出时钟。
2. 去skew:DCM还可以消除clock的skew,所谓skew就是由于传输引起的同一时钟到达不同地点的延迟差。
3. 相移:DCM还可以实现对输入时钟的相移输出,这个相移一般是时钟周期的一个分数。
4. 全局时钟:DCM和FPGA内部的全局时钟分配网络紧密结合,因此性能优异。
5. 电平转换:通过DCM,可以输出不同电平标准的时钟。 

DCM的特点与能力(Spartan-3系列为例)

  • 数量:4 DCM / FPGA(也有例外)
    -- 应该够用了
  • 数字频率综合器输入(CLKIN):1-280MHz
  • 延迟锁相环输入(CLKIN):18-280MHz
  • 时钟输入源(CLKIN):
      Global buffer input pad
      Global buffer output
      General-purpose I/O (no deskew)
      Internal logic (no deskew)
    -- 上面最后两个分别是外部的普通IO口和内部的逻辑,没有deskew,所以时钟质量不会很好。
  • 频率综合器输出(CLKFX、CLKFX180):是CLKIN的M/D倍,其中
     M=2..32
     D=1..32
    -- 这样看来最大能倍频32倍,最小能16分频。
  • 时钟dividor输出(CLKDV):是CLKIN的下列分频
      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, or 16
    -- 发现没有,最大的分频也是16。不过能支持半分频,比用频率综合器方便。
  • 倍频输出(CLK2X、CLK2X180):CLKIN的2倍频
  • 时钟conditioning、占空比调整:这个对所有时钟输出都施加,占空比为50%。
  • 1/4周期相移输出(CLK0/90/180/270):是CLKIN的1/4周期相移输出。
  • 半周期相移输出(CLK0/180、CLK2X/180、CLKFX/180):相差为180度的成对时钟输出。
  • 相移精度:最高精度为时钟周期的1/256。
  • 时钟输出:9个
      到全局时钟网的时钟输出:最多9个中的4个
      到General purpose互联:最多9个
      到输出脚:最多9个
    -- 可见9个时钟输出可以随意链接内部信号或者外部输出,但是进入全局时钟网的路径最多只有4个。

DCM的位置在哪?
我们以Spartan3系列为例。
FPGA看上去就是一个四方形。最边缘是IO pad了。
除去IO pad,内部还是一个四方形。
四个角上各趴着一个DCM。
上边缘和下边缘中间则各趴着一个全局Buffer的MUX。
这样的好处是四个DCM的输出可以直接连接到全局Buffer的入口。
下面是手绘简图,很丑是吧,呵呵。
 
 

DCM是全局时钟网络可选的一部分
一般,时钟通过一个“全局输入buffer”和“全局时钟buffer” 进入全局时钟网络。如下所示
GCLK --->( IBUFG ---> BUFG) ---> low skew global clock network
在需要的时候,DCM也成为全局时钟网络的一环。
 
 

DCM 内部构成一览
1. DLL 延迟锁定环
    说是延迟锁定环,但是我觉得叫做延迟补偿环更加贴切。因为DLL的主要功能是消除输入时钟和输出时钟之间的延迟,使得输入输出在外部看来是透明连接。
    实现这种功能的原理是:DLL通过输出时钟CLK0或者CLK2X观察实际的线路延迟,然后在内部进行补偿。
    一句话,DLL的核心功能是无延迟。
    DLL的输出是CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, 和 CLKDV。

2. DFS 数字频率综合
    DFS的主要功能是利用CLKIN合成新的频率。
    合成的参数是:M(multiplier)和 D(divisor)。通过MD的组合实现各种倍频和分频。
    如果不使用DLL,则DFS的合成频率和CLKIN就不具有相位关系,因为没有延迟补偿,相位就不再同步。

3. PS 相位偏移
    注意这个相位偏移不是DLL中输出CLK90/180/270用的。这个PS可以令DCM的所有9个输出信号都进行相位的偏移。偏移的单位是CLKIN的一个分数。
    也可以在运行中进行动态偏移调整,调整的单位是时钟的1/256。
这个功能我们平时不常用。

4. 状态逻辑
    这个部分由 LOCKED 信号和 STATUS[2:0] 构成。LOCKED信号指示输出是否和CLKIN同步(同相)。STATUS则指示DLL和PS的状态。 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

DCM_BASE
DCM_BASE是基本数字时钟管理模块的缩写,是相位和频率可配置的数字锁相环电路,常用于FPGA系统中复杂的时钟管理。如果需要频率和相位动态重配置,则可以选用DCM_ADV原语;如果需要相位动态偏移,可使用DCM_PS原语。DCM系列原语的RTL结构如图3-8所示。
模块接口信号的说明如表3-8所列。 
 
DCM_BASE组件可以通过Xilinx的IP Wizard向导产生,也可以直接通过下面的例化代码直接使用。其Verilog的例化代码模板为:

// DCM_BASE: 基本数字时钟管理电路(Base Digital Clock Manager Circuit)
// 适用芯片:Virtex-4/5
// Xilinx HDL库向导版本,ISE 9.1
DCM_BASE #(
.CLKDV_DIVIDE(2.0),
// CLKDV分频比可以设置为: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
// CLKFX信号的分频比,可为1到32之间的任意整数
.CLKFX_MULTIPLY(4),
// CLKFX信号的倍频比,可为2到32之间的任意整数
.CLKIN_DIVIDE_BY_2("FALSE"),
// 输入信号2分频的使能信号,可设置为TRUE/FALSE
.CLKIN_PERIOD(10.0),
// 指定输入时钟的周期,单位为ns,数值范围为1.25~1000.00。
.CLKOUT_PHASE_SHIFT("NONE"),
// 指定移相模式,可设置为NONE或FIXED
.CLK_FEEDBACK("1X"),
// 指定反馈时钟的频率,可设置为NONE、1X或2X。相应的频率关系都是针对CLK0而言的。
.DCM_PERFORMANCE_MODE("MAX_SPEED"),
// DCM模块性能模式,可设置为 MAX_SPEED 或 MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
// 抖动调整,可设置为源同步、系统同步或0~15之间的任意整数
.DFS_FREQUENCY_MODE("LOW"),
// 数字频率合成模式,可设置为LOW或HIGH 两种频率模式
.DLL_FREQUENCY_MODE("LOW"),
// DLL的频率模式,可设置为LOW、HIGH或HIGH_SER
.DUTY_CYCLE_CORRECTION("TRUE"),
// 设置是否采用双周期校正,可设为TRUE或FALSE
.FACTORY_JF(16'hf0f0),
// 16比特的JF因子参数
.PHASE_SHIFT(0),
// 固定相移的数值,可设置为 -255 ~ 1023之间的任意整数
.STARTUP_WAIT("FALSE")
// 等DCM锁相后再延迟配置DONE管脚,可设置为TRUE/FALSE
) DCM_BASE_inst (
.CLK0(CLK0), // 0度移相的DCM时钟输出
.CLK180(CLK180), // 180度移相的DCM时钟输出
.CLK270(CLK270), // 270度移相的DCM时钟输出
.CLK2X(CLK2X), // DCM模块的2倍频输出
.CLK2X180(CLK2X180), // 经过180度相移的DCM模块2倍频输出
.CLK90(CLK90), // 90度移相的DCM时钟输出
.CLKDV(CLKDV), // DCM模块的分频输出,分频比为CLKDV_DIVIDE
.CLKFX(CLKFX), // DCM合成时钟输出,分频比为(M/D)
.CLKFX180(CLKFX180), // 180度移相的DCM合成时钟输出
.LOCKED(LOCKED), // DCM锁相状态输出信号
.CLKFB(CLKFB), // DCM模块的反馈时钟信号
.CLKIN(CLKIN), // DCM模块的时钟输入信号
.RST(RST) // DCM 模块的异步复位信号
);
// 结束DCM_BASE模块的例化过程
在综合结果分析时,DCM系列原语的RTL结构如图3-36所示。
 
图3-36 DCM模块的RTL级结构示意图 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

共2页: 12 下一页
Tags:DCM    
  • 关于本站 - 联系我们 - 网站地图 - 网站留言 - 返回顶部