• 异步FIFO


     1、一个模块(module)里面最好存在一个clk;因此在fifo_mem模块内只使用w_clk时钟,不使用r_clk时钟。

    2、为判断FIFO的空(empty)、满(full)状态,需将写操作指针(w_ptr)、读操作指针(r_ptr)进行比较,因此需要将w_ptr同步到r_ptr时钟域,以及将r_ptr同步到w_ptr时钟域;使用常用的两级寄存器进行寄存。
    3、读写地址(w_addr、r_addr)使用二进制,读写指针(w_ptr、r_ptr)因为需要同步到异步时钟域上,因此使用格雷码。
    4、由二进制转换为格雷码的逻辑:gray_code = (bin_code << 1) ^ bin_code。
    5、空(empty)、满(full)状态的判断都是同步比较w_ptr与r_ptr是否相同;为了确定是empty还是full,w_ptr、r_ptr需要比w_addr、r_addr多一位;当w_ptr与r_ptr所有位都相同时,则表明FIFO为empty,当w_ptr与r_ptr最高位(MSB)和次高位(2'MSB)不同,其余位都相同时,则表明FIFO为full。
    6、异步FIFO的原理框图如下:
     
  • 相关阅读:
    静态与非静态(转改)
    关于odp.net的FetchSize属性
    SQL_SERVER 导oracle(转)
    win7电脑上wifi
    Oracle对象统计信息
    SQL_SERVER 连接oracle(转)
    linq in 语法
    关于引擎的设计
    温习设计模式
    技巧类
  • 原文地址:https://www.cnblogs.com/chenman/p/3624375.html
Copyright © 2020-2023  润新知