zoukankan      html  css  js  c++  java
  • 【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 ,但是不推荐这种做法。

  • 相关阅读:
    Linux 磁盘挂载和mount共享
    Socket编程实践(8) --Select-I/O复用
    JavaScript 作用域链图具体解释
    扩展MongoDB C# Driver的QueryBuilder
    Gray Code
    Android网络编程Socket【实例解析】
    设计模式之:代理模式
    LOL英雄联盟代打外挂程序-java实现
    MySQL系列:innodb源代码分析之线程并发同步机制
    linux压缩打包
  • 原文地址:https://www.cnblogs.com/streetlive/p/12862969.html
Copyright © 2011-2022 走看看