关于FPGA中跨时钟域的问题分析

可编程逻辑

1366人已加入

描述

跨时钟域问题(CDC,Clock Domain Crossing )是多时钟设计中的常见现象。在FPGA领域,互动的异步时钟域的数量急剧增加。通常不止数百个,而是超过一千个时钟域。让我们来评估为什么跨时钟域问题(CDC,Clock Domain Crossing )是一个长期存在的问题,它的影响以及可用的补救指导原则来确保FPGA设计的可靠性。

只要数据从由一个时钟驱动的触发器传输到由另一个时钟驱动的触发器,就会发生跨时钟域问题(CDC,Clock Domain Crossing )的问题。 CDC问题可能会导致ASIC和FPGA器件出现大量故障。 CDC的后果是亚稳态效应,导致功能性非确定性(下游数据的不可预测性,并且这中现象也有可能会导致数据丢失)或者出现数据不一致性的现象(当CDC在总线信号的子集上跨域发送的延迟等待时间,导致出现不一致的捕获事件)。

通过并行切换输入数据和采样时钟(在上图中底层门电路的并行切换窗引入泄漏电流),任何触发器都可以进入这种状态。减缓亚稳效应的已知方法是使用同步器。同步器可以定义为对异步信号进行采样并输出与本地采样时钟同步的推导信号的逻辑实体。它通常不合成,而是在设计中预先实例化或呈现为宏形式。一个好的同步器应该是可靠的,具有低延迟,低功耗和低面积的影响。同步器最简单的实现是使用两个背靠背的触发器。第一个触发器将异步输入信号采样到新的时钟域,并等待整个时钟周期以允许任何亚稳态稳定下来。第一级的输出信号被同一时钟采样送到第二级触发器中以产生稳定而同步的输出。

数据同步器 - 有两种基本方法可用于通过时钟域边界传输数据信号。第一种基于接收域中的使能控制数据捕获,第二种基于使用双端口FIFO顺序对数据写入和读取。基于控制的数据同步器 - 在这种类型的同步器中,使能信号负责通知接收域数据是稳定的并且可以被捕获。发送器负责在数据使能有效期间内保持数据稳定。接收数据捕获期间所有数据位的稳定性保证了亚稳态效应的不存在以及能进行正确的数据捕获。

为了实现安全的数据采集,基于控制的数据同步器应该使发送器数据稳定,不仅在使能信号断言(assertion)期间,而且还包括数据建立/保持裕量以保持稳定。这是防止数据捕获过程中出现故障的关键。这种方式被用于基于握手的数据同步器中。

基于FIFO的数据同步器- 基于控制的数据同步器具有有限的带宽,而基于FIFO的数据同步器可以增加整个接口的带宽并保持可靠地通信。它还允许通过时钟域边界进行快速地数据通信。使用发送器时钟将数据压入FIFO,并使用接收器时钟从FIFO中取出数据。 FIFO_FULL控制信号管理驱动器写入频率,而FIFO_EMPTY控制接收器读取频率。

复位同步器 - 复位信号必须在解除断言(assertion)阶段同步,以防止寄存器以损坏的值进入亚稳态。复位信号边沿可以同步(完全同步)或者只有一个(部分同步)。具有异步复位的时序元件可能会收到全部或者部分同步复位信号,但是针对具有同步复位的顺序元件应该使用完全复位同步器。FPGA设计中的同步器

在FPGA设计中,在实现同步器时应遵守一些安全准则:避免使用半周期同步器,它通常依赖于第二阶段触发器使用反向时钟边沿,因此它为时钟实现增加了额外的资源和复杂性。

触发器(flip-flops)(称为NDFF,表示2个或更多触发器)应仅使用来自触发器FPGA资源,并应在合成过程中保留和不触被触发,包括无边界重定时。对于CDC优选使用亚稳态硬化宏。不允许移位寄存器或者BRAM,因为它们可能会导致故障。 NDFF的放置应位于同一片内,以尽量减少触发器间的传播延迟,从而减少潜在的亚稳效应。

在时序关键的高速FPGA设计中,关键是要避免在控制或者数据CDC上使用组合逻辑。由于这个原因,应该避免基于多路复用器的数据同步器。不应在同步器阶段或者CDC之间注入组合逻辑。即使在一个或多个寄存器阶段之后,也要确保接收域中没有时钟再收敛。也可以使用符合数据传输速度需求的同步器。对于IP开发人员来说,最好在IP设计中包含CDC转换,避免功能块之外的不受控制的数据延迟。

基于FPGA的供应商(赛灵思,英特尔)流使用属性保留用于指示NDFF触发器结构。该属性将根据流程中的基础工具的提示作出相应的反应。它会触发综合工具在同步触发器上应用“dont_touch”,并指示放置工具将这些触发器放置在靠近一个切片的位置,尽管不一定要在切片中执行所有的同步器。将关键的SDC约束(如set_max_delay)而不是set_false_path应用于接口的CDC相关的时序路径中。下游工具对属性的响应方式也有所不同,例如根据所使用的供应商解决方案的不同X状态生成处理。时序分析也需要通过设置适当的约束来考虑从上游驱动器触发器到该NDFF结构的路径。

对于非时序关键的FPGA设计,使用BRAM而不是驱动触发器阵列,直接连接到另一个时钟域的接收触发器中。为了避免在数据传输过程中出现毛刺,BRAM的输出在启用信号断言(assertion)期间应保持稳定(建立和保持足够的余量)。

内置FIFO生成器,例如Xilinx的LogicCORE IP FIFO Generator,可用于实现安全的基于FIFO的FPGA数据同步器。生成的FIFO应配置独立的时钟进行读写操作。对于定制的FIFO,重要的是检查跨越时钟域的读写指针是否被正确编码,只有一个位改变时间(就像Greycode一样)并通过断言(assertion)进行验证。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分