FPGA之道(49)DCM与PLL

前言

本文摘自《FPGA之道》,作者对于DCM以及PLL的理解算得上是很深入了,平时我们只知道用FPGA提供的一些时钟资源,并没理解为什么的问题?今天我们通过看DCM和PLL的原理来更深入理解类似的时钟管理资源,由于书本年代问题,所以,作者只提了DCM和PLL,其实现在的时钟管理资源已经出现了MMCM等,但万变不离其宗,只是更加强大了而已。

DCM与PLL

在与、或、非门以及触发器等基本数字逻辑单元组成的时序逻辑电路世界里,归根到底,我们是利用时钟来玩转数据,而对于时钟信号本身,我们除了能对其进行整数倍分频以及一些简单的门控处理外,几乎无能为力。但是,时钟信号做为时序逻辑的“心跳”,其重要性是显而易见的,因此,为了弥补数字逻辑基本门电路对时钟信号控制不足的软肋,FPGA中通常都会集成一些PLL或者DCM资源,从而实现对时钟信号更为全面、灵活的掌控。
关于PLL和DCM的基本原理,可以参考【知己知彼篇->FPGA内部资源介绍->时钟处理单元】章节,而本章节将主要针对这两者在FPGA设计中的使用方法来进行详细讨论。

PLL模块基本端口简介

时钟输入、输出端口

时钟输入、输出端口是PLL中最基本的两类端口,分别对应CLKIN和CLKOUT。一个锁相环可以有不止一个CLKIN和多个CLKOUT,不过请注意,同一时刻,只能有一个CLKIN端口被使能,但是可以有多个CLKOUT端口都有时钟信号输出。

关于CLKIN端口,它对接入的时钟信号是有一定要求的:
首先,接入的时钟信号一定要是连续时钟信号,否则PLL会不断的失锁,甚至根本无法到达锁定状态,而当这种情况出现的话,PLL的输出信号的波形也就无法得到保证。
其次,对接入时钟信号的频率是有一定要求的,因为PLL并不是对任意频率的时钟输入都能做到锁定的。这个不同的厂商、不同系列芯片之间的要求可能会有所不同,例如,Xilinx Virtex5 LX110系列FPGA芯片中的PLL就要求CLKIN的范围在19MHz~645MHz之间。
第三,对接入时钟信号的占空比也有一定要求,一般来说,接入时钟信号的占空比越接近于50%越好,不过要求也不是这么严格,因为PLL一般都有一定的容忍度,例如有的PLL在输入时钟信号的占空比在30%~70%之间都能够完成锁定。因此,如果需要操作的时钟信号的占空比和50%偏差比较大,那么使用PLL前需要根据器件手册等来确定是否可以完成锁定。
最后,对于一个PLL来说,它可以处理内部逻辑产生的时钟信号,也可以直接处理外部IO管脚直接引入进来的单端或差分时钟信号,因此需要根据实际情况来完成正确的配置或代码描述。

关于CLKOUT端口,它输出的时钟信号也是有一定限制的:
首先,从PLL的原理结构框图来看,它应该只有一个输出端口,可事实上FPGA内部的PLL模块往往能提供多个输出端口,它是怎么做到的呢?其实很简单,FPGA内部PLL的主体部分也只能输出一个时钟信号,我们可以称其为CLKMID,只不过这个时钟信号并不是直接输出给PLL外部逻辑使用的,而是扇出多路,每路都有一个分频器和移相器,这样就可以产生多个CLKOUT供后续使用。
其次,CLKMID的频率是有一定限制的,否则PLL也会出现不能锁定的情况。这个不同的厂商、不同系列芯片之间的要求可能会有所不同,例如,Xilinx Virtex5 LX110系列FPGA芯片中的PLL就要求CLKMID的范围在400MHz~1000MHz之间。
第三,CLKMID之后各个扇出路径上的分频系数和移相系数都是有一定限制的,因此导致各个CLKOUT之间还是有着一定相关性的。所以如果要实现两个完全不相关的CLKOUT,一般需要使用两个PLL。
第四,由于FPGA内部的时钟树资源或者布线资源等等的承受能力有限,所以对CLKOUT上时钟信号的频率也是有一定要求的,例如,Xilinx Virtex5 LX110系列FPGA芯片中的PLL就要求CLKOUT的范围在3.125MHz~600MHz之间。
最后,CLKOUT的时钟移相精度也是有一定限制的。例如Xilinx Virtex5 LX110系列FPGA芯片中的PLL的VCO能够以45°间隔输出8个相移不同的同频时钟,相当于CLKMID扇出部分的移相器,由于分频计数器本身也可以按照计数器的计数总值来调整其输出时钟的占空比和相位,因此,若分频系数为2,那么CLKOUT能够以22.5°的间隔来移相,若分频系数为3,那么CLKOUT能够以15°的间隔来移相,等等,依此类推。

时钟反馈端口

时钟反馈端口包括两部分,CLKFBOUT和CLKFBIN,只有将这两个端口连接起来,才能建立PLL中实现锁定的反馈回路。而反馈回路又直接决定了CLKMID的相位(频率的事情PLL内部已经搞定了,我们无需在这里画蛇添足),因此,通常反馈网络的搭建又有三种模式:外部反馈、内部经由全局时钟树反馈、内部直连反馈。
默认情况下,PLL的反馈网络模式为内部经由全局时钟树反馈,这是因为CLKOUT如果是给内部时序逻辑使用,那么它是要先上全局时钟树的,而为了抵消全局时钟树的群延迟,保证CLKOUT到达各个触发器后的相位也能够跟输入CLKIN保持一致,就必须在反馈网络中也加入一个全局时钟树的延迟。如下图所示为Xilinx公司锁相环的经由全局时钟树反馈网路模式:
在这里插入图片描述
上图中,由PLL的特性可知,A与B的相位会被锁定为一致;若设置CLKOUT0的相移为0°,那么C与D的相位也一致;由于同样经过了一个BUFG的延迟,则E和B的相位也一致。因此,A与E的相位一致,所以CLKIN完全和CLKOUT的相位一致,保证了0相移。
不过上述反馈模式会消耗一个全局时钟树的资源,因此,如果后续时序逻辑并不关心CLKOUT的相位,那么请选则内部直连反馈模式。
如果CLKOUT是给FPGA片外使用,又或者出于什么别的目的或用途,我们也可以通过FPGA芯片外部路径来完成反馈网络的连接,即外部反馈模式。注意,此时需要板级的电路支持。
最后,反馈网络的搭建形式是非常灵活的,上面介绍的仅仅是三种基本方式,在使用中,需要根据实际需求来设计合适的反馈网络。

PLL锁定指示端口

PLL中的CLKMID针对CLKIN完成一次锁定是需要一定时间的,当然了,只要CLKIN满足PLL的输入要求,这个时间会很短。但是,CLKOUT不稳定的时期总是或长或短的存在着,这很有可能会对CLKOUT所掌控的时钟域产生不好的影响。因此,通常情况下,必须在CLKOUT达到稳定后对其掌控的时钟域进行复位操作。而复位操作需要关心的问题也就是CLKOUT是否达到了稳定,这个可以通过PLL给出的LOCKED端口来进行判断。
对于LOCKED端口,当FPGA芯片上电后或者PLL被复位后,将会处于无效状态,一般输出逻辑0;当PLL完成锁定后,将会处于有效状态,一般输出逻辑1。

PLL复位端口

有些情况下,PLL一旦失锁是无法自行恢复的,因此,重置功能是必须的。当PLL遇到一些特殊情况或需求,例如输入时钟频率大范围跳动或者PLL配置更改时,可以通过PLL提供的RESET端口来主动对其进行复位操作,以保证PLL的输出能够尽快达到我们的预期。不过请注意,复位之后的CLKOUT必然会出现一段不稳定期,这时就需要用到上面刚刚介绍的LOCKED端口。

PLL配置端口

对于PLL模块,我们只能通过HDL语言来调用,而无法通过HDL语言来创造,因为PLL所做的事情,已经超出了数字逻辑的理论范围。而当我们使用PLL的时候,一般都是先通过软件工具完成其的具体配置后,才能生成可供HDL调用的、功能确定的PLL模块。可是有时候固定功能的PLL不能满足实际的需求,因此,有些PLL还提供了一系列配置端口,用来动态地修改PLL内部的一些参数寄存器,从而完成对PLL的实时重新配置。

DCM模块基本端口简介

时钟输入端口

时钟输入端口是整个DCM模块中最重要、最基本的输入。一般来说,一个DCM只有一个时钟输入端口,即CLKIN端口,它对接入的时钟信号是有一定要求的:
首先,接入的时钟信号一定要是连续时钟信号,否则DCM会不断的失锁,甚至根本无法到达锁定状态,而当这种情况出现的话,DCM的输出信号的波形也就无法得到保证。
其次,对接入时钟信号的频率是有一定要求的,因为DCM并不是对任意频率的时钟输入都能做到锁定的。相对于PLL,DCM对接入时钟的频率要求更为复杂、苛刻,这点将在介绍时钟输出端口的时候一并介绍。
第三,对接入时钟信号的占空比也有一定要求,一般来说,接入时钟信号的占空比越接近于50%越好,不过要求也不是这么严格,因为DCM一般也有一定的容忍度,例如有的DCM在输入时钟信号的占空比在40%~60%之间都能够完成锁定。因此,如果需要操作的时钟信号的占空比和50%偏差比较大,那么使用DCM前需要根据器件手册等来确定是否可以完成锁定。
最后,对于一个DCM来说,它可以处理内部逻辑产生的时钟信号,也可以直接处理外部IO管脚直接引入进来的单端或差分时钟信号,因此需要根据实际情况来完成正确的配置或代码描述。

时钟输出端口
DCM中的时钟属性
在介绍DCM的时钟输出端口之前,我们需要先来了解一下DCM中的时钟属性。
DCM中的时钟信号具有两大属性:DLL_FREQUENCY_MODE、DFS_FREQUENCY_MODE,它们的取值范围均为二值集合{LOW,HIGH}。由于Xilinx公司并没有公布DCM的一些技术细节,因此我们只能猜测DLL_FR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值