异步FIFO的实现方式

异步FIFO的实现方式

ID:68975849

大小:342.00 KB

页数:26页

时间:2021-10-23

异步FIFO的实现方式_第1页
异步FIFO的实现方式_第2页
异步FIFO的实现方式_第3页
异步FIFO的实现方式_第4页
异步FIFO的实现方式_第5页
异步FIFO的实现方式_第6页
异步FIFO的实现方式_第7页
异步FIFO的实现方式_第8页
异步FIFO的实现方式_第9页
异步FIFO的实现方式_第10页
资源描述:

《异步FIFO的实现方式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、-.异步FIFO的实现方式实验目的本次实验介绍一种异步FIFO的实现方式。使用FIFO存储器可以在两个不同时钟系统之间快速而方便的传输数据。另外,在网络接口,图像处理等方面异步FIFO存储器也得到了广泛的应用。因此,异步FIFO存储器具有较大的研究和应用价值。异步FIFO的介绍和整体构造异步FIFO(FirstInFirstOut)存储器是指向FIFO缓冲器中写入数据的时钟域和从FIFO缓冲器中读取数据的时钟域是不同的,这两个时钟之间没有必然的因果关系。异步FIFO是一种先进先出的电路,使用在异步时钟域数据接口的局部,用来存储、缓冲在两个异步时钟

2、之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,所以数据的丧失概率不为零。如何设计一个高可靠性、高速的异步FIFO存储器便成为一个难点。异步FIFO的一般构造如图1所示,都是由一个读时钟域电路、一个写时钟域电路和一个双端口的RAM来构成的。异步FIFO与同步FIFO所做的工作是一样的,都是在写信号有效时写数据到RAM中,在读信号有效时把数据从RAM中读出,所以对于中间局部的RAM设计是比拟简单的。另外,读电路和写电路单独实现起来也是比拟容易的,只需要按照同步FIFO的工作情况,如果没有写满或读空的状态时每写一个数据就把写地址加1,每

3、读一个数据就把读地址减1。设计难点在于两个时钟域的交叠局部:满、空状态的产生,这也是设计的重点。-.word.zl.-.图1异步FIFO构造针对这个问题,先从对亚稳态的处理开场介绍亚稳态的处理一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态、并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。亚稳态发生的原因是由于在同步系统中,如果触发器的建立时间或保持时间不满足,就可能产生亚稳态,此时触发器输出端Q在亚稳态是指触发器无法

4、在某个规定时间段到达一个可确认的状态,逻辑误判有可能通过电路的特殊设计减轻危害(如本设计中将使用的Gray码计数器),而亚稳态的传播那么扩大了故障面,难以处理。-.word.zl.-.在数字集成电路中存放器要满足建立时间和保持时间。建立时间是在时钟翻转之前数据输入必须有效的时间,保持时间是在时钟沿之后数据输出必须仍然有效的时间。当一个信号被存放器锁存时,如果信号和时钟之间不满足这个要求,Q的值是不确定的,并且在未知的时刻会固定到高电平或低电平。此时存放器进入了亚稳态(Metastability)。解决这一问题的最简单方法是使用同步器,使得在另一个

5、时钟域采样时信号足够稳定。同步器的设计本身就是一个比拟麻烦的问题,本次设计中也不深入讨论一些细节性的问题,直接采用两级采样的同步器,防止了使用一级同步器仍可能出现亚稳态的情况。每个这样的同步器都具有一个等于时钟周期的等待时间。这种同步器可以把一些亚稳态的值同步为确定值,但并不一定是正确值,同时有一些亚稳态也还是无法稳定成确切值的,这种情况称为同步出错。由于同步出错的随机性,很难对它们进展跟踪。如果想进一步降低亚稳态出现的概率、可以再増加同步器的级数,但是太多的同步器会使系统的性能下降,所以系统中不会用太多的同步器,一般使用两个同步器已经足够。空满

6、状态的判断之所以在前面介绍了亚稳态的问题,是因为这是判断满状态或空状态无法回避的一个问题。因为读电路在读控制时维持一个地址指针,写电路在写控制时维持一个地址指针,简单来说,这两个地址指针直接一比拟,就能得到空满的判断结果,但是实际操作起来非常麻烦。例如对于满状态来说,这是写入电路所关心的状态,因为满状态下不能继续写入数据,但是空状态对于写电路没有影响。如果写入电路要判断当前FIFO-.word.zl.-.是否为满,就需要把写电路自身维持的写指针和读电路维持的读指针做比拟,这个读指针就需要送入写电路中,此时就发生了穿过时钟域的问题,也就是说,读指针

7、要从读时钟域同步到写时钟域,然后参与判断,此时就需要前面介绍的同步器。同样,对于空状态来说,这是读出电路所关心的状态,也是由读电路来维持的,因为空状态下再读数就会得到错误的数据,但是满状态下读数是没有影响的。如果读电路要判断当前FIFO是否为空,就需要把写时钟域中的写指针取到读时钟域来,和读时钟域的读指针进展比拟得出是否是空状态,同样跨越了时钟域。在跨时钟域系统中希望出现错误的概率越低越好,此时格雷码无疑是最好的一个选择。格雷码属于可靠性编码,是一种误差最小化的编码,它大大减少了由一个状态到下一个状态时电路混淆。由这种编码相邻的两个码组之间只有一

8、位不同,和其他编码同时改变2位和多位的情况相比更为可靠。表1所示是格雷码与二进制码的对应关系。表1格雷码与二进制码转换真值表由前面的介绍

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。