异步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步:首先后两位相同,然后前两位的异或值相等,最后首位不同。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网站前端和后台性能优化21

    网站前端和后台性能优化21

    2022年3月13日
    43
  • python多线程与多进程及其区别

    python多线程与多进程及其区别个人一直觉得对学习任何知识而言,概念是相当重要的。掌握了概念和原理,细节可以留给实践去推敲。掌握的关键在于理解,通过具体的实例和实际操作来感性的体会概念和原理可以起到很好的效果。本文通过一些具体的例子

    2022年7月3日
    29
  • STM32项目设计:基于STM32F4的电子阅读器制作教程[通俗易懂]

    STM32项目设计:基于STM32F4的电子阅读器制作教程[通俗易懂]基于STM32F4的电子阅读器一、项目功能要求项目说明:项目偏软件,但是要依赖于自己对硬件的熟悉和驱动才能完成用到的主要技术:SD卡驱动(难–不过可移植SD卡驱动细节可在用完再了解其驱动协议)FatFs文件系统移植使用LCD屏驱动(加载字库文件做字库在LCD上的显示)功能要求:开机Logo电子书列表扫描电子书列表显示及小说选择菜单阅读功能:字体选择字体大小选择字体颜色设置阅读背景设置书签设置能够记录每本电子书的退出时处于什么阅读位置下

    2022年9月27日
    3
  • PyCharm设置改变字体大小的快捷键

    PyCharm设置改变字体大小的快捷键File->Settings在搜索框搜索increase点击IncreaseFontSize(增大字体)右键选择AddMouseShortcut然后按Ctrl并且鼠标滚轮往上滚。同理可以设置减小字体【设置减小字体时,在搜索框内输入decrease】转载于:https://www.cnblogs.com/Will-guo/p/6308991.h…

    2022年8月29日
    3
  • MFC学习——下检测计算机是否联网

    MFC学习——下检测计算机是否联网一个最简单的类方法:Bool IsNetworkAlive( __out LPDWORD lpdwFlags);返回TRUE表示联网,FALSE表示未连接到网络。使用时注意在头文件中加入如下代码:#include <Sensapi.h>#pragma comment(lib, “Sensapi.lib”)函数使用举例: DWORD ws;…

    2022年8月18日
    15
  • Java项目的创建以及注意事项「建议收藏」

    Java项目的创建以及注意事项「建议收藏」Java项目的创建以及注意事项一,创建JavaProject方法1,在左边空白处右键,然后选择new,再点击JavaProject。方法2,点击左上角的File,然后选择new,再点击JavaProject二,给project项目命名,然后点击finish三,打开Test,然后右…

    2022年7月8日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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