关于跨时钟域信号的处理方法

描述

某年某月某日

我在知乎看到了多bit信号跨时钟的问题,于是整理了一下自己对于跨时钟域信号的处理方法。

1,fifo

数据的话,直接用fifo

2,使用赛灵思原语XPM(Xilinx Parameterized Macros)


打开vivado -- tools -- language_templates,里面直接搜索XPM,相关的原语里会注释相应的用法和参数配置,对于不同场景的跨时钟,有不同的原语。


同步复位,XPM_CDC_SYNC_RESET


异步复位,XPM_CDC_ASYNC_RESET


脉冲信号,XPM_CDC_PULSE


单bit信号(电平信号),XPM_CDC_SINGLE


单bit信号数组,xpm_cdc_array_single

(这个用得较多,官方说数组的每1bit需不相关,即可以把多个不相关的单bit信号拼起来,用一个原语,甚至可以是上百bit位宽。

除了不相关的单bit信号,同一个多bit信号我也经常使用此原语,这种信号一般是跨时钟域的参数,在下发后保持不变,这样有助于时序收敛。)

格雷码同步器,利用了格雷码单次只能跳变1位的特性,要求输入的数据是累加1或者累减1的数据,本质上是单比特跨时钟域处理,xpm_cdc_gray

握手机制的跨时钟域总线数据同步,XPM_CDC_HANDSHAKE

3,只要是正确处理了跨时钟域的问题,也可以不用xpm,直接使用set_false,但xpm是赛灵思官方认可的跨时钟处理,处理后不会有时序问题出现在时序报告中。  

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

全部0条评论

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

×
20
完善资料,
赚取积分