【FPGA技巧篇四】FPGA设计的四种常用思想与技巧之四 :数据同步化

欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章

 

1 输入数据同步化的原则

(1)如果输入数据的节拍和本级芯片的处理时钟同频,可以直接用本级芯片的主时钟对输入数据寄存器采样, 完成输入数据的同步化;

(2)如果输入数据和本级芯片的处理时钟是异步的,特别是频率不匹配的时候,则只有用处理时钟对输入数据做同步化处理,才能完成输入数据的同步化。

2 同步化方式

复位:

  异步复位同步释放

数据:

  1. 单比特数据:打两拍进行同步

  2. 多比特数据:2.1 采用握手机制保证数据稳定

                                 2.2 RAM 或 FIFO

3 详述

数据打两拍的方法

需要说明的是,用寄存器对异步时钟域的数据进行两次采样,其作用是有效防止亚稳态 ( 数据状态不稳定 ) 的传播,使后级电路处理的数据都是有效电平。但是,这种做法并不能保证两级寄存器采样后的数据是正确的电平,这种方式处理一般都会产生一定数量的错误电平数据。所以仅仅适用于对少量错误不敏感的功能单元。

为了避免异步时钟域产生错误的采样电平,一般使用 RAM 、 FIFO 缓存的方法完成异步时钟域的数据转换。最常用的缓存单元是 DPRAM ,在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,这样就非常方便的完成了异步时钟域之间的数据交换。

把数据存放在 RAM 或 FIFO 的方法

将上级芯片提供的数据随路时钟作为写信号,将数据写入 RAM 或者 FIFO ;然后使用本级的采样时钟将数据读出来即可。

这种做法的关键是数据写入 RAM 或者 FIFO 要可靠

如果使用同步 RAM 或者 FIFO ,就要求应该有一个与数据相对延迟关系固定的随路指示信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。

对于慢速数据,也可以采用异步 RAM 或者 FIFO ,但是不推荐这种做法。

原文地址:https://www.cnblogs.com/streetlive/p/12862969.html