两种异步fifo对比

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

两种异步fifo对比
1、?两种异步两种异步FIFOFIFO对比对比?2021-04-0511:44发表系统分类:可编程规律自定义分类:默认?标签:FIFO前些天看了看异步FIFO,有篇文章不错原文:/s/blog_4b2b9ac701000bzn.html在quartus 下进行了简洁对比,结果如下:1.传统方法,即将读、写地址的格雷码通过双寄存器采样到写、读时钟域,然后比较产生相应的空满信号2.改良方法,先直接将读写地址进行异步比较,得到相应标志位,然后将标志位通过双寄存器异步采样,综合得出空满信号可以看到,由于避开每一个指针寄存器的异步采样,因此,改良后的方法比传统方法削减了近50
2、%的寄存器用量。

频率方面,简洁的对比了下最大工作频率fmax〔未做约束〕,结果如下传统方法改良方法这样的频率结果,确定是有问题的。

还没时间分析,大家可以商量下~源码如下://顶层模块
moduleAFIFO(wclk,rclk,wen,ren,wrst_n,rrst_n,wfull,rempty);inputwclk,r clk,wen,ren,wrst_n,rrst_n;outputwfull,rempty;wire[2:0]wptr,rptr;wire[ 2:0]wptrg,rptrg;wptr_fulluut_wptr_full(wclk,wrst_n,wen,afull_n,wptr,w ptrg,wfu
3、
ll);rptr_emptyuut_rptr_empty(rclk,rrst_n,ren,aempty_n,rptr,rptrg,remp ty);ACMPuut_ACMP(wptrg,rptrg,aempty_n,afull_n,wrst_n);endmodule//写地址及满信号的产生(包括格雷码转
化)modulewptr_full(wclk,wrst_n,wen,afull_n,wptr,wptrg,wfull);inputwcl k,wrst_n,wen,afull_n;//输入输出信号output[2:0]wptr,wptrg;outputwfull;reg[2:0]wptr,wptrg;regwf
4、ull;wire[2:0]wptr_next,wptrg_next;//其他信号regwfull2;//地址信号的产生
always@(posedgewclkornegedgewrst_n)if(!wrst_n){wptr,wptrg}1)^wptr_nex t;//bin转gray,高位与低位异或//满信号的产生
always@(posedgewclkornegedgewrst_nornegedgeafull_n)if(!wrst_n){wfull, wfull2}1)^rptr_next;//bin转gray,高位与低位异或//空信号的产生
always@(posedgerclkornegedgerrst_no
5、
rnegedgeaempty_n)if(!rrst_n){rempty,rempty2}=2b11;elseif(!aempty_n){r empty,rempty2}=2b11;else{rempty,rempty2}={rempty2,~aempty_n};/*同上
*/endmodule/******异步比较及相关标志位的产生
********/moduleACMP(wptrg,rptrg,aempty_n,afull_n,wrst_n);input[2:0]wp trg,rptrg;//相关输入输出
inputwrst_n;outputaempty_n,afull_n;regdirection;wiredi
6、rset_n,dirclr_n;//象限标志位的产生
assigndirset_n=~((wptrg[2]^rptrg[1])//依据读写指针的象限相邻关系,由卡诺图推导。

//assigndirclr_n=~(~(wptrg[2]^rptrg[1])assigndirclr_n=~((~(wptrg[2]^r ptrg[1])always@(negedgedirset_nornegedgedirclr_n)//将标志位时序化
if(!dirclr_n)direction=1b0;elseif(!dirset_n)direction=1b1;elsedirecti on=1b1;//默认高位//地址比较,并参考象限
7、标志位推断空满assignaempty_n=~((wptrg==rptrg)//读写指针相同,标志位为0,则为空;assignafull_n=~((wptrg==rptrg)////读写指针相同,标志位为1,则为满;endmodule//。

相关文档
最新文档