我是靠谱客的博主 长情毛巾,最近开发中收集的这篇文章主要介绍FPGA设计高级技巧(四)1.多bit信号跨时钟域同步处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

 

1.多bit信号跨时钟域同步处理

1.1多bit信号融合

1.2多周期路径规划


1.多bit信号跨时钟域同步处理

当在时钟域之间传递多bit数据时,普通的同步器并不能保证数据传递的安全性。在多时钟的设计中,工程师会犯一个错误即同一事务处理含有需要从一个时钟域向另一个时钟域传递的多位跨时钟数据,并忽略了同步采样这些跨时钟位的重要性。

跨时钟域传递多bit信号的问题是:在同步多个信号到一个时钟域时将可能偶发数据变化歪斜(skew),这种数据变化歪斜最终会在第二个时钟域的不同时钟上升沿上被采集。即使能够完美地控制和匹配这些多bit信号的走线长度,但随着芯片衬底工艺不同,上升和下降的时间也会不一样,这些因素都会产生足够的skew导致在精心匹配的多条信号上采样失败。

为避免这种多bit跨时钟域信号上的采样skew,需掌握以下策略:

a)多bit信号融合策略,即在可能的情况下,将多bit跨时钟域信号融合成单bit跨时钟域信号

b)多周期路径规划策略,即使用同步加载信号来安全地传递多bit跨时钟域信号。

c)使用格雷码传递多bit跨时钟域信号。

1.1多bit信号融合

上图中,在接收时钟域有一个寄存器,它需要一个加载(load)信号和一个使能(enable)信号来加载一个数值到寄存器。如果load和enable在发送时钟域的同一个时钟沿被驱动有效(即两个控制信号需要同时有效),那么这两个控制信号之间就有可能存在产生一个小歪斜的机会,这就可能导致在接收时钟域中这两个信号被同步到不同的时钟周期,在这种情况下,数据是不能被加载到寄存器的。

解决上述的问题就是将load和enable两个控制信号融合成一个单bit控制信号(这两个控制信号本身相同,且同时有效),如下所示,单bit控制信号同步到接收时钟域后作为一个“加载使能”信号同步驱动寄存器的加载和使能输入端口。

在来看下面一个例子:

在发送时钟域先后有两个enable(注意不同于之前的同时有效),同步到接收时钟域用于控制两级流水寄存器寄存数据。问题是在第一个时钟域中,B_en1控制信号正好稍微在B_en2有效前结束有效,这就导致在接收时钟域时钟上升沿采集B_en1和B_en2脉冲时产生一个细微的缝隙。上图中,同步后两个使能控制信号间隔了两个时钟周期,而不是流水一个时钟周期。这样导致数据a2没有及时加载到第二个寄存器。(上图中的第二个使能信号推迟了一个时钟周期,数据a2如果能够保持有效,应该在第二个使能有效的时候加载进第二个寄存器,但上图并未显示出来)。

解决方法如下,首先是在发送时钟域将两个使能控制信号融合为一个控制信号,其次是要增加一个额外的寄存器将同步后的使能控制信号寄存一拍,主要数据和控制信号形成匹配的流水(将同步后的控制信号在同步时钟域寄存一拍来产生第二级寄存器的使能信号)。

1.2多周期路径规划

多周期路径规划是一种通用的安全传递多bit跨时钟域信号技术。多周期路径规划是指在传输非同步数据到接收时钟域时配上一个同步的控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域,使用此同步后的控制信号来加载数据,这样数据就可以在目的寄存器被安全加载。

最后

以上就是长情毛巾为你收集整理的FPGA设计高级技巧(四)1.多bit信号跨时钟域同步处理的全部内容,希望文章能够帮你解决FPGA设计高级技巧(四)1.多bit信号跨时钟域同步处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部