文章目录
前言
本文节选自《FPGA之道》,通过作者的讲解,一起看看时钟和时钟域的相关问题,下一篇博客再看看作者如何来解释跨时钟域问题。
时钟及时钟域
时钟,时序逻辑的心跳
在时序逻辑中,正是时钟信号将各个存储单元中的数据一级、一级的推动下去,如果时钟信号突然停止,那么整个时序逻辑也将陷入瘫痪,因此,时钟就好像时序逻辑的心跳一样,那么重要、却又那么平常地存在着。
几乎所有的FPGA设计都是时序逻辑,因此几乎所有的FPGA设计都离不开时钟信号,但是正因为时钟信号是时序逻辑最基本的必须,就好比空气之于众生一样,也许有些时候,你并不能意识到它的重要性,而这种潜意识里对时钟信号的不重视,则早已为FPGA设计的最终失败埋下了深深地伏笔。因此,要想确保FPGA设计最终的成功,先要确保时钟信号的成功!如果有人让你评判在FPGA上实现某一个功能的可行性,第一步,看时钟,判断该功能对时钟信号的要求是否超越了FPGA的能力范围;如果让你着手开始一个FPGA设计,第一步,还是先看时钟,选取合适的时钟方案作为整个项目的支撑。
时钟的重要性远非区区一个章节所能介绍的完的,可以说,本书的大部分内容都在围绕着时钟信号展开,不过在本章节,我们将目光更加集中于时钟信号本身,来对其进行一些基本介绍,好让大家更加清楚的认识时钟。
时钟信号基本特征
时钟信号基本特征参数介绍
时钟信号具有什么样的基本特征呢?本小节将为大家慢慢道来。请看下图:
对于一个时钟信号来说,最重要的三个参数非周期、频率和占空比莫属了。
周期一般用大写的英文字符T表示,其的数学定义为:对于一个函数f(x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有f(x+T) = f(x),那么f(x)就叫做周期函数,而非零常数T则叫做这个函数的周期。由此可见,一个函数可以有很多个周期,通常,我们取其中最小的非零常数T,即最小周期做为该周期函数的周期。由此可见,连续两次上升沿或下降沿之间的时间间隔即为时钟信号的周期,如上图所示,当然了,时钟信号周期的认定并不局限于此。
频率一般用小写的英文字符f表示,它和周期互为倒数,即f = 1 / T。例如,如果时钟信号的周期为0.1秒,那么其频率就为10赫兹,表示一秒钟的时间内共包含了时钟信号的10个周期。由此可见,相比于周期参数,频率参数在描述时钟信号变化的快慢程度上更加直观。
占空比等于时钟信号一个周期内逻辑1持续的时间与周期时间的比值。对于数字波形来说,波形图上几乎除了逻辑1就是逻辑0,而上图中的“高电平”、“低电平”即分别对应一个时钟周期内逻辑1和逻辑0的持续时间。通常来说,50%是最常见的时钟信号占空比,即“高电平”宽度等于“低电平”宽度。
除了周期、频率、占空比之外,上升时间和下降时间也是时钟信号中比较重要的特征参数。由于现实世界中,电容的充、放电等等都需要一定的时间程,因此不同逻辑电平之间的过度总是需要一个过程,而上升时间就是指时钟信号从逻辑0变化到逻辑1所需要的时间,下降时间则是指时钟信号从逻辑1变化到逻辑0所需要的时间,分别如上图所示。对于理想的时钟信号,我们说时钟的上升沿就是从逻辑0跳变到逻辑1的这个瞬间,时钟的下降沿则是从逻辑1跳变到逻辑0的这个瞬间。而对于实际的时钟信号来说,由于电平之间的变化需要消耗时间,因此,上升沿和下降沿发生的具体时刻就不太好确定,而要根据接收时钟信号的数字器件对于逻辑电平的判决门限来推算了,不过可以肯定的是上升沿、下降沿一定位于上升时间、下降时间之内。对于时序逻辑来说,其内部的绝大部分存储单元都是边沿敏感的,例如寄存器、BLOCK RAM等等,因此一定要对时钟信号的上升沿、下降沿有一个清楚的认识。
如何区分时钟和数据
在数字的世界中,所有的信号都是在逻辑0与逻辑1之间不断切换的,而不仅仅限于时钟信号。因此,数据信号也完全可以具有时钟信号的所有基本特征,那么此时,我们该如何分辨该信号是时钟信号还是数据信号呢?
如果仅仅通过观察信号的数字波形,是无法分辨一个信号到底是时钟信号还是数据信号的。要想做出准确分辨,必须去查看该信号在数字电路中的连接关系,举个例子,如果一个信号连接到一个寄存器的时钟端,那么它就是一个时钟信号;如果该信号连接到一个寄存器的数据输入端,那么它就是一个数据信号;如果一个信号连接到一个寄存器的时钟端的同时又连接到另一个寄存器的数据输入端,那么它也就具有了时钟信号与数据信号的双重身份。
由此可见,时钟信号的本质,是在于其是否为时序逻辑提供“心跳”机制,而不在于其具体的表现形式。
时钟信号的分类
按来源分
时钟信号按照其来源分,可分为外部时钟和内部时钟,而内部时钟又可分为再生时钟、门控时钟、行波时钟,分别介绍如下:
外部时钟
外部时钟,指时钟信号的来源是在FPGA芯片的外部。通常来说,外部时钟源对FPGA设计来说是必须的,因为一般FPGA芯片内部没有能够产生供内部逻辑使用的时钟信号的选频和激励电路。所以通常来说,我们需要在FPGA芯片的外部使用晶振以及恰当的电阻、电容、电感、三极管等器件,来搭建用于产生时钟信号的电路,并将其通过FPGA芯片的恰当物理管脚引入到FPGA内部供时序逻辑使用。
顺便说一句,当我们用示波器观察外部时钟信号时,可以发现其波形很可能不是一个规则的方波,而一个正弦波。这是由于方波信号实际上是一个频带非常宽的信号,因为其有着尖锐的上升沿与下降沿,而晶振的选频回路只能对针对某一个频率的信号进行放大,而对其他频率的信号都会衰减,再加上任何信道其实都相当于一个滤波器,所以导致时钟信号的带宽非常的有限,因此都类似表现为正弦波,这也是时钟信号中为什么会有“上升时间”和“下降时间”的一个原因。不过模拟的时钟信号经过逻辑门的驱动后,由于MOS电路的陡峭导通特性,会对时钟信号的“上升时间”和“下降时间”起到积极的缩减作用。
再生时钟
再生时钟,指FPGA内部产生的新时钟,当然了,这并不是凭空产生的时钟(因为FPGA芯片内部一般不具有产生时钟信号的电路结构),而是以一个输入的时钟信号作为参考,然后在此基础之上通过调整其频率和相位而产生出来的新时钟。
目前来说,FPGA芯片内部能够产生再生时钟信号的模块主要有DCM和PLL两个,在【本篇->编程思路->DCM与PLL】章节中,我们将为大家详细介绍。顺便说一下,FPGA芯片内部仅有DCM和PLL可以对时钟信号进行升频操作。
门控时钟
门控时钟,指的是由组合逻辑产生的时钟,其中,组合逻辑的输入可以全部是数据信号,也可以包含原始时钟信号。由于组合逻辑中的基本单元就是与、或、非等门电路,而与门和非门又具有“开关性”,固该类时钟又称为门控时钟。例如,下面的电路图中的门控时钟是