异步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的更多相关文章

  1. FIFO深度

    async fifo的full和empty的判断: 1)binary进制,MSB相同时,LSB也相同,empty: MSB不同时,LSB相同,full 2)gray code,MSB相同时,LSB也相 ...

  2. 对Verilog 初学者比较有用的整理(转自它处)

    *作者: Ian11122840    时间: 2010-9-27 09:04                                                              ...

  3. 异步async、await和Future的使用技巧

    由于前面的HTTP请求用到了异步操作,不少小伙伴都被这个问题折了下腰,今天总结分享下实战成果.Dart是一个单线程的语言,遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞, ...

  4. flutter 异步async、await和Future的使用技巧

    由于前面的HTTP请求用到了异步操作,不少小伙伴都被这个问题折了下腰,今天总结分享下实战成果.Dart是一个单线程的语言,遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞, ...

  5. USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)

    此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...

  6. [C#] async 的三大返回类型

    async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...

  7. async & await 的前世今生(Updated)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  8. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  9. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

随机推荐

  1. UItableView自定义标题(headerView)重用问题

    在实现类似QQ列表的功能时,这样自定义了一个标题headerView 在实现类似QQ列表的功能时,这样自定义了一个标题headerView - (UIView *)tableView:(UITable ...

  2. 【Algorithm】堆排,C++实现

    对一个数组中的元素按照顺序构建二叉树,就形成了一个(二叉)堆.(二叉树是虚拟的,并不是真的建立二叉树) 表示堆的数组A有两个重要属性:A.heapSize,表示堆里面有多少元素,数组里有多少元素在堆里 ...

  3. HighCharts -教程+例子

    Highchart简介:   Highcharts是一款免费开源的纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,  Highcharts目前支持直线图 ...

  4. JS判断浏览器是否安装flash插件

    1.直接判断是否有flash插件 var myFlash = (function(){ if(typeof window.ActiveXObject != "undefined") ...

  5. linux matlab2013b 安装教程

    链接:http://pan.baidu.com/s/1pJE6R2b 密码:shfy 1. 解压缩“Mathworks Matlab R2013b Linux.rar”(无需密码),得到“Mathwo ...

  6. ubuntu14.04安装Docker

    Ubuntu在14.02开始就已经集成了Docker,要安装很简单:   1 2 3 4 sudo apt-get update sudo apt-get install docker.io sudo ...

  7. Medical image computing

    Processing and analysis of medical images using computer comprises the following: image formation an ...

  8. 又来了,SDE非直连

    现在sde都推荐直连了,没想到还是遇到了非直连. 用10.1默认是直连,但还支持非直连. 安装半天始终无法启动.系统差点崩了. 原来是sde用户密码过期锁定了,好烦. C:\Program Files ...

  9. 使用ajax请求,模态框调用并更改密码

    前端页面 <a href="javascript:void(0);" onclick="changPassword()"> <i class= ...

  10. max-min fairness 最大最小公平算法

    我们经常面临给一组用户划分稀有资源的问题,他们都享有等价的权利来获取资源,但是其中一些用户实际上只需要比其他用户少的资源.那么我们如何来分配资源呢?一种在实际中广泛使用的分享技术称作“最大最小公平分享 ...