(转)FPGA异步时序和多时钟模块

http://bbs.ednchina.com/BLOG_ARTICLE_3019907.HTM  缓存

第六章   时钟域网络

有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用惟一的时钟域。换句话说,只有一个独立的网络能够驱动一个设计中全部触发器的时钟端口。虽然这样能够简化时序分析以及减小不少与多时钟域有关的问题,可是因为FPG**外各类系统限制,只使用一个时钟经常又不现实。FPGA时常须要在两个不一样时钟频率系统之间交换数据,在系统之间经过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。数据结构

这里以及后面章节提到的时钟域,是指一组逻辑,这组逻辑中的全部同步单元(触发器、同步RAM块以及流水乘法器等)都使用同一个网络做为时钟。假如设计中全部的触发器都使用一个全局网络,好比FPGA的主时钟输入,那么咱们说这个设计只有一个时钟域。假如设计有两个输入时钟,如图6-1所示,一个时钟给接口1使用,另外一给接口2使用,那么咱们说这个设计中有两个时钟域。架构

图6-1:双时钟域设计dom

平时咱们在设计中遇到的门控时钟、衍生时钟以及事件驱动的触发器均可归为时钟域类别。如图6-2所示,经过一个简单门控时钟建立了一个新的时钟域。咱们知道,这类时钟控制在FPGA设计中并不被推崇(可使用时钟使能替代时钟门控),然而它却很是有利于咱们理解时钟域这一律念。异步

本章咱们将着重详细讨论如下主题:工具

l  两个不一样时钟域之间传输信号。布局

n  亚稳态的产生以及对设计的可靠性的影响优化

n  经过相位控制避免亚稳态设计

n  在时钟域之间传输单个信号,将信号打两拍

n  使用FIFO在时钟域之间传输多位数据

n  使用分区同步器模块提升设计的组织架构

l  处理ASIC验证原型里的门控时钟

n  创建一个单时钟模块

n  自动门控移除

图6-2:经过门控时钟建立的时钟域

6.1 跨时钟域

设计中包含多时钟域,首先要解决的是在不一样时钟域之间传输信号的问题。信号跨时钟域传输将会是一个大问题,缘由以下:

一、  信号跨时钟域传输产生的故障老是不太容易复现。设计中若是存在两个异步时钟域,故障每每与这两个时钟沿的相对时序有关。来自片外时钟源的时钟一般与器件实际功能并没有任何关联。

二、  根据技术的不一样,问题也不同。(尽管因为其余因素的影响,这种状况并不老是成立)咱们经常会发现,若是约束较小的创建和保持时间,从统计上来讲高速设计技术比低速设计技术更不容易产生故障。同时,其它因素,好比同步器件中设计实现对输出的缓冲,也会对一个可能的故障产生显著影响。

三、  EDA工具通常不会探测和标注这类问题,静态时序分析工具是基于独立的时钟区域来进行时序分析,并且只有在特定的方式下根据指定的要求才能进行跨时钟域的时序分析。

四、  一般来讲,若是没有很好地理解,跨时钟域故障难以探测且难以调试。因此全部跨时钟域接口都必需要在任何功能实现以前被很好地定义和处理。

让咱们首先来看看在不一样时钟域之间传输信号到底会产生什么错误。考虑图6-3所示的状况,一个信号在两个时钟域之间传播。

如图6-4所示,低速时钟的周期是高速时钟周期的两倍。低速时钟上升沿与高速时钟上升沿之间的间隔为常量,并且老是等于dC。因为这两个时钟的这种相位匹配关系,dC老是保持不变(假定频率没有漂移),并且在这个例子中,dC老是大于逻辑延时与高速时钟驱动的触发器创建时间之和。

图6-3:时钟域之间的简单信号传输

图6-4:两个时钟域之间的时序关系

当这些时钟一启动,它们之间存在一个固定的相位关系,如此能够避免任何创建时间和保持时间违规。只要时钟没有漂移,就没有任什么时候序违规出现,而且器件会如预想那样工做。如今咱们再考虑另一种状况,一样的时钟上电后的相位关系如图6-5所示。

图6-5:会形成时序违规的时钟相位关系

图6-5中两个时钟之间的这种相位关系就会形成时序问题。这种状况会在任意频率的两个时钟域之间。然而,若是时钟的频率匹配不对,这种时序问题在这种状况下也不会发生。

总结来讲,时钟同步问题在FPGA设计中一般是一种不可复现的问题,并且会对设计的可靠性带来严重后果。后面咱们会讨论解决这类问题的方案,在此以前,咱们必需要讨论当创建和保持时间违规时到底会发生什么。下一小节就是关于这个主题。

6.1.1 亚稳态

触发器的创建时间和保持时间在时钟上升沿左右定义了一个时间窗口,若是触发器的数据输入端口上数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违规。存在这个时序违规是由于创建时间要求和保持时间要求被违反了,此时触发器内部的一个节点(一个内部节点或者要输出到外部节点)可能会在一个电压范围内浮动,没法稳定在逻辑0或者逻辑1状态。换句话说,若是数据在上述窗口中被采集,触发器中的晶体管不能可靠地设置为逻辑0或者逻辑1对应的电平上。因此此时的晶体管并未处于饱和区对应的高或者低电平,而是在稳定到一个肯定电平以前,徘徊在一个中间电平状态(这个中间电平或许是一个正确值,也许不是)。如图6-6所示,这就是所谓的亚稳态。

图6-6:时序违规致使亚稳态

如图6-6的波形所示,信号的跳变发生在创建和保持边界组成的时间窗口内,这意味着输出不会是逻辑0或逻辑1对应的肯定电平,而是它们之间的一个中间电平。若是触发器包含有一个输出缓冲,那么亚稳态自己就能够称为随着内部信号的逐渐稳定而在输出上表现的杂散过渡。输出保持亚稳态的时间是随机的,甚至可能在整个时钟周期内都保持亚稳态。那么,若是这个亚稳态值输入到组合逻辑,根据逻辑门电路的切换门槛,错误的操做就能够发生。从时序收敛的角度来讲,两个触发器之间的组合逻辑延时都要求要小于最小的时钟周期,可是这种亚稳态信号保持亚稳态的时间,自己就是变相地增长了逻辑延时。很显然,一个亚稳态信号会给设计带来致命的功能故障,并且该信号也将没法在各个时钟沿上采集到一致的结果。

事实上须要注意的是,在FPGA设计流程中想经过仿真来肯定亚稳态对设计的危害是很是困难的。纯数字的仿真器并不能检查到创建和保持违规,从而在违规发生时,仿真出一个逻辑“X”(未知)值。而普通的RTL仿真,并不会出现创建和保持违规,因此也就不会有信号出现亚稳态状态。尽管门级仿真的时候会检查创建和保持是否违规,可是仿真由两个异步信号对齐而致使一个同步故障依然是一件十分困难的事情。尤为困难的是,设计或者验证工程师并非在设计伊始即查找问题。那么,理解如何保持设计的可靠性以及如何避免须要经过仿真来揭露设计的同步问题,就显得十分重要了。解决亚稳态的方法有不少,后面咱们将逐一进行讨论。

6.1.2 解决亚稳态方案1:相位控制

考虑这样一个设计,两个时钟域的周期不一样,并且相位关系任意。若是至少有一个时钟由FPGA内部的PLL或者DLL控制,并且在PLL或者DLL的精度范围内,其中一个时钟的周期是另一个时钟周期的数倍。那么如图6-7所示,经过相位对齐能够避免实现违规。

考虑这样一个例子,一个信号从低速时钟域传递进入另外一个时钟域,而此时钟域的周期是低速时钟域的一半。根据前面的分析,若是没有任何相位关系的保证,那么时序违规就有可能发生。而后,经过使用DLL由低速时钟派生这个高速时钟,那么相位对齐就能够达成。

图6-7中,DLL调整高速时钟(采集)的相位来对齐低速时钟(发送)。数据在两个时钟域之间传递的时间是dC,该传递时间老是处于其最大可能值。本例中,只要从低速触发器到高速触发器的传播延时小于高速时钟周期,那么就不会有创建时间违规发生。若是由于时钟歪斜不够小而致使保持时间要求没法知足,那么能够经过配置实用高速时钟的降低沿来采集信号,固然前提是有足够的时序余量能确保创建时间要求获得知足。

图6-7:使用DLL对齐相位

总结来讲,相位控制技术能够在一个时钟频率是另一个时钟的数倍且其中一个时钟能够由FPGA内部PLL或者DLL控制时使用。

在不少例子中,设计控制时钟域之间的相位关系是很奢侈的。尤为是时序要求由FPG**外的芯片施加,或者时钟域之间没有任何肯定相位关系的时候。举例来讲,若是FPGA在两个系统之间提供了一个接口,而这两个系统施加在芯片输入输出延时上的时序要求很是紧张,调整任何这两个系统的时钟相位是不可能的。相似这种例子在实践中会常常遇到,因此须要使用新的方法来解决,下一节将讨论这种新的方法。

6.1.3 解决亚稳态方案2:打两拍处理,即寄存两拍

跨越两个异步时钟域传输单比特信号时,可使用打两拍技术。根据上一节的讨论,创建或保持时间违规会致使一个触发器内节点上电平徘徊在一个中间状态,从而产生亚稳态问题,并且信号从这种中间状态到一个稳定状态须要时间,此时间的长度未知。这个未知的时间会被加入到时钟到输出的时间(Tco)里(影响随后路径上的延时),且会在下一级致使一个时序违规。若是该信号输入到一个控制分支或者一个判决树,那将是很是危险的。不幸的是,没有很好的办法来预测这种亚稳态将会持续多长时间,也没有很好的办法将这些信息反标注到时序分析工具以及优化工具。假定两个时钟域之间彻底异步(即没法实现相位控制),那么尽量避免亚稳态的一个最简单办法就是使用双触发。在其它也许教科书中也称这种方法为同步位、两级触发器或两级同步器。

图6-8所示的配置中,同步器电路(其输入为Din)中的第一拍后也许会产生亚稳态,可是信号有机会在其被第二级锁存以及被其它逻辑看到以前稳定下来,如图6-9所示。

图6-8:打两拍处理

图6-9:打两拍重同步器

图6-9中,Dsync是同步器中第一个触发器的输出,而Dout是第二个触发器的输出。Dout本质上是等到同步后的信号一旦稳定下来后将其往下传,而且确保其它电路不会收到亚稳态信号。同步器两级触发器之间不要添加任何逻辑,这样可使得信号得到尽量长的时间来回到稳定状态。因此总结来讲,打两拍同步器在单比特信号跨异步时钟传输时,用来将该单比特信号从新同步到异步时钟域。

理论上来讲,第一个触发器的输出应该一直保持不肯定的亚稳态,可是在现实中它会受到实际系统一系列因素影响后稳定下来。打个比方,想象一下一个皮球稳定地停住在一个山尖上,从任何方向上轻推一下球,它都会由相反的方向从山上滚落。一样,处于亚稳态的一个逻辑门,由发热、辐射等产生的随机波动都会促使该亚稳态回到逻辑0或者逻辑1对应的稳态。

使用打两拍技术采样一个异步信号时,没法彻底预知咱们想要的信号跳变,将在当前时钟发生仍是下一个时钟发生。当信号属于一个数据总线中的一部分(有些数据位比其它比特晚一个时钟周期跳变)时,或者关键数据必需要精确到单个时钟周期内到达时,这种打两拍技术是没有帮助的。不过,对于控制信号来讲,若是它们能够忍受正负一个或更多个时钟周期的变化,这种技术仍是很是有用的。

举例来讲,一个外部事件控制一个比特来触发FPGA内部动做,这个触发动做发生的频率能够很是的低,好比两个事件之间的间隔能够达到微秒甚至毫秒级。在这个例子中,一些额外的数纳秒的延时并不会影响该事件的行为。若是由外部事件驱动的改比特输入到一个状态机的控制结构中,经过同步器打两拍处理,那么想要的信号变化只是被延迟了一个时钟周期。然而,若是没有进行打两拍处理,那么判决逻辑也许会从该异步信号的亚稳态状态解码出不一样状态跳转信息,并使得状态机同时跳转到不一样的分支。

除了纯数字系统外,还有一种混合信号系统,这种系统会一般会产生异步反馈信号到FPGA,如图6-10所示。

图6-10:从新同步模拟反馈

上述对异步信号打两拍的同步器的Verilog代码以下所示:

module analog_interface(

...

output regfbr2,

input feedback);

reg fbr1;

always @ (posedge clk) begin

fbr1<=feedback;

fbr2<=fbr1;//;doubleflop

end

...

反馈信号会产生时序违规,并且fbr1在时钟沿后一个不肯定的时间内处于亚稳态。那么,其它逻辑只可使用的信号fbr2。

使用打两拍同步处理技术时指定时序约束是很是重要的,须要施加的约束是将位于第一个和第二个寄存器时钟域之间的信号路径指定为假路径,即让时序分析器部分此路径。由于打两拍同步器结构用于从新同步信号,在这两个时钟域之间并无须要分析的同步路径。此外,如前所述这两个触发器之间的时序要尽量的小,这样能够减少亚稳态被传播到第二级触发器的可能性。

6.1.4 解决亚稳态方案3:使用FIFO结构

跨时钟域传输数据用得最多的方法就是使用先入先出(即FIFO)结构。FIFO能够用于在两个异步时钟域之间传输多个比特信号。咱们一般看到的FIFO应用包括在两个标准总线之间传输数据,以及从可突发访问的存储器中读出数据或者对其写入数据。例如,如图6-11所示,显示的是一个可突发访问存储器与一个PCI总线之间的接口。

图6-11:FIFO在PCI应用中

在不少不一样的应用中,FIFO都是一种很是有用的数据结构,不过这里咱们仅仅关注其处理跨时钟域突发数据的能力。

FIFO很是相似于在超市里的结帐通道,每一个客户到达结帐台的时间多少有点随机性,结帐速度在必定意义上说是匀速的。有时候结帐客户可能会不多,而其余某些时候又会突发不少客户须要结帐,收款员不可能马上为每一个客户服务,因此须要排队。抽象地来讲,咱们称这种排成一队的数据为一个序列。随后,收款员会以或多或少平均的速度为每个顾客服务,并不会理会队列的长度。假如须要结帐的顾客涌入收银台的速度超过了收款员的服务速度,那么这种收款结构就没法支撑了。那么此时,就须要采起措施,要么加快收款员的服务速率,要么减小新增顾客数。

一样的道理也存在于数据传输中,数据可能到达某个时钟域的间隔是彻底随机的,有时候或许会面临一个很大突发数据块。这种状况下,处在另外一个时钟域的接收设备只能以指定的速率来处理数据。如图6-12所示,一个FIFO被用于缓存数据,这样在设备中就造成了一个数据序列。

图6-12:异步FIFO

经过使用异步FIFO,数据发送端能够以随意的间隔发送数据,而接收端也能够以其固有的带宽从数据序列里取出数据并进行处理。因为任何由FIFO实现的数据序列的长度都不能无限制,因此须要一些控制来防止FIFO溢出。这时候,有两种选项能够采用:

l  事先定义好的发送速率(可突发或不可突发),最小接收速率以及对应最大的序列尺寸。

l  握手控制。

注意,发送设备的时钟频率没有必要高于接收端设备,不然容易形成溢出。以较慢的频率将数据送入FIFO,那么数据写入FIFO的时钟周期数要少于接收端将要处理数据的时钟周期数。那么,若是不采起握手控制,就必需要理解以上描述会产生溢出的最坏的状况。

在任何一段时间内,假设数据发送写FIFO的速率大于接收处理数据的速率,那么很轻易地使系统没法维持。由于没有任何存储设备能够存得下无限的数据,这种问题须要在系统结构层级才能解决。一般来讲,突发发送通常是以小周期性或非周期性发生。因此FIFO的最大尺寸要大于等于(具体还要根据数据接收器的属性)突发的尺寸。

在不少例子中,无论是突发尺寸仍是数据到达的分配都没法很好地定义。这种时候,就有必要使用握手控制来防止FIFO产生数据溢出。如图6-13所示,这种握手控制一般由一些标志信号来实现。这些标志信号,一个是发送侧的满标志,用于提示FIFO没有多余空间存储数据了,另外一个是而空标志,用于提示接收侧,FIFO中没有数据须要处理了。管理这些握手信号可能还须要一个状态机,正如图6-13所示。

图6-13:FIFO的握手控制

FIFO在FPGA内通常是经过封装一个双口RAM来实现。表面上看微不足道的标志信号如空和满指示等,其实是实现起来反而比较困难。缘由就在于输入控制经常须要依据输出来产生,一样的输出控制也经常须要依据输入来产生。例如,驱动输入的逻辑必需要知道FIFO是否已满,而这只能经过获取从输出端读出的数据数量才能得知。一样的道理,在输出侧从FIFO读数据的逻辑必需要了解FIFO中是否还有数据(即FIFO是否已空),而这只能经过输入端口的写指针才能判决。

这里咱们探讨使用FIFO在两个异步时钟域之间传输数据,不过一样会面临实现FIFO自己时遇到的握手标志问题。为了在两个时钟域之间传递必要的信号,咱们必须重回上一节讨论到的打两拍技术。下面咱们以图6-14所示的简单异步FIFO框图为例进行阐述。

图6-14:异步FIFO简单框图

图6-14中,在产生空和满信号时,写地址和读地址都必须是异步传递到对方时钟域中。这样在从新同步多比特意址总线时,问题就来了,即根据各个比特不一样的走线,总线中某些比特可能会比其它比特晚一个时钟周期。换句话说,因为两个时钟域异步的天然属性,使得地址总线有些比特在一个时钟沿上被采集,而另外一些比特却在下一个时钟沿上被采集,固然这取决于数据是否在第一个触发器的时钟沿到达以前提早足够长时间有效。若是上述状况发生,那么会给系统带来严重后果,由于二进制地址中有些位变化有些位却没有,所以接收逻辑将会获得一个彻底无效的地址,这个地址既不是当前地址也不是上一个地址。

这个问题能够经过将二进制地址转换为格雷码来解决。格雷码是一种很是特殊的计数器,两个相邻地址中只有一个比特是不一样的。因此当地址改变时,只须要改变地址中的一个比特便可,这样就能够避免上面提到的问题。若是发生变化的那个比特并无被下一个时钟正确采集,地址线上会“同步地”保留旧的地址值。那么,任何不正确的地址(即既不是当前地址也不是旧地址)操做都被消除了。因此总结来讲,格雷码经常使用来在异步时钟域之间传递多比特计数值,且多用于FIFO内。

须要额外注意的一点是,因为只有读写地址是须要在异步时钟域之间传递,因此地址就有可能比预想的晚一个时钟周期,同时意味着空或者满标志置位晚一个时钟周期,可是这并不表示错误致使了数据溢出情况。若是这种状况在传递地址到读时钟域时,读逻辑将简单地认为数据没有写入,且将认为FIFO已空尽管此时FIFO已经被写入一个数据。这只会对总的吞吐率有一些小影响,可是不会致使下溢(即读已空的FIFO)情况发生。一样地,当地址被传递到写时钟域时,若是读地址被延时了,那么写逻辑会认为FIFO里没有多余空间,尽管此时FIFO还未满。这一样只会对总的数据吞吐率有些微小影响,却不会形成上溢(写已满的FIFO)发生。

FIFO是一种足够通用的模块,大部分FPGA供应商都提供了工具,可让客户根据本身的要求来自动产生软核。这些用户FIFO能够像其它IP模块那样由用户手动地在设计中例化。那么,在一个FPGA设计中使用本身的FIFO时,上述讨论的问题极可能将没必要由设计本身来解决。固然,一样的问题也常常在异步时钟域之间传递数据的时候发生,因此理解这类设计实践对于一个高级FPGA设计者来讲很是重要。

6.1.5 设计分区同步器模块

在顶层为设计划分好设计分区是一个好的设计实践行为,这样任何功能模块外面都包含一个独立的同步器模块。这样有利于在划分模块的基础上实现所谓的理想时钟域状况(即整个设计模块只有一个时钟),如图6-15所示。

图6-15:设计分区同步器模块

对设计进行分区有不少理由。首先,对每一个独立的功能模块进行时序分析变得简易,由于模块都是彻底的同步设计。其次,整个同步模块中的时序例外也很容易获得定义。再次,底层模块的同步器加时序例外在代入到设计顶层时,大大下降了因为人为失误形成的疏漏。因此,同步寄存器应该在功能模块外单独分区。还有不少相似的设计实践在使用FPGA做为ASIC的设计原型时获得应用,下一节咱们将再进行详细地讨论。

6.2 ASIC原型设计中的门控时钟

ASIC设计通常对功耗很是敏感,同时ASIC的时钟树设计又很是灵活,因此会在整个设计中常用门控时钟在逻辑不须要活动的时候来去使能这些逻辑。虽然使用FPGA做为ASIC的原型能够模拟整个逻辑功能,可是两者之间的有些物理属性,如功耗方面,仍是不太同样。那么,要求FPGA来模拟ASIC的整个低功耗优化是没有必要的。实际上,正是因为FPGA的粗放式的时钟资源,让其模拟这方面功能也是不太可能的。这一节咱们将讨论一些解决这个问题方法,而且再讨论一些能够应用于ASIC设计的技术来使FPGA原型设计更加容易。对于门控时钟更详细的容易能够参考前面第三章。

6.2.1 时钟模块

若是一个ASIC设计中使用了大量的门控时钟,建议将全部这些门控操做统一放在一个专门的时钟生成模块中,并与功能模块隔离,如图6-16所示。

图6-16:统一的时钟模块

经过将时钟门控置于一个单一的模块,不但能够是约束处理更简单,并且当要对FPGA原型进行任何修改时也更容易。例如,若是设计者选择某次编译时删除全部门控单元,那么一个单一的模块里很容易实现。下一节咱们将对此进行详细讨论。

6.2.2 时钟门控移除

有不少办法能够从FPGA原型里删除时钟门控,下面的例子就显示了一个很明显,但却也是很麻烦的一个方法。这个例子的代码以下所示,该代码是删除FPGA原型里全部的门控功能。

‘define FPGA

//‘define ASIC

module clocks_block(...)

‘ifdef ASIC

assign clock_domain_1=system_clock_1&clock_enable_1;

‘else

assign clock_domain_1=system_clock_1;

‘endif

若是上述代码须要开放时钟门控,那么在FPGA原型设计中只须要修改宏定义便可。不足之处是,任什么时候候要将FPGA原型转化为ASIC设计时老是须要作出一些修改(其实就是修改宏定义)。不少设计者对此会感受不是太舒服,由于他们认为两者使用的不是同样的RTL。一个更好的办法是使用一个自动门控删除工具来消除任何认为形成失误的可能。许多现代的综合工具经过正确的约束,如今都提供这项功能。例如,Synplify就有一个称为“Fix gated clocks”选项,就是用于自动地从时钟线上将门控操做删除,并将其移动到数据路径上。咱们来看下面这个代码示例:

module clockstest(

output reg oDat,

input iClk,iEnable,

input iDat);

wire gated_clock=iClk&iEnable;

always @ (posedge gated_clock)

oDat<=iDat;

endmodule

在上面的代码中,系统时钟被一个使能信号门控产生一个门控时钟。这个门控时钟被用于驱动触发器oDat,而oDat用于寄存器输入iDat。若是没有启用“fixing the clock gating”选项,那么综合工具将会直接实现逻辑功能,如图6-17所示。

图6-17:直接时钟门控

图6-17的逻辑实现中,在时钟线上放置了门控操做。那么设计中如今有了两个时钟域,必须分别对它们进行约束,并且必须分别将它们布局到时钟资源。可是,若是启动了时钟门控删除,这个逻辑门就会比较容易地被移动到数据路径上,如图6-18所示。

图6-18:时钟门控删除

如今大部分逻辑器件里逻辑单元都提供了一个时钟使能输入,有了该使能输入就能够不使用本方案。然而,若是一个特定的技术并未提供触发器时钟使能,那么只能使用本技术来删除时钟门控,只是这样就将会在数据路径上增长延时。

6.3要点总结

l  时钟同步问题一般是不可复现的问题,而且会给FPGA设计带来可靠性问题。

l  亚稳态会给FPGA带来灾难性故障。

l  相位控制技术在一个时钟频率是另一个的数倍且其中一个时钟能够由内部PLL或者DLL控制的时候使用。

l  打两拍技术可用于在异步时钟域之间同步单比特信号。

l  在打两拍同步器中,时序分析应该忽略第一个触发器,同时要确保两个同步触发器之间的延时最小。

l  FIFO用于在两个异步时钟域之间传递多比特信号。

l  格雷码用于在两个异步时钟域之间传递计数值数据,并且多用在FIFO内部。

l  同步寄存器应该在功能模块外面独立分区。

l  若是可能,请尽可能不要使用时钟门控。若必须使用,请将全部的门控时钟放置在一个专门的时钟模块中,并与其它功能模块隔离。

相关文章
相关标签/搜索