赞
踩
书※目:FPGA深度解析_第七章_樊继明著
高级FPGA设计结构、实现和优化_第六章_孟宪元译
建立时间:输入信号在时钟上升沿来临之前,应该保持数据稳定的最短时间,否则数据不能被正常采样;
保持时间:输入信号在时钟上升沿来临之后,数据保持稳定的时间,否则数据不能被正常传输。
对于时序电路,在不同时钟域之间进行数据传输时,因为异步时钟沿可能在任何时刻到来,当寄存器输出的信号无法满足建立时间和保持时间时,输出端的信号极有可能出现亚稳态现象。这是一个充分不必要条件,因为出现亚稳态现象,不一定是因为时序不满足建立和保持时间,也有可能由半导体工艺或者芯片在不同的环境下工作导致信号从亚稳态回到稳定状态的时间长短不一样。
在图1.2中,跨时钟域信号b分别经过三个组合电路输入到异时钟域,由于每个组合逻辑电路的延迟不一样,导致信号到达目标位置时的时钟偏移也不一样,所以三条路径都有可能产生亚稳态。如右侧时序图可以知道,在某个时钟沿来临时,D1的输入端数据已经稳定,D1可以输出正确的逻辑电平;D2的输入端是在时钟沿来临之后才建立稳定的数据,因此c2比c1落后一个时钟周期,并且丢失了一个时钟时钟周期的宽度;D3的输入端在时钟沿附近发送跳变,c3很可能产生亚稳态,并经历了一个时钟周期后才建立起正确的电平。
在图1.3中,跨时钟信号没有经过组合逻辑,而是直接经过布局布线连接到多个异时钟域目标区域,本质上和图1.2没区别,依然可能发送亚稳态。
在图1.4中,跨时钟域信号在b2时,发生亚稳态现象。b2经过三条路径传输。由于亚稳态在不同的传输路径中收到的电气影响不同,假设c1受电源噪声影响迅速上升为高电平,c2受工艺影响落回低电平,c3继续传输了亚稳态,那么c3经过触发器之后,输出逻辑是不可预测的,可能是0,可能是1,也可能继续是亚稳态。
因此,异步信号无论是先经过多径传输至新的时钟域中,还是先传输到新的时钟域在经过多径传输,最终的结果并没有本质上的区别(一个时钟周期延时的区别)。因此需要经过处理之后,才能保证输出信号的一致行为。
在单bit信号的跨时钟域传输处理中,可以使用两级触发器进行同步,注意,是处理单bit的信号。
在图2.1中,信号c依然可能会产生亚稳态。在图2.2中,在T0时刻,信号b处于亚稳态,此时D2还没有采到任何数据,维持原来的状态,在T1时刻,D1的输入信号b已经维持稳定的电平,c输出一个逻辑正确的电平;对于D2来说,T1时刻,c的状态可能已经恢复稳定的电平,也可能是亚稳态,所以此时的d的电平是难以确定的。但在T2时刻,c的信号已经稳定,所以D2是能输出正确的逻辑电平的,即d是正确稳定的电平。
注意:使用两级触发器对异步信号进行同步处理只能减少亚稳态产生的概率,无法彻底消除亚稳态的现象,即d端仍有可能输出出现亚稳态现象。
在单bit信号的跨时钟域同步处理时,如果一个时钟的周期和另一个时钟周期有倍数关系,并且其中一个时钟可以由内部PLL或DLL控制时,进行相位匹配处理可以消除时序冲突。但是一般不奢望能控制时钟域的相位关系。
前面讨论了亚稳态信号的多径传输,这个问题在寄存器同步链中同样存在,在图2.3中,由于信号b分别经过不同的路径传输到同步触发器上,由于布线延迟的不一致,无法保证同时到达d1、d2、d3,这可能导致电路行为不一致的后果,造成电路功能异常会带来不必要的调试时间成本。
针对这个问题,可以先对信号b进行同步,再分发。
与单一跨时钟域信号的多径传输不同,跨时钟域组合逻辑信号的同步化是指多个异步信号先经过组合逻辑,再由寄存器同步链同步。
由2.5图可以看出,由于b1、b2、b3信号的各个跳变沿时刻不一致,导致输入到同步链的信号翻转率大大提高,从而导致同步后的数据故障概率提高。
改为寄存器输出的好处是减低了数据的翻转率,并且不会出现毛刺信号和短脉宽信号。
当信号从快时钟域同步到慢时钟域时,有可能造成信号的丢失,如图2.8所示,信号b在慢时钟域内,导致慢时钟无法采集到该数据。在图2.9中,由于信号b的维持时间在慢时钟域一个周期对齐,依然满足不了建立和保持时间的要求,依然无法采集正确的数据。
在处理这种脉冲宽度不够的一个做法是,想办法把脉冲宽度扩充,大到可以被慢时钟域采集,那么多大合适,一般宽度达到1.5个慢时钟周期,就能正常采集到数据。如图2.10所以,引入反馈信号,当信号b发送电平跳变时,跳变后的逻辑电平一直高电平,因此,在clk2时钟域有足够的时间对信号b进行捕捉。信号b完成同步后,通过寄存器同步链反馈回clk1时钟域,当clk1时钟域检测到信号b的高电平已经传输至ack2时,信号b返回低电平,完成信号的传输。
采用反馈电路处理跨时钟域信号的好处是明显的,任何时候都不担心信号丢失,但是这种依赖于clk1和clk2会存在一种隐患,就别人使用这个程序时,时钟域都和原来的不一样,导致电路发生灾难性错误。同时电路需要反馈信号来判断合适改变信号b,导致信号b的操作周期变长,即速度变慢了。
异步FIFO的可以参考我的另一篇博文(点击直达)。异步FIFO是处理多bit数据跨时钟域处理的一个常用方法,其中注意的是格雷码计数器的应用。
双口RAM在应用上,与FIFO类似,不同的是使用双口RAM是,需要设计者自己设计握手信号的产生、同步和握手。在一般的应用中,可以把RAM地址划分为高地址空间和低地址空间,在设计中,通过对某一地址进行比较,并判断双口RAM中的数据量情况,以此控制双口RAM的读/写。
双口RAM除了需要自己管理地址以及流水线信号的产生外,控制方式本质与FIFO无太大区别。
作者:xlinxdu
版权:本文是作者整理的读书笔记,部分素材来源于参考教材或其他,侵权联系删。
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。