基于xilinx-MMCM输出时钟相位调整的实现
deng@广州 2023.3.16
前言
在我们的一个应用中,采用ADC采集数据,ADC的采样时钟信号由FPGA提供。由于场景需求,需要动态调整输出时钟的相位,因此,本文主要讲述了如何使用MMCM进行动态调整输出时钟相位。
概述
MMCM的使用方法,最好先看一下文档:ug472_7Series_Clocking.pdf
在里边有讲到如何使用mmcm进行动态相位调整。
本文主要是简要的讲述如何进行IP设置,仿真验证需要注意什么事项。
IP说明
IP的配置说明
|
|
其他的设置就是正常的设置MMCM。
IP接口信号说明
|
|
Psclk:相位调整的时钟;
Psen:相位调节的使能信号;
Psincdec:相位调整的方向,输出时钟的相位正向移动或者反向移动;
Psdone:相位调整的结束标志;
注意:
psen信号,我看其他的人做仿真例子的时候,psen信号都是若干个psclk周期,但是,我在仿真的时候,如果psen是多个时钟周期的话,会有仿真报警;因此,我在实际的应用中,都是每次拉高一个周期的psen;
psdone信号,基本是固定psen启动后的12个周期;
相位移动计算
|
在应用中,如何计算拉高多少次psen呢?
首先,需要了解,没拉高一次psen信号,相位移动VCO周期的56分之一,那么,我们可以根据我们的输出时钟信号进行计算。
比如,我的输出时钟是80MHz,如果将输出时钟从0度变成180度,那么需要计算如下:
|
仿真结果
在仿真中,用一个输出时钟与输入时钟的与门来反应时钟移相是否成功(只能用来协助仿真),不可用来综合应用;
当他们的相位刚好差180度的时候,这个与门输出是空的;刚好336次相位移动后,时钟输出相位移动180度; |
|
|
|
总结与感想
仿真注意事项
仿真的时候,需要注意仿真库与IP生成的版本是否对应,我一开始使用2019.2的版本生成的IP,但是,使用的是2017.4的库文件,psdone信号一直没有拉高。后来,我直接用vivado进行仿真,是可以正确拉高的。我查看xsim下面的编译文件后,猛然发现可能是库文件问题;
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
