某年某月某日
我在知乎看到了多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是赛灵思官方认可的跨时钟处理,处理后不会有时序问题出现在时序报告中。
全部0条评论
快来发表一下你的评论吧 !