FPGA实战演练逻辑篇43:同步以及时钟的设计原则
同步以及时钟的设计原则
本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》
配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt
有了前面的铺垫,大家应该明白了寄存器的代码编写。接下来我们要更进一步从深沉次来探讨基于寄存器的同步以及时钟的设计原则。(特权同学,版权所有)
虽然在上一章已经对组合逻辑和时序逻辑的基本概念做过描述,但是这里还是要再额外唠叨几句组合逻辑和时序逻辑的历史渊源,好让大家更加信服为什么时序逻辑要明显优于组合逻辑的设计。早期的可编程逻辑设计,限于当时的工艺水平,无论是逻辑资源还是布线资源都比较匮乏,所以工程师们更多是用可编程器件做一些简单的逻辑粘合。所谓的逻辑粘合,无非是一些与、或、非等逻辑门电路简单拼凑的组合逻辑,没有时序逻辑,因此不需要引入时钟。而今天的FPGA器件的各种资源都非常丰富,已经很少有人只是用其实现简单的组合逻辑功能,而是更多的大量使用时序逻辑来实现各种复杂的功能,而一旦大量的使用时序逻辑,时钟设计的各种攻略也就被不断的提上台面。可不是,时钟好比时序逻辑的心脏,它的好坏直接关系到整个系统的是非成败。那么,时钟设计到底有什么讲究,哪些基本原则是必须遵循的呢?搞清楚这个问题之前,我们势必要先全面的了解时钟以及整个时序电路的工作原理。(特权同学,版权所有)
在一个时序逻辑中,时钟信号掌控着所有输入和输出信号的进出。在每个时钟有效沿(通常是上升沿),寄存器的输入数据将会被采样并传送到输出端,此后输出信号可能会在经历长途跋涉般的“旅途”中经过各种组合逻辑电路并会随着信号的传播延时而处于各种“摇摆晃荡”之中,直到所有相关的信号都到达下一级寄存器的输入端。这个输入端的信号将会一直保持直到下一个时钟有效沿的来临。每一级寄存器都在不断的重复着这样的数据流采集和传输。单是这样枯燥的文字描述时序逻辑和时钟之间的工作机理未免有些乏味,不妨举个轮船通行三峡大坝的例子做类比。(特权同学,版权所有)
如图5.8所示,三峡大坝有五级船闸,船由上游驶往下游时,船位于上游。①先关闭上游闸门和上游阀门。②关闭第一级下游闸门和阀门,打开上游阀门,水由上游流进闸室,闸室水面与上游相平时,打开上游闸门,船由上游驶进闸室。③关闭上游闸门和阀门,打开第一级下游阀门,当闸室水面降到跟下游水面相平时,打开下游闸门,船驶出第一级闸室。如此操作4次,通过后面的四级船闸,开往下游。船闸的原理实际上是靠两个阀门开关,人为地先后造成两个连通器,使船闸内水面先后与上、下游水面相平。(特权同学,版权所有)
图5.8 三峡大坝五级闸门示意图
对于单个数据的传输,就非常类似这里轮船通过多级闸门的例子。轮船就是我们要传输的数据,闸门的开关就好比时钟的有效边沿变化,水位的升降过程也好像相关数据在两个寄存器间经过各种组合逻辑的传输过程。当轮船还处于上一级闸门准备进入下一级闸门时,要么当前闸门的水位要降低到下一级闸门的水平,要么下一级闸门的水位要升到上一级闸门的水平,只要这个条件不满足,最终结果都有可能造成轮船的颠簸甚至翻船。这多少页有点像寄存器锁存数据需要保证的建立时间和保持时间要求。关于建立时间和保持时间,有如下的定义:
● 在时钟的有效沿之前,必须确保输入寄存器的数据在“建立时间”内是稳定的。(特权同学,版权所有)
● 在时钟的有效沿之后,必须确保寄存器的输出数据至少在“保持时间”内是稳定的。(特权同学,版权所有)
在大家理解了时钟和时序逻辑的工作机理后,也就能够理解为什么时钟信号对于时序逻辑而言是如此的重要。关于时钟的设计要点,主要有以下几个方面:
① 避免使用门控时钟或系统内部逻辑产生的时钟,多用使能时钟去替代。(特权同学,版权所有)
门控时钟或系统内部逻辑产生的时钟很容易导致功能或时序出现问题。尤其是内部逻辑(组合逻辑)产生的时钟容易出现毛刺,影响设计的功能实现;组合逻辑固有的延时也容易导致时序问题。(特权同学,版权所有)
② 对于需要分频或倍频的时钟,用器件内部的专用时钟管理(如PLL或DLL)单元去生成。(特权同学,版权所有)
用FPGA内部的逻辑去做分频倒不是难事,倍频恐怕就不行了。但是无论是分频还是倍频,在通常情况下都不建议用内部逻辑去实现,而应该采用器件内部的专用时钟管理单元(如PLL或DLL)来产生,这类专用时钟管理单元的使用并不复杂,在EDA工具中
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)