好文档 - 专业文书写作范文服务资料分享网站

FPGA入门教程

天下 分享 时间: 加入收藏 我要投稿 点赞

刺的出现,因为格雷码计数器的输出每次只有一位跳变。

其他关于毛刺的详细讨论,请见补充教程2:关于毛刺问题的探讨。

1.3同步电路设计

同步电路是指所有电路在同一个公共时钟的上升沿或下降沿的触发下同步地工作。但在实际系统中,往往存在多时钟域的情况,这时同步的概念有所延伸,不再专指整个设计同步于同一时钟沿,而是指设计应该做到局部同步,在每个时钟域内的电路要同步于同一时钟沿。

1.3.1 同步电路设计的优点:

1.同步设计能有效地避免毛刺的影响,使得设计更可靠;

2.同步设计易于添加异步复位reset,以使整个电路有一个确定的初始状态; 3.同步设计可以减小环境对芯片的影响,避免器件受温度,电压,工艺的影响; 4.同步设计可以使静态时序分析变得简单和可靠;

5.同步设计可以很容易地组织流水线,提高芯片的运行速度。

1.3.2同步电路的设计准则:

1.尽可能在设计中使用同一时钟,时钟走全局时钟网络。走全局时钟网络的时钟是最简单、最可预测的时钟,它具有很强的驱动能力,可以驱动FPGA内部中的所有触发器,并保证Clock skew可以小到忽略的地步。

2.避免使用混合时钟沿采样数据,即避免在设计中中同时使用时钟的上升沿和下降

沿。

3.尽量少在模块内部使用计数器分频所产生的时钟。计数器分频时钟需完成的逻辑功能完全可由PLL锁相环或时钟使能电路替代。计数器分频时钟的缺点是使得系统内时钟不可控,并产生较大的Clock skew,还使静态时序分析变得复杂。

4.避免使用门控时钟。因为经组合逻辑产生的门控时钟极可能产生毛刺,使D触发器误动作。

5.当整个电路需要多个时钟来实现,则可以将整个电路分成若干局部同步电路(尽量以同一个时钟为一个模块),局部同步电路之间接口当作异步接口考虑,而且每个时钟信号的时钟偏差(△T)要严格控制。

6.电路的实际最高工作频率不应大于理论最高工作频率,留有设计余量,保证芯片可靠工作。

7.电路中所有寄存器、状态机在系统被reset复位时应处在一个已知的状态。 关于同步电路设计中的其他问题请详见补充教程3:华为同步电路设计规范。

1.3.3关于时钟设计的讨论

目前的工程设计中一般使用同步时序电路来完成整个系统的设计,由上一节可见,时钟在同步电路设计中起着至关重要的作用。那么,我们在设计时首先要完成的是对时钟的设计。 如今在设计中常见的时钟类型包括: 全局时钟、内部逻辑时钟和门控时钟。

1. 全局时钟

全局时钟即同步时钟,它通过FPGA芯片内的全局时钟布线网络或区域时钟网络来驱动,全局时钟具有高扇出、高精度、低Jitter和低Skew的特点,它到芯片中的每一个寄存器的延迟最短,且该延迟可被认为是固定值。所以我们推荐在所有的设计中的时钟都使用全局时钟。全局时钟的设计有以下几种方法:

(1). 由PLL锁相环来产生全局时钟。

(2). 将FPGA芯片内部逻辑产生的时钟分配至全局时钟布线网络。 (3). 将外部时钟通过专用的全局时钟输入引脚引入FPGA。

在我们的设计中,一般推荐电路中的所有的时钟都由PLL锁相环产生。一方面,PLL锁相环可实现倍频和移相的操作,使我们很方便地获得所需频率和相位的时钟;另一方面,PLL锁相环默认将其驱动的时钟分配至全局时钟网络或区域时钟网络,Jitter和Skew都很小。 下图取自我们项目中的一个PLL锁相环设计,该PLL用于驱动DDR的接口模块。因为功能所需,DDR接口需要三个133MHz的时钟,相位分别是‘-90’、‘0’、‘-180’,图中所示即为该时钟的产生模块。我们使用QuartusⅡ的Megawizard生成PLL锁相环的IP core。其中‘inclk_66’为PLL锁相环的输入时钟,由外部的66MHz晶振提供,经过PLL倍频和移相后得到所需的三个全局时钟。 ooo

2. 内部逻辑时钟

内部逻辑时钟即指由芯片内部的组合逻辑或计数器分频产生的时钟。

对于组合逻辑时钟,特别是由多级组合逻辑产生的时钟,是要被严格禁止使用的,因为一方面组合逻辑极容易产生毛刺,特别是对多级组合逻辑;另一方面组合逻辑电路的Jitter和Skew比较大,这将恶化时钟的质量。所以,一般组合逻辑产生的内部时钟仅仅适用于时钟频率较低、时钟精度要求不高的情况。

对于计数器分频产生的时钟,也应该尽量少地使用,因为这种时钟会带来比较大的延迟,降低设计的可靠性,也使得静态时序分析变得复杂。计数器分频时钟需完成的逻辑功能完全可由PLL锁相环或时钟使能电路替代。

还有一种由触发器产生的时钟—行波时钟,即一个触发器的输出用作另一个触发器的时钟输入。文中1.1.2节描述的时钟分频电路就是一种行波时钟。因为各触发器的时钟之间产生较大的时间偏移,很容易就会违反建立时间、保持时间的要求,导致亚稳态的发生。所以,这种行波时钟要被严格禁止使用。

3. 门控时钟 一般情况下,应该避免使用门控时钟。因为经组合逻辑产生的门控时钟极可能产生毛刺,对系统造成很大危害。但对于某些功耗很大的系统而言,需要使用门控时钟来降低功耗。 我们推荐使用右图中描述的门控时钟的设计,该设计一般不会产生毛刺和亚稳态的问题。因为触发器避免了毛刺的产生,而亚稳态只可能出现在源时钟的下降沿,但是随后它与源时钟低相位相与,最后不会产生影响。

门控时钟最好只在顶层模块中出现,并将其分离到一个在顶层的独立模块中。这同时保证了底层的每个模块有单一的时钟,且在本模块中的时钟不进行门控。

在补充教程4和补充教程5中,我们对时钟和时序的设计进行了更详细的讨论。

Dsource_clkclk_engated_clkqoutsource_clkclk_enqoutgated_clk

1.3.4 亚稳态在同步电路或异步电路中,如果触发器的setup 时间或hold 时间不能得到满

足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端将会产生毛刺并不断振荡、最终固定在某一电压值上,此电压值并不一定等于原来数据输入端D的值。这段时间称为决断时间(resolution time)。经过决断时间之后,Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。

亚稳态的危害主要体现在破坏系统得稳定性上,由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,严重情况下输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。逻辑误判将导致功能性错误,而亚稳态的传播则扩大了故障面,严重时将导致系统崩溃。 在异步时序电路中更容易发生亚稳态,因为异步电路一般具有多个时钟域,数据在两个时钟域间传递时,非常容易导致setup 时间或hold 时间不满足而发生亚稳态。在同步时序电路中,当两个触发器间的组合逻辑延迟过大时,会导致setup 时间不满足而发生亚稳态。

1.3.5 对跨时钟域数据的处理

对跨时钟域数据的处理的核心就是要保证下级时钟对上级数据采样的setup 时间或hold 时间满足要求,即尽量避免亚稳态的发生和传播。但是,我们知道,只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。我们推荐使用以下方法来解决异步时钟域数据同步问题。

1. 用触发器打两拍

如下图,左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。然而,亚稳态是无法被根除的,一旦亚稳态发生,后果的严重程度依赖于你

设计系统对产生的错误是否敏感。 2. 异步FIFO或DPRAM

因为异步FIFO或DPRAM使用格雷码计数器设计读写地址的指针,所以它可以很好

地避免亚稳态的发生。使用方法如下,将上级芯片提供的数据随路时钟作为写信号,将数据写入异步FIFO或DPRAM,然后使用本级的采样时钟将数据读出即可。唯一需要注意的是,当两级时钟频率不同时,需要设计好缓冲区,并通过监控full、half、empty、useword

是,当两级时钟频率不同时,需要设计好缓冲区,并通过监控full、half、empty、

useword3. 调整时钟相位

这种方法的设计难度较大,

FPGA入门教程

刺的出现,因为格雷码计数器的输出每次只有一位跳变。其他关于毛刺的详细讨论,请见补充教程2:关于毛刺问题的探讨。1.3同步电路设计同步电路是指所有电路在同一个公共时钟的上升沿或下降沿的触发下同步地工作。但在实际系统中,往往存在多时钟域的情况,这时同步的概念有所延伸,不再专指整个设计同步于同一时钟沿,而是指设计应该做到局部同步,在每个时钟域内的电路
推荐度:
点击下载文档文档为doc格式
6dezm0pqkz5136q5shmk
领取福利

微信扫码领取福利

微信扫码分享