中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 传感控制 >>电子行业新闻正文

一种新型异步FIFO的设计

时间:2007/11/6 9:08:00  作者:  来源:IC72  浏览人数:986
 
 

      引言

      FIFO(先入先出队列)是一种在电子系统中得到广范应用的器件。FIFO可以分为同步FIFO和异步FIFO。同步FIFO只在一个时钟域里工作,比较简单。而异步FIFO是工作在两个时钟域里的FIFO。两个时钟域的频率和相位不同,在一个时钟域里向FIFO写数据,在另一个时钟域里把FIFO中的数据读走。本文设计的异步FIFO包含Buffer模式和水位可编程等新的想法,能够满足使用需求。

      异步FIFO的主要特性

      本文设计的异步FIFO的深度为16,宽度为8位。可以根据具体的应用而改变。

      该异步FIFO有两种工作模式:FIFO模式和Buffer模式。当FIFO使能(fifo_en置为1)时工作在FIFO模式,当FIFO不使能(fifo_en置为0)时工作在Buffer模式。在FIFO模式时,FIFO的深度为16;在Buffer模式时,FIFO的深度为1。增加Buffer模式可以使该异步FIFO的应用范围更加广泛,使用时更加灵活。

      该异步FIFO的水位是可编程的,支持1/8,1/4,1/2,3/4和7/8五种水位。水位的具体含义是:当FIFO中的数据量达到或超过水位时,FIFO的状态为OVERMARK。例如:在水位配置为1/2的情况下,当FIFO中的数据个数大于或等于8(8为水位与FIFO深度的乘积)时,FIFO的状态为OVERMARK。这样,DMA就可以根据FIFO的状态一次在FIFO中取走一定量的数据。对于支持DMA的外设,该项特性非常有用。

      该异步FIFO在FIFO模式下可以输出四种FIF0状态,即FIFO_EMPTY、FIF0_NON_OVERMARK、FIFO_OVERMARK和FIF0_FULL。其中FIFO_NON_0VERMARK是当FIFO中的数据量低于水位时的FIFO状态。在Buffer模式下只有两种FIFO状态,即FIFO_EMPTY和FIFO_FULL。

      异步FIFO的接口设计

      异步FIFO的接口信号图如图1所示。wclk为写时钟,wreset_n为写时钟域里的复位信号,低电平有效。rclk为读时钟,rreset_n为读时钟域里的复位信号,低电平有效。write为写使能信号,高电平有效。read为读使能信号,高电平有效。empty和full为FIFO的空满状态。Water_level为FIFO的水位。fifo_states为FIFO的状态。wdata和rdata分别为写数据线和读数据线。

IC72新闻中心

      异步FIFO模块的划分

      本文采用自顶向下的方法,将设计划分为5个模块:DPRAM模块、WCTL模块,RCTL模块、W2R模块和R2W模块。

      其中DPRAM模块、WCTL模块和R2W模块在写时钟(wclk)域里;RCTL模块和W2R模块在读时钟(rclk)域里。R2W模块和W2P模块为同步模块,R2W将读时钟域里的信号同步到写时钟域里,W2P将写时钟域里的信号同步到读时钟域里。

      异步FIFO的关键部分设计

      空满状态的判断

      对于异步FIFO来说,空满状态的设计非常重要。要防止在HFO已经满的情况下还对FIFO进行写操作,同时也要注意不要在FIFO已经空的情况下还对其进行读操作。

      采用将写指针和读指针相比较的方法可以更有效地判断FIFO的空满状态。写指针表示将要对FIFO进行写操作的写地址,读指针表示正在对FIFO进行读操作时的读地址。由于本FIFO的深度为16,所以可以将写指针和读指针设计为5位的位宽。其中低四位表示地址,最高位表示状态。

      为了能更及时地显示FIFO的空和满状态,设定在WCTL模块进行满状态的判断,在RCTL模块进行空状态的判断。将RCTL模块输出的读指针rptr经R2W模块同步到写时钟域后为rptr_r2w,将rptr_r2w和WCTL模块中的写指针比较,若两个指针的低四位相同而最高位不同,则FIFO为满。将WCTL的读指针wptr经W2R模块同步到读时钟域后为wptr_w2r,将wptr_w2r和RCTL模块中的读指针比较,若两个指针相同,则FIFO为空。

      rptr和wptr都用格雷码编码,由于相邻的两个格雷码之间只有一位不同,这样就可以避免在进行信号同步时,由于在同一个时钟沿有多个信号变化而引起的问题。

IC72新闻中心

      由于同步后的rptr_r2w比rptr有一定的延时,同步后的wptr_w2r比wptr也有一定的延时。因此,不会出现在FIFO已经满的情况下还对FIFO进行写操作和在FIFO已经空的情况下还对其进行读操作的情况。

      判断FIFO满的Verilog代码如下:

      parameterASIZE=4;//addrsize

      always@(rptr_binorwaddr_tmp)

      begin

      if((rptr_bin[ASIZE-1:0]==waddr_tmp[ASIZE-1:0])&&(rptr_bin[ASIZE]==(-waddr_tmp[ASIZE])))

      full_temp=1'bl;

      else

      full_temp=1'b0;

      end

      Buffer模式下地址的控制

      当fifo_en为低电平时,FIFO工作在Buffer模式下,当此时写使能有效且FIFO非满(读使能有效且FIFO非空)时,只改变写指针(或读指针)的最高位。这样就可以保证FIFO的深度为1,像一个8位的寄存器一样。

      产生FIFO读地址的Verilog代码如下:

      always@(waddr_tmporfull_temporfifo_enorwrite)

      begin

      if(full_temp==1'bO&&write==l'b1)

      begin

      if(fifo_en==1'b1)//infifomode

      waddr_next=waddr_tmp+1'b1;

      else

      //inbuffermode

      Waddr_next=waddr_tmp+5'b1_0000;

      End

      Else

      Waddr_next=waddr_tmp;

      End

      FIFO状态的确定

      除了空和满状态外,在FIFO模式下还有FIFO_NON_OVERMARK和FIFO_OVERMARK两种状态。

      判断这两种状态主要是根据FIFO中的数据量和FIFO的水位来判断的。FIFO中的数据量是通过写指针减去读指针得到的。先判断FIFO是否处于空或满的状态,然后再判断当FIFO中的数据量达到或超过水位时,FIFO的状态为FIFO_OVERMARK;当FIFO中的数据量低于水位时,FIFO的状态为FIFO_NON_OVERMARK。

      判断FIFO状态的Verilog代码如下:

      //computethedatanumberinfifoparameterASIZE=4;//addrsize

      always@(rptr_binorwaddr_next)

      begin

      data_num=waddr_next[ASIZE:0]+(-rptr_bin[ASIZE:0])+1'b1;

      end

      always@(water_level)

      begin

      case(water_level)

      3'b000:data_water_level=4'b0010;//1/8

      3'b001:data_water_level=4'b0100;//1/4

      3'b010:data_water_level=4'b1000;//1/2

      3'b011:data_water_level=4'b1100;//3/4

      3'b100:data_water_level=4'b1110;//7/8

      default:data_water_level=4'b1000;//1/2

      endcase

      end

      //setthefifo_states

      always@(full_temporempty_tempordata_numordata_water_level)

      begin

      if(empty_temp==1'b1)fifo_states='FIFO_EMPTY;

      elseif(full_temp==1'b1)fifo_states='FIFO_FULL;

      elseif(data_num>=data_water_level)fifo_states='FIF0_OVERMARK;

      elsefifo_States='FIFO_NON_OVERMARK;

      end

      同步模块的设计

      设计中W2R模块和R2W模块为同步模块。把信号连续通过两个触发器可实现同步,这种同步方法十分简单,且准确性比较高。

      仿真验证

      本设计用MentorGraphics公司的ModelSim进行仿真。当FIFO为空的时候,向FIFO连续写入16个数据,然后再将数据连续读出的仿真如图3所示。

IC72新闻中心

      结语

      本文讨论了一种异步FIFO的设计方法,它支持Buffer模式,水位可以编程,有四种FIFO状态。经验证,该异步FIFO能够安全地实现数据的跨时钟域传递,有数据缓冲作用,可以应用到UART、SPI等通讯外设中。

 
【相关文章】
·一种新型异步FIFO的设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9