首页 > 技术知识 > 正文

某年某月某日

我在知乎看到了多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是赛灵思官方认可的跨时钟处理,处理后不会有时序问题出现在时序报告中。

审核编辑:彭静

猜你喜欢