跨时钟域处理是FPGA设计中经常遇到的问题,对于每个FPGA初学者来说,如何处理跨时钟域之间的数据都可以说是必修课。如果您还是学生,则全天候域名处理也是面试中的常见问题。在这里,我们主要介绍三种跨时钟域处理方法。这三种方法可以说是FPGA行业中最常用和最实用的方法。这三种方法包括单位和多位数据的跨时钟域处理。了解这三点招聘后,就可以轻松完成与FPGA相关的跨时钟域数据处理。此处介绍的三种方法可用于跨时钟域的处理:双拍;异步双端口RAM;格雷码转换。 01方法1:拍两个拍子每个人都清楚存在跨时钟域的单位和多位数据处理,并且在处理单个位的跨时钟域问题中通常使用双拍方法数据。进行两次拍摄的方法实际上是简单地说,就是定义一个两级寄存器来扩展输入数据的拍摄。如下所示。很多人应该问,为什么是两拍?一拍三拍可以工作吗?让我们简要地讨论下两个寄存器级别的原理:这两个注册级别是注册级别的平方。这两个级别不能完全消除亚稳态危险,但可以提高可靠性并降低发生的可能性。一般来说,第一级的概率很高,而第三级的提高并不大。这样,许多人可能无法完全理解它,因此请参见下面的时序图:数据是时钟域1的数据,需要将其传输到时钟域2(clk)进行处理。寄存器1和寄存器2使用clk。 。假设clk的上升沿刚好是数据的过渡沿(从0变为1的上升沿,实际的数据过渡不可能是瞬时的,因此过渡时间很短),则应将其用作寄存器1。输入是0还是1?这是一个不确定的问题。因此,无法确定Q1的值,但至少可以保证在clk的下一个上升沿,Q1基本可以满足二级寄存器的保留时间和建立时间要求,并且亚稳态的概率为得到了很大的改善。如果添加第三级寄存器,由于第二级寄存器极大地改善了亚稳状态的处理,因此可以说第三级寄存器在很大程度上只是第二级寄存器的扩展。所以意义不大。 02方法2:异步双端口RAM用于跨时钟域处理多位数据。通常,使用异步双端口RAM。假设我们现在有了一个信号采集平台。 ADC芯片提供60MHz的源同步时钟。 ADC芯片输出的数据在60MHz时钟的上升沿改变。 FPGA需要使用100MHz时钟来处理ADC(多位)收集的数据。在这种类似的情况下,我们可以使用异步双端口RAM进行跨时钟域处理。首先使用ADC芯片提供的60MHz时钟将ADC输出的数据写入异步双端口RAM,然后使用100MHz时钟从RAM读出数据。我相信每个人都可以理解使用异步双端口RAM跨时钟域处理多位数据。当然,在异步双端口RAM可用于处理跨时钟域的情况下,异步FIFO也可用于实现相同的目的。 03方法3:格雷码转换我们将继续使用第二种方法中使用的ADC示例。当将ADC采样的数据写入RAM时,我们需要生成RAM的写地址,但是当我们读取RAM中的数据时,绝对不会在电源打开后立即直接读取,而是在等待之后读取RAM用于RAM中的ADC数据。这需要一个100MHz的时钟来判断RAM的写地址,并在写地址大于某个特定值时读取RAM。在这种情况下,许多人实际上使用100MHz时钟和RAM写地址直接进行两次拍,但RAM的写地址是多位的。如果您只拍了两下,就不能保证写出来。地址数据的每一位都在100MHz时钟域中同步,并且必须有一个序列。如果在低速环境中不一定要犯错误,则在高速环境中可能无法保证。因此,更合适的方法是使用格雷码转换。对于格雷码,两个相邻数字之间只有一位不同(格雷码,本文中未详述),如果您先将RAM写入地址转换为格雷码,然后更改wr的格雷码
