网站大量收购闲置独家精品文档,联系QQ:2885784924

两种异步FIFO对比..doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
两种异步FIFO对比.

两种异步FIFO对比 2012-04-05 11:44 发表 系统分类:可编程逻辑 自定义分类:默认 标签:FIFO 前些天看了看异步FIFO,有篇文章不错 原文:/s/blog_4b2b9ac701000bzn.html 在quartus下进行了简单对比,结果如下: 1.传统方法,即将读、写地址的格雷码通过双寄存器采样到写、读时钟域,然后比较产生相应的空满信号 2.改进方法,先直接将读写地址进行异步比较,得到相应标志位,然后将标志位通过双寄存器异步采样,综合得出空满信号 可以看到,由于避免每一个指针寄存器的异步采样,因此,改进后的方法比传统方法减少了近50%的寄存器用量。 频率方面,简单的对比了下最大工作频率fmax(未做约束),结果如下 传统方法 改进方法 这样的频率结果,肯定是有问题的。还没时间分析,大家可以讨论下~ 源码如下: //顶层模块 module AFIFO(wclk,rclk,wen,ren,wrst_n,rrst_n,wfull,rempty); input wclk,rclk,wen,ren,wrst_n,rrst_n; output wfull,rempty; wire[2:0] wptr,rptr; wire[2:0] wptrg,rptrg; wptr_full uut_wptr_full(wclk,wrst_n,wen,afull_n,wptr,wptrg,wfull); rptr_empty uut_rptr_empty(rclk,rrst_n,ren,aempty_n,rptr,rptrg,rempty); ACMP uut_ACMP(wptrg,rptrg,aempty_n,afull_n,wrst_n); endmodule //写地址及满信号的产生(包括格雷码转化) module wptr_full(wclk,wrst_n,wen,afull_n,wptr,wptrg,wfull); input wclk,wrst_n,wen,afull_n;//输入输出信号 output[2:0] wptr,wptrg; output wfull; reg[2:0] wptr,wptrg; reg wfull; wire[2:0] wptr_next,wptrg_next;//其他信号 reg wfull2; //地址信号的产生 always@(posedge wclk or negedge wrst_n) if(!wrst_n) {wptr,wptrg}=0; else {wptr,wptrg}={wptr_next,wptrg_next}; //地址产生时序化 assign wptr_next=wptr+(wen !wfull); assign wptrg_next=(wptr_next1)^wptr_next; //bin转gray,高位与低位异或 //满信号的产生 always@(posedge wclk or negedge wrst_n or negedge afull_n) if(!wrst_n) {wfull,wfull2}=2b00; else if(!afull_n) {wfull,wfull2}=2b11; else {wfull,wfull2}={wfull2,~afull_n}; /*afull的下降沿本身就是由wclk引起的, 所以afull的下降沿(包括随其产生的wfull)与wclk是同步的。 比较担心的是afull随rclk而产生的上升沿,与wclk域不是同步的。 因此,此处通过以下的双锁存器进行同步, 将异步的afull下降沿同步至写时钟域*/ /*异步比较法的关键是用异步比较结果的信号的下降沿, 作为最终比较结果的复位信号,而异步比较结果的上升沿则用传统的双锁存器法进行同步[5]。 最终得到的信号的上升沿与下降沿都属于同一个时钟域。 与传统的先将地址信号同步再进行同步比较的方法相比,异步比较法避免了使用大量的同步寄存器, 而效率则更高,实现也更简单。*/ endmodule //读地址及空信号的产生(包括格雷码转化) module rptr_empty(rclk,rrst_n,ren,aempty_n,rptr,rptrg,rempty); input rclk,rrst_n,ren,aempty_n;//输入输出信号 output[2:0] rptr,rptrg; output rempty; reg[2:0] rptr,rptrg; reg rempty; wire[2:0] rptr_next,rptrg_next;//其他信号 reg rempty2; //地址信号的产生 always@(posedge rclk or neg

您可能关注的文档

文档评论(0)

bhzs + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档