异步fifo设计注意事项有哪些(陈设设计)

近日学习用到异步FIFO,故写下这篇博客记录学习心得。在我看来,异步FIFO的设计注意事项大体分为两点:亚稳态的处理空满状态的判断第一,来说一下亚稳态。亚稳态是指触发器无法在某个规定时间内达到一个可确认的状态。在FIFO的设计中,产生的原因主要由两点:一是逻辑电平的误判,也就是如果通过二进制作为指针来判断空满状态,因二进制数值变化引起的位数变化大,对电路的危害也随之增加,故在本设计中使…

大家好,又见面了,我是你们的朋友全栈君。

近日学习用到异步FIFO,故写下这篇博客记录学习心得。
在我看来,异步FIFO的设计注意事项大体分为两点:

  1. 亚稳态的处理
  2. 空满状态的判断

第一,来说一下亚稳态。亚稳态是指触发器无法在某个规定时间内达到一个可确认的状态。在FIFO的设计中,产生的原因主要由两点:一是逻辑电平的误判,也就是如果通过二进制作为指针来判断空满状态,因二进制数值变化引起的位数变化大,对电路的危害也随之增加,故在本设计中使用个格雷码。二是信号和时钟之间不满足要求,即建立时间和保持时间未满足,在这里通过打两级寄存器来消除亚稳态使信号稳定。

第二,关于空满状态的判断,常使用的方法为附加位比较法。对于二进制指针而言,FIFO的满状态时写指针比读指针多循环了一次,而且两个数只是最高位不同,其余各位都相同。那么我就可以这样判断,如果读指针和写指针的最高位不同,而其他位都相同时,此时的状态为满状态。FIFO的空状态时写指针和读指针相同,那么此时读指针和写指针相等。这样读指针和写指针就变成了一个n位指针,其中低n-1位时用来存放FIFO存储器的地址,可以用来对2^(n-1)个存储单元寻址,而最高位则用来辨别空满状态。

但是格雷码在判断空满状态时和二进制有出入。当格雷码由7到8时(0100到1100),可以看到指针的附加位改变,但是地址位并未变化,这是因为格雷码是一种镜像码造成的。所以我们需要附加位和地址位分开循坏,此时就需要既能产生n位格雷码又能产生n-1位格雷码的计数器,这种计数器被称为“两重格雷码计数器”。格雷码指针的空状态也是判断读指针和写指针是否相等。但是判断满状态和二进制指针有很大不同。首先应该明白数据存入的顺序并不是按照000递增开始的,而是随机的。例如一次写入数据是从十进制的地址6开始,连续写入8个数据,地址指向14,这是存储器存满8个数据,应该产生满状态输出。地址6的格雷码0101,地址14的格雷码1001。假如从十进制的地址2开始,结束地址指向10,此时地址2的格雷码为0011,地址10的格雷码为1111,观察两次例子,起始地址和结束地址的格雷码后两位都相同,前两位的异或值相等,并且起始地址和结束地址的首位是不同的。那么4位格雷码判断满状态就可以分为3步:首先后两位相同,然后前两位的异或值相等,最后首位不同。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129143.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 两个求和符号相乘_excel输入次方符号

    两个求和符号相乘_excel输入次方符号在机器学习中,经常会遇到有含有两个求和符号的公式,如,∑i=1M∑j=1N\sum^M_{i=1}\sum^N_{j=1}∑i=1M​∑j=1N​,一开始,我总是不能够理解这是一种怎样的运算,后来看到下面的解释觉得自己顿悟:有两个∑\sum∑的时候就有两个变量,是一个不变的情况下另一个从头到尾改变,然后之前那个再变一下,第二个再从头到尾变,一直到第一个变量变到最后,把这个过程中的项加起来!…

    2022年10月12日
  • 查看Linux系统版本内核命令大全

    查看Linux系统版本内核命令大全目录命令一:查看当前系统发行版本详细信息命令二:查看当前系统内核信息命令三:查看当前系统版本信息命令四:查看CPU相关信息命令五:查看系统位数Linux系统内核、发行版本有很多,那么如何查看当前Linux系统的内核信息、Linux系统发行版本等信息呢?Linux百科网分享查询Linux系统详细信息的方法:命令一:查看当前系统发行版本详细信息LSB是LinuxStandardBase的缩写,lsb_release命令用来显示LSB和特定版本的相关信息执行命令:lsb_

    2022年10月12日
  • Java——流

    Java——流

  • Zuul网关调优「建议收藏」

    Zuul网关调优「建议收藏」网关的大部分工作是请求转发,属于IO密集型的应用,我们要在有限的资源的情况下结合公司实际请求场景做调优。一,容器选择在容器方面,undertow的呼声很高,一个是他很轻量级的,其次他属于java开发,性能也很好,笔者根据实际情况对tomcat和undertow做了一个对比默认配置下,8核cpu,tomcat启动后会初始化10个io线程,而undertow会初始化72个线程,8个IO线程,64个work线程(8*8)性能对比:写一个接口,接口中什么也不做,就睡眠2s请求个数

  • Js中sort()方法

    Js中sort()方法

  • 安卓手机如何查看分辨率_读取屏幕内容的安卓软件

    安卓手机如何查看分辨率_读取屏幕内容的安卓软件本文主要解决获取手机屏幕的大小:例子很简单,主要通过DisplayMetrics类来获取相关的信息,代码如下效果图:XML文件1.activity_main.xmlxmlns:tools=”http://schemas.android.com/tools”android:layout_width=”match_parent”android:layout_height=”match_pa…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号