(二)异步FIFO

本文详细探讨了异步FIFO在跨时钟域数据存储读写中的应用,重点讨论了亚稳态现象、单bit和多bit信号的同步策略。还介绍了使用格雷码来降低亚稳态风险和实现FIFO的空满标志检测。最后,概述了异步FIFO的RTL代码设计,包括dual_port_sram和async_fifo模块。
摘要由CSDN通过智能技术生成

一、异步FIFO

数据写入FIFO的时钟和数据读出FIFO的时钟是异步的(asynchronous), 异步是指相位不同,频率可能不同,不同时钟上升沿之间关系不确定,相位关系不确定,常用于跨时钟域数据的存储读写。

1、亚稳态

        以单bit信号为例:

说明:

  • 亚稳态:上图Din是DFF1的输入由上一个DFF0在时钟域clka下输出的单bit信号,当DFF0输出到clkb时钟域时,由于两个时钟域是异步的,所以无法保证采样到的DFF1的输出Ds是稳定的,因为信号跨时钟域,它要在clkb时钟域稳定下来需要一定的时间(这段时间包括触发器内部电路的时间、导线,导线中间组合逻辑电路的时间),这段稳定时间中的输出Ds是不稳定的,叫这个不稳定的状态为亚稳态但经过一段时间最终输出Ds会达到稳定状态0或1

2、单bit信号Din慢时钟a同步到快时钟b

若单bit信号Din慢时钟a到快时钟b采用打两拍的方法,打的拍数越多亚稳态消除的越好(信号抖动时间不是确定的,随时钟变化

  1. 第一拍:b时钟下同步Din,减小采到亚稳态的概率,虽采到随机值,但最终会达到一个正确的稳定值(随机值最终不会到一个错误的值), 所以输出信号的Ds基本稳定了,但不能用这个信号,因为在时钟b下,仍然有可能会采样到亚稳态,采样到的亚稳态可能为1或0,是不确定的。
  2. 第二拍:第二次b时钟下同步Din,此时采到Ds信号基本稳定已消除了亚稳态,再输出Dout信号

3、单bit信号Din快时钟b同步到慢时钟a

若单bit信号Din快时钟b同步到慢时钟a,一定可以采到稳定的信号,但可能会出现重复采样问题即出现了多个快时钟周期内同一个数据的信号。

4、多bit信号为什么不能采用打两拍的方法进行跨时钟域同步

  1. 假设从时钟域A垮到时钟域B,是域A从00变到11,在时域B还能采样到从00变到11吗?在时域B中,时钟的上升沿来的时间是肯定一致的,但是各个bit从时钟域A到达时钟域B的时间是不一样的,亚稳态恢复到稳态的时间也是不一样的。即00中的两个0并不是同时变成1的,因此时钟域B中可能采到中间态01或10。
  2. 单比特发送亚稳态的概率变成多bit后概率会大很多,不直接打两拍是可以降低亚稳态发生的概率的。

二、异步FIFO设计:用于跨时钟域数据的存储读写

说明:

  • 写指针(wptr)指向的位置表示还未写,将要写,系统复位后(FIFO为空),写指针指向0,每写入一笔数据,写指针加1;
  • 读指针(rptr)指向的位置表示还未读,将要读,系统复位后(FIFO为空),读指针指向0,每读入一笔数据,读指针加1;
  • 空标志(empty):当读指针和写指针相等时,空标志=1,复位时,两指针都为0,或者当读指针追赶上了写指针
  • 满标志(full):当写指针和读指针相等时,满标志=1,写指针写了一圈后,又追上了读指针

1、为什么多bit要使用格雷码?

以深度为8的FIFO为例:

  •  在异步FIFO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值