社区首页 >问答首页 >异步不对称FIFO在VHDL合成中的应用

异步不对称FIFO在VHDL合成中的应用
EN

Stack Overflow用户
提问于 2013-07-15 04:32:35
回答 2查看 2.4K关注 0票数 0

我用VHDL设计了一个非同步的非对称fifo,constructs.It是以深度和prog_full为参数的通用fifo。它有32位的16位输出数据宽度.您可以找到fifo设计链接这里

顶层非对称 fifo (fifo_wrapper.vhd)是建立在32位异步 fifo(async_fifo.vhd)之上的.这个内部fifo (async_fifo)是使用开放核上的通用FIFO (fifos)逻辑构建的。我增加了一个简单的测试平台来尝试这个fifo设计。

但是这个设计有一些问题,我无法弄清楚。当我对fifo进行仿真时,它的工作原理非常好,但是当我将它与硬件上的其他设计一起运行时,有时会得到一些错误的数据。可能有一些角落的情况,我不能模拟,或者是其他什么东西?

这就是为什么我希望任何需要这个设计的人尝试它,如果他/她在模拟或合成之后遇到任何问题,请告诉我。谢谢

请让我知道,如果有其他论坛,我可以把我的设计供公众使用。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-07-15 05:15:24

基于写读时钟完全异步的假设,这种异步FIFO设计需要指出许多问题。

  • 一个(也可能是)主要问题是,写入侧指针(async_fifo中的wp)是一个普通的二进制计数器,在没有任何格雷编码的情况下,它被传送并同步到读取的侧时钟。因此,向量中的不同位在读时钟域中可能到达不同的时间,因此写入指针值可以(而且极有可能不时地)与写入侧值不同。因此,与读指针(rp)的比较是没有意义的。在时钟域上传递的二进制值应该在传输之前进行灰色编码,并在到达时解码。同时使用具有两个触发器级别的同步。
  • 这两个时钟(rd_clk和wr_clk)被认为是异步的,但只有一个复位(rst),因此当复位被解除时可能会违反定时,除非在复位解除时有一些额外的时钟要求。
  • 与clear相似,其中只有一个信号可以在两个不同的时钟域中使用。
  • 建议使用端口命名约定,其中清除以名称表示的端口的时钟域关系,例如将写入时钟域中的所有端口命名为wr_* (例如,wr_clk_i、wr_clk_we_i等),并将读取时钟域中的所有端口命名为rd_*。
  • 重置断言较低,因此对rst_n进行命名将是一个不错的选择。
票数 3
EN

Stack Overflow用户

发布于 2013-07-18 23:54:16

我无法访问您的代码(防火墙),所以我将只提到设计它们的一般要点,这可能对您和其他人都有帮助。

  • 为了使时钟完全安全,写端应该使用使用2元稳定信令链的完全安全的异步握手方法来交换指向读取侧的指针。

这个结构是一个双缓冲寄存器。

  1. 写入端将其写入指针注册到缓冲区中,并断言有效信号较高。
  2. 元稳定链将缓冲器有效信号重新锁定到读时钟域。
  3. 在读取时钟侧,一旦在元链的输出处看到向高有效的转换,则写入侧缓冲器中的数据被重新注册到读取域上的另一个寄存器上。这是可以的,因为我们知道缓冲区中的数据是稳定的。(因为元链)。
  4. 读取域断言一个ack信号很高。
  5. 另一个元稳定链将ack信号重新锁定到写时钟域.
  6. 写入端在元链的输出处等待ack信号的转换,一旦看到它就放弃其有效信号。
  7. 读取侧在元链的输出端等待有效信号的转换,一旦看到它就将其ack信号解除。
  8. 写入侧在元链的输出端等待ack信号的转换到低。这一周期现在已经完成。
  9. 现在可能已经移动了相当多的当前写指针可能会再次被传输。

采用类似的方法将读指针传输到写域。可以看出,虽然这种方法会导致写/读端的写指针与读/写端的读指针之间的延迟,但这种延迟永远不会导致溢出。相反,它会导致写入端的过早填充,而在读取端则导致过早的空,这将在下一个指针交换后最终解决。

这种方法是唯一一个不依赖于时钟速度先验知识的fifo的完全时钟安全设计。根本不需要灰色编码。

另外要注意的是,寻址/空/满等的逻辑需要在每个时钟域中重复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17654349

复制
相关文章
Java反射探索-----从类加载说起
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
bear_fish
2018/09/20
5220
Java反射探索-----从类加载说起
枚举帮助类
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Linq; 5 6 namespace EnumHelper 7 { 8 /// <summary> 9 /// 枚举帮助类 10 /// 1、获取枚举的描述文本 11 /// 2、获取枚举名和描述信息的列表 12 /// </summary> 13
用户6362579
2019/09/29
5380
日志帮助类
 1.代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Configuration; using System.Reflection; namespace LogHelper.Common { public class LogHelper { private string logFile
用户1055830
2018/01/18
6520
日志帮助类
从源码角度学习JVM类加载器及自定义类加载器
负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,这个加载器是由C++写的,所以我们在java源码里面是找不到它的实现,如果尝试对它进行打印,输出将为空值。
AI码师
2022/12/22
3860
从源码角度学习JVM类加载器及自定义类加载器
内存泄漏 - 从Class类加载器说起
某公司技术人员针对企业应用系统12月10日内存溢出事件进行了广泛的技术探讨,并得到了一些建设性的建议和结论。
IT技术小咖
2019/09/24
2.9K0
内存泄漏 - 从Class类加载器说起
详细讲解!从JVM直到类加载器
整个过程是,x.java文件需要编译成x.class文件,通过类加载器加载到内存中,然后通过解释器或者即时编译器进行解释和编译,最后交给执行引擎执行,执行引擎操作OS硬件。
java技术爱好者
2020/09/22
4320
JVM | 从类加载到JVM内存结构
我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)上吗?相反,JVM有着一套精密的管理机制,来确保类的加载、验证、解析和初始化等任务能够有序且高效地完成。
kfaino
2023/10/02
2750
JVM | 从类加载到JVM内存结构
在成为CTO之前,程序员怎样赚外快?
作为一个码code的程序员,虽然可能没有朋友,比较宅,但是整体花销往往不比正常人少。VPS,域名,MAC还有一堆的收费软件,数码设备等,都是卖肾的节奏。 当然作为程序员,我们也可以有更多的赚钱姿势,如果你认为只有接私单,那么你就OUT了,我们看看有没有其他的方式呢? 私单 最理想的单子还是直接接海外的项目,比如freelance.com等网站。一方面是因为挣的是美刀比较划算,之前看到像给WordPress写支付+发送注册码这种大家一个周末就能做完的项目,也可以到200~300美刀;另一方面是在国外接单子比较
春哥大魔王
2018/04/16
1.8K0
原 数据接收和数据返回呈现,都用一个类代替
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; public class Record extends HashMap implements Map {     private static final lo
kinbug [进阶者]
2018/06/13
4500
Java类加载-加载
我们已经将整个Class的构成讲述完了,不清楚的同学可以看一下关于Class文件的介绍,但是空有Class并没有什么用,在Class中的各种描述信息都需要被加载到虚拟机以后才能运行使用。
shysh95
2021/02/25
1.3K0
Java类加载-加载
python 数据图表呈现
平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。
orientlu
2018/09/13
1.2K0
python 数据图表呈现
ajax请求完之前的loading加载
很多时候我们需要引入框架来开发项目,这时我们可能会遇到页面还没加载完源码出来了的问题,给用户一种不好的视觉体验,这是便需要loading加载了,来完善用户体验!
ProsperLee
2018/10/24
1.5K0
ajax请求完之前的loading加载
DevExpress数据绑定呈现
数据库这里为了方便演示,用的SQL Server 由于我数据库中的表有8列数据,这里添加8列,并设置列名和绑定的数据名称:
别团等shy哥发育
2023/02/27
1.6K0
DevExpress数据绑定呈现
类加载
其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
码农戏码
2021/03/23
4980
类加载
我们知道在运行Java程序时,首先需要把源代码编译成二进制文件也就是class文件,然后虚拟机才能执行。那虚拟机在执行class文件时,都进行了哪些步骤呢。下面我们将详细分享一下。当类也就是class文件被加载到虚拟机内存开始,到卸载出内存为止。它将要执行以下7个步骤:
吉林乌拉
2019/08/14
4970
类加载
启动类加载器,Bootstrap ClassLoader,加载JACA_HOME\lib,或者被-Xbootclasspath参数限定的类 扩展类加载器,Extension ClassLoader,加载\lib\ext,或者被java.ext.dirs系统变量指定的类 应用程序类加载器,Application ClassLoader,加载ClassPath中的类库 自定义类加载器,通过继承ClassLoader实现,一般是加载我们的自定义类
葆宁
2019/04/18
4850
类加载
【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
类加载器加载类流程 : Bootstrap ClassLoader 先加载系统的核心类库 , Extention ClassLoader 加载额外的 /lib/ext 类库 , Application ClassLoader 加载开发者自己开发的类库 ;
韩曙亮
2023/03/30
8920
从ng1看ng2 关于NgModule的简易归纳
最近开始折腾ng2,其实说是ng2,到目前为止,它已经发布了4.3版,就是这么的高产,高产似*,我连2都还木有完整的看完它竟然发布了4.的版本(鄙视脸)。
littlelyon
2018/10/19
9550
写一个Foreach帮助类,在razor中使用
esterday, during my ASP.NET MVC 3 talk at Mix 11, I wrote a useful helper method demonstrating an advanced feature of Razor, Razor Templated Delegates.
javascript.shop
2019/09/04
4980
jvm怎么加载类_jvm类加载器
原因: 1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】 2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。 3、可以定义类的实现机制,实现类的热部署, 如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的, 如tomcat实现的自定义类加载模型。
全栈程序员站长
2022/10/29
4670

相似问题

Shell脚本在特定单词之后打印一定数量的单词

34

在shell脚本中从文件中选择特定的单词

20

在特定单词之后提取单词

30

在shell脚本中搜索特定的单词

34

PHP在某个单词之后选择单词

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档