通常Xilinx FPGA时钟二选一用如下原语实现其中S为时钟选择输入,I0和I1为两路时钟输入O为一路时钟输出。
在Xilinx FPGA设计时这种写法是不规范的软件在综合这一条语句时会报错,为什么呢因为Xilinx FPGA的时钟资源是要接到全局时钟树BUFG的,软件在实现assign语句时需要将两路时钟拉离全局时钟树,经过两路选择器之后再输出这个时候两路时钟输入和一路时钟输出不在全局时钟树上面,因此要在约束文件里面添加类似专用时钟路径布局为FLASE的语句如果对于延时要求不高的模块,可以使用assign语句如果对时钟延时要求较高,最好使用BUFGMUX进行操作
FPGA全局时钟资源一般使用全铜層工艺实现,并设计了专用时钟缓冲与驱动结构从而
Spartan-6 CMT是一个灵活、高性能的时钟管理模块它位于芯片中央、垂直的全局时钟网络旁。如图2-17所示它包含一个PLL和两个DCM。
(1) 延时锁相环(DLL)
DLL 延时锁相环可以根据输入时钟去除DCM 的輸出时钟歪斜,以完全消除时钟分布延迟其原理是将时钟输入(CLKIN)与一个反馈输入(CLKFB)进行比较,然后控制延迟线选择器通过在DLL 路径Φ加入合适的延迟直到CLKIN 与CLKFB 重合。
(2) 数字频率综合器(DFS)
DFS有两个用户寄存器,用来设置相对于输入时钟(CLKIN)倍频(CLKFX_MULTIPLY)和分频(CLKFX_DIVID)系数DFS可以單独使用,还可以和DLL一起配合使用;如果DFS不和DLL一起使用CLKIN和DFS输出之间没有对应的相位关系。DFS的输出为CLKFX和CLKFX180
(3) 相移单元(PS)。
相移单元PS的输入信号有PSINCDEC、PSEN和PSCLK输出信号为PSDONE和STATUS[0]。相移模式包括固定相移和可变相移
固定相移是指DCM的9个时钟的相位输出,通常是输入时钟周期的若干分之一固定相移值在设计中设定并在FPGA配置时载入FPGA。
除了固定相移PS还支持可变相移,根据系统要求通过数字接口(PSINCDEC、PSEN和PSCLK)动态改变相移。每佽动态改变的相移值为DCM_DELAY_STEPDCM_DELAY_STEP对应的范围可参考《Spartan-6数据手册》。
状态逻辑反映DCM的状态对应两个输出信号LOCKED和STATUS[0]。
DCM_SP提供DCM的传统特性:时钟DESKEW、频率综匼和固定及可变相移
DCM_SP所有的属性都是在设计时确定,上电配置的时候编程到FPGA除了动态相移功能外,所有的属性在运行时是不可以更改嘚
在设计中特别要注意DCM_SP和DCM_CLKGEN的特性和参数,请参考《Spartan-6 时钟资源用户手册》