数字电路中,时钟是整个电路最重要、最特殊的信号。 第一, 系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错. 第二, 时钟信号通常是系统中频率最高的信号. 第三, 时钟信号通常是负载最重的信号, 所以要合理分配负载。出于这样的考虑在FPGA这类可编程器件内部一般都设有数量不等的专门用于系统时钟驱动的全局时钟网络。这类网络的特点是:一、负载 能力特别强, 任何一个全局时钟驱动线都可以驱动芯片内部的触发器; 二是时延差特别小; 三是时钟信号波形畸变小, 工作可靠性好。 因此, 在FPGA设计中最好的时钟方案是: 由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。CPLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存 器。这种全局时钟提供器件中最短的时钟到输出的延时。同步设计时, 全局时钟输入一般都接在器件的时钟端, 否则会使其性能受到影响。对于需要多时钟的时序电路, 最好选用一个频率是它们的时钟频率公倍数的高频主时钟。 各个功能模块要使用统一的复位电路。在使用带时钟的触发器、计数器等有复位端的库器件时, 一般应尽量使用有同步复位的器件。注意复位时保证各个器件都能复位, 以避免某些寄存器的初始状态不确定而引起系统工作不可靠。 时钟设计过程中,不可缺少的要涉及到数据的建立时间和保持时间的概念,深刻理解这两个概念有助于我们设计出优良饿时钟网络。异步信号输入总是无法满 足数据的建立保持时间,所以建议大家把所有异步输入都先经过双触发器进行同步化。在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非 同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题,那么这个时候怎么办呢?最好的方法是将所有非同源时钟同步化,那么又怎么 样将非同源时钟同步化呢?我们可以使用带使能端的D触发器,并引入一个高频时钟(频率高于系统中的所有源时钟),便可以达到使系统中所有源时钟同步的效 果。如下面的这个例子: 系统有两个不同源时钟,一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了系统稳定,假设我们引入一个20MHz时钟,那么这个 20MHz的时钟怎么才能将3M和5M时钟同步化呢?
|