|
|
第一, 系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错.
/ @2 r+ x6 S+ b 第二, 时钟信号通常是系统中频率最高的信号.
z. a4 ~9 k, a8 K) { 第 三, 时钟信号通常是负载最重的信号, 所以要合理分配负载。出于这样的考虑在FPGA这类可编程器件内部一般都设有数量不等的专门用于系统时钟驱动的全局时钟网络。这类网络的特点是:一、负载 能力特别强, 任何一个全局时钟驱动线都可以驱动芯片内部的触发器; 二是时延差特别小; 三是时钟信号波形畸变小, 工作可靠性好。0 D% F6 M3 C% b; w8 }. y; u& R1 j
因此, 在FPGA设计中最好的时钟方案是: 由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。同步设计时, 全局时钟输入一般都接在器件的时钟端, 否则会使其性能受到影响。: w# p- E8 m9 Q+ U3 w; @, h) y
对于需要多时钟的时序电路, 最好选用一个频率是它们的时钟频率公倍数的高频主时钟。
9 P2 p/ K% B( m5 d) Z- |0 n' k: h, A0 c 各个功能模块要使用统一的复位电路。在使用带时钟的触发器、计数器等有复位端的库器件时, 一般应尽量使用有同步复位的器件。注意复位时保证各个器件都能复位, 以避免某些寄存器的初始状态不确定而引起系统工作不可靠。$ c7 ~- K9 t; F5 _5 ?7 _( ~* o7 ?: J
若想掌握时钟设计方法首先需要了解建立时间和保持时间的概念。8 D' a | b: Q) B' J2 V
建立时间(setup me): 是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time):是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
2 ]# M# T) k0 p, Q8 v 对 于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在CPLD/FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单 个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。CPLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的 每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。
% w+ z) O8 P; ^, ?6 r 在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题,那么这个时候怎么办呢?
" G, j: }" b7 c5 `- [) {# d 最好的方法是将所有非同源时钟同步化,那么又怎么样将非同源时钟同步化呢?
: W8 k$ a S( X" q4 u$ V 我们可以使用带使能端的D触发器,并引入一个高频时钟(频率高于系统中的所有源时钟),便可以达到使系统中所有源时钟同步的效果。 |
|