原创 【博客大赛】IC设计经验跨时钟域异步FIFO

2017-6-6 22:01 3376 17 17 分类: FPGA/CPLD

2.3)异步fifo

事实上所有的同步问题都可以用异步fifo来处理,以一个时钟域将数据写入fifo,另一个时钟域将数据读出来,但是为什么不这样做呢,而是只有大批量的数据要处理时才这样做呢。原因有一下几点,异步fifo的latency比较大;异步fifo一般需要配上对应的ram作为存储体,ram又需要对应的bist电路,所以面积也会比较大;异步fifo控制部分的逻辑设计起来有些难度,尤其是空满信号的判断,如果处理不好也会带来很大的麻烦。

1


上图是一般异步fifo的设计架构,下面我将对经典异步fifo的设计,使用,注意事项进行解读。

将要讲解的两种经典的异步FIFO的设计方案来自一篇文章《simulation and synthesis techniques for asynchronous FIFO design》,大家可自行下载,设计思路这篇文章里面介绍的很详细,解释的也很出色,我更多的是谈谈我的部分理解。

2.3.1)异步FIFO设计的难点在哪里

2.3.1.1)写地址和读地址处于不同的时钟域,如何比对写地址和读地址才能正确的产生空满信号;

2.3.1.2)当读写地址相同时,究竟是读空了还是写满了(因为存在你追我赶的情况,类似于一个圆环)。

2.3.2)处理思路

2.3.2.1)对于难点1大家自然想到采用同步处理的方式,具体为将写地址或者读地址同步(例如利用两级触发器)到对方的时钟域中,在相同的时钟域中进行地址的比对,但是由于写地址和读地址很多时候并不止1bit,同时进行同步处理会增大错误的概率(如地址按0111->1000跳变,此时4bit都在变化,DFF进行同步时就很容易出错),因而可以先将地址(二进制的)转换为格雷码(相邻数据之间只有一个bit在变化),然后再进行同步,最后进行对比,这样会大大减少错误的概率。

4


2.3.2.2)对于难点2可以在地址前面添加1bit用于标志位进行区分,例如复位时,读写地址的标志位都是0,如果写完1轮而开始新的一轮时就将写地址的标志位换为1(读也同样道理变换),这样可以通过判断标志位加上对比地址判断是空还是满,具体为当读写地址的标志位相同读写地址相同时为读空,具体为当读写地址的标志位不同读写地址相同时为写满;另外也可以利用格雷码的最高两位00->01->10->11进行相位的区分,具体参考我给出的文章或者网络资料,其实本质上和上面的是一个道理。

2.3.3)经典FIFO设计方案的解读

2.3.3.1)同步读写地址(经格雷码转换后)到对方的时钟域

相比于直接同步二信号进制地址(先用握手,然后同步二进制地址)好处是格雷码相邻数据之间只有一个bit在变化,而二进制由于写地址和读地址很多时候并不止1bit,同时进行同步处理会增大错误的概率(如地址按0111->1000跳变,此时4bit都在变化,DFF进行同步时就很容易出错);利用格雷码进行同步,即使发生同步的时出错也不会造成overrun和underrun的情况(因为同步后的数据必定小于等于同步前的数据,即只可能1被同步为0,而不可能0被同步为1),例如当前的读地址到了6,写地址到了8,地址8经过同步后出错而变成了6,这时会出现地址相同而判断为读空,不过没关系,读空则不读,至少不会出现underrun的情况,随着时间的推移地址8总会被采样到;然而格雷码也有缺点,只能连续变化递增或者递减(如果间隔变化就不符合格雷码的特点了),所以设计的深度必须是2^n,如果不是的话,需要重新产生编码格雷码,否则也会出现间隔变化不符合相邻之间只有1bit变化的特点。

2


2.3.3.2)将读写地址(经格雷码转换后)同步到一个组合逻辑电路中(异步比较)直接比较空满,然后将空满信号同步到各自对应的模块中

3


虽然这种电路会给fifo带来不好的状态,例如已经满了wfull==1,但是这个时候读走一个数据,由于同步的延时性,导致这一段时间内wfull==1一直不变(如果没有同步带来的延时应该变为0的),rempty也会遇到同样的问题,但是这种电路不会出现underrun和overrun的情况。

2.3.3.2)相比2.3.3.1)可能会节省面积,因为2.3.3.1)同步wptr[n-1:0]和rptr[n-1:0],2.3.3.2)只需要同步afull_n,aempty_n; 2.3.3.1)的速率可能较2.3.3.2)会快些,2.3.3.2)中存在异步且组合逻辑比较,不利于时序的优化。


文章评论0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
EE直播间
更多
我要评论
0
17
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条