async fifo
异步fifo,解决跨时钟域的数据传输问题。
由binary,gray两种counter组成,在读写domain之间,只传输gray code。
主要的设计难点在empty和full的产生中。
empty信号在read domain中产生,full信号在write domain中产生。
fifo设计框图:

ptr表示读写的gray编码地址,ptr之间的cdc,完成empty和full信号的有效生成。
中间的双口ram,接收读写addr/data。
Binary counter会出现多位变化,所以多使用gray counter。尽管gray counter只能应用在2^n深度中。
Gray-binary的conversion

binary-gray的conversion

异步FIFO中的两种结构:
1)只含一个寄存器

2)含有两个寄存器,但是少一个conversion的逻辑

gray到binary的转换主要是为了进行自加运算。
在empty和full信号的产生过程中,需要增加一比特来进行判断。如4bit的ptr,只有下三位用于计数,
最高位用于循环,在wptr[2:0]=rptr[2:0]时,根据wptr[4]和rptr[4]的值来判断full和empty。
但是当fifo中使用gray code来判断full/empty时,就无法用这个方法。
所以实际中,可以维护两个gray counter,一个Nbit,一个N-1bit。
N-ibit来进行判断低位的数据地址,高位N-1判断empty和full。
由于gray编码的如下特性:

可以将这两个gray counter合并,dual-nbit counter。
在7--->8和15--->0的转变中,会有两位的bit变换,不是标准的gray counter。
在实现中,可以通过case建模的binary到gray转换来实现。
当异步fifo两侧是faster--->slow,可能会出现sync gray code增加了两次才被slow clock采样到,
但这并不会出现multi-bit cdc 的错误。
因为本质上,sync gray code还是一位的变化,只是上一次未被采样而已,并不会造成各个信号
在clock沿附近,出现不同glitch的情况。
同样的当异步fifo两侧,faster--->slow,不会因为full-state的不及时,出现overflow,也不会因为
empty-state的不及时,出现underflow。
因为full状态在write domain产生,在faster--->slow的情况中,wptr的更新是及时的,
同样的empty状态在read domain,在faster---slow的情况中,不会出现empty情况,
如果是在slow---faster的情况下,rptr的更新也是及时的。
但是empty和full的deassert可能会由于同步通信,产生滞后,导致fifo效率降低,这是不能避免的。
async fifo的更多相关文章
- FIFO深度
async fifo的full和empty的判断: 1)binary进制,MSB相同时,LSB也相同,empty: MSB不同时,LSB相同,full 2)gray code,MSB相同时,LSB也相 ...
- 对Verilog 初学者比较有用的整理(转自它处)
*作者: Ian11122840 时间: 2010-9-27 09:04 ...
- 异步async、await和Future的使用技巧
由于前面的HTTP请求用到了异步操作,不少小伙伴都被这个问题折了下腰,今天总结分享下实战成果.Dart是一个单线程的语言,遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞, ...
- flutter 异步async、await和Future的使用技巧
由于前面的HTTP请求用到了异步操作,不少小伙伴都被这个问题折了下腰,今天总结分享下实战成果.Dart是一个单线程的语言,遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞, ...
- USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)
此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...
- [C#] async 的三大返回类型
async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...
- async & await 的前世今生(Updated)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- [.NET] 利用 async & await 的异步编程
利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html 目录 异步编程的简介 异 ...
- [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html ...
随机推荐
- Windows下 使用CodeBlocks配置OpenGL开发环境
CodeBlocks版本:13.12 下载OpenGL配置文件 1.glut.dll glut32.dll放入系统盘Windows\System32文件夹 2.glut.h放入CodeBlocks安装 ...
- C++内嵌汇编代码,简单文件加密
#include <iostream> #include <fstream> using namespace std; int main(int argc, char* arg ...
- node.js express的安装过程
1.配置nodejs的环境变量之后执行 npm install -g express 命令: 2.如果版本为4.x需要再次执行 npm install -g express-generato ...
- NodeJS模块的使用
在NodeJS中,每个js文件就是一个模块,而文件路径就是模块名, 在编写每个模块时,都有require.exports.module三个预先定义好的变量可供使用. require函数用于在当前模块中 ...
- 在express项目中有效组织和使用mongoose
平凡之路 1.创建express项目 express mongooseExpress 2.最简express var express = require("express"); v ...
- ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题
原文:ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 问题:如果在地图上加载成百上千工程点时,会密密麻麻,外观不是很好看,怎么破? 解决方法: ...
- HTTP 协议的历史演变和设计思路
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- ASP.NET MVC 中将数据从View传递到控制器中的表单提交法
本方法以搜索功能为例,在view中输入要搜索的关键字,提交到相应controller中进行处理. view中代码: <div class="searchBox"> @u ...
- 系统UITabBar属性设置
设置背景: [_tabBar setBackgroundImage:[UIImage imageNamed:@"bg_tabbar"]]; 设置某个Item选中的效果: _tabB ...
- 英特尔15天开发IDF硬享公社App全过程
4月8日英特尔智能硬件大赛在上海决赛,4月13日英热尔智能硬件大赛10强在深圳首秀.英特尔辗转两大城市来顾全两地智能硬件创业者,移动直播就成了用户们最重要的观看渠道. 这次英特尔两大会事现场直播都在官 ...