用于异步FIFO电路的方法和设备转让专利

申请号 : CN201510452202.4

文献号 : CN105320490B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·C·雅拉杜艳西娜阿丽S·D·帕蒂尔

申请人 : 德克萨斯仪器股份有限公司

摘要 :

本发明涉及用于异步FIFO电路的方法和装置。本发明提供一种异步FIFO电路,该FIFO电路包括耦合于写数据路径和读数据路径的数据存储器。数据存储器接收写时钟和读时钟。FIFO写指针计数器接收写使能信号和写时钟。FIFO写指针计数器向数据存储器提供FIFO写指针信号。FIFO读指针计数器接收读使能信号和读时钟。FIFO读指针计数器向数据存储器提供FIFO读指针信号。控制电路接收写使能信号、读使能信号、FIFO写指针信号、FIFO读指针信号、写时钟和读时钟。当数据存储器为满时,控制电路生成存储器满信号,并且当数据存储器为空时,控制电路生成存储器空信号。

权利要求 :

1.一种异步先入先出电路即异步FIFO电路,所述FIFO电路包括:耦合于写数据路径和读数据路径的数据存储器,所述数据存储器经配置接收写时钟和读时钟;

FIFO写指针计数器,所述FIFO写指针计数器经配置接收写使能信号和所述写时钟,所述FIFO写指针计数器经配置向所述数据存储器提供FIFO写指针信号;

FIFO读指针计数器,所述FIFO读指针计数器经配置接收读使能信号和所述读时钟,所述FIFO读指针计数器经配置向所述数据存储器提供FIFO读指针信号;和控制电路,所述控制电路经配置接收所述写使能信号、所述读使能信号、所述FIFO写指针信号、所述FIFO读指针信号、所述写时钟和所述读时钟,所述控制电路经配置当所述数据存储器为满时生成存储器满信号,以及当所述数据存储器为空时生成存储器空信号;

其中,所述控制电路还包括置位-清零寄存器组,所述置位-清零寄存器组经配置接收所述写使能信号、所述读使能信号、所述FIFO写指针信号、所述FIFO读指针信号、所述写时钟和所述读时钟,并且所述置位-清零寄存器组经配置响应于所述写使能信号和所述FIFO写指针信号写入一组状态位,并且其中,所述置位-清零寄存器组经配置响应于所述读使能信号和所述FIFO读指针信号清零所述一组状态位。

2.根据权利要求1所述的异步FIFO电路,其中,所述数据存储器具有2N行,并且所述2N行中的每一行经配置存储M位,M和N是整数。

3.根据权利要求2所述的异步FIFO电路,其中,所述置位-清零寄存器组具有2N行,并且所述2N行中的每一行经配置存储所述一组状态位中的状态位。

4.根据权利要求3所述的异步FIFO电路,其中:

所述FIFO写指针计数器经配置存储当前写地址,并且所述FIFO写指针信号经配置指定所述数据存储器中对应于所述当前写地址的行;以及所述FIFO读指针计数器经配置存储当前读地址,并且所述FIFO读指针信号经配置指定所述数据存储器中对应于所述当前读地址的行。

5.根据权利要求1所述的异步FIFO电路,其中,所述FIFO写指针计数器经配置接收所述存储器满信号,并且所述FIFO读指针计数器经配置接收所述存储器空信号。

6.根据权利要求1所述的异步FIFO电路,其中,当所述写使能信号被断言并且所述数据存储器未满时,所述FIFO写指针信号在所述写时钟的正边沿或负边沿中的一个处递增。

7.根据权利要求1所述的异步FIFO电路,其中,当所述读使能信号被断言并且所述数据存储器不为空时,所述FIFO读指针信号在所述读时钟的正边沿或负边沿中的一个处递增。

8.根据权利要求4所述的异步FIFO电路,其中,在所述数据存储器上执行的写操作与所述写时钟同步,并且在所述数据存储器上执行的读操作与所述读时钟同步,并且其中,所述写时钟与所述读时钟异步。

9.根据权利要求8所述的异步FIFO电路,其中,在所述写操作期间:所述写使能信号经配置被断言;

所述FIFO写指针信号经配置指定所述数据存储器中的2N行中对应于所述当前写地址的行;

在所述写数据路径上接收的数据被存储在所述数据存储器中的2N行中的所述行中;

所述置位-清零寄存器组经配置在所述置位-清零寄存器组中的2N行中的行中写入所述状态位;并且递增所述FIFO写指针信号以指定所述数据存储器中的2N行中对应于下一个写地址的下一行。

10.根据权利要求8所述的异步FIFO电路,其中,在读操作期间:所述读使能信号经配置被断言;

所述FIFO读指针信号经配置指定所述数据存储器中的2N行中对应于所述当前读地址的行;

N

存储在所述数据存储器的2行中的所述行中的数据被传送到所述读数据路径;

所述置位-清零寄存器组经配置清零所述置位-清零寄存器组中的2N行中的所述行中的所述状态位;并且递增所述FIFO读指针信号以指向所述数据存储器中的2N行中对应于下一个读地址的下一行。

11.根据权利要求3所述的异步FIFO电路,其中所述控制电路还包括:写增量块,所述写增量块经配置接收所述FIFO写指针信号并经配置将所述FIFO写指针信号递增规定整数值以生成写增量指针;

N

耦合于所述置位-清零寄存器组中的2行中的每一行的多路复用器,所述多路复用器经配置接收所述写增量指针作为所述多路复用器的选择线;以及经配置接收所述多路复用器的输出和所述写时钟的写触发器,所述写触发器经配置在所述数据存储器为满时生成所述存储器满信号。

12.根据权利要求3所述的异步FIFO电路,其中所述控制电路还包括:读增量块,所述读增量块经配置接收所述FIFO读指针信号并经配置将所述FIFO读指针信号递增规定整数值以生成读增量指针;

耦合于所述置位-清零寄存器组中的2N行中的每一行的多路复用器,所述多路复用器经配置接收所述读增量指针作为所述多路复用器的选择线;以及经配置接收所述多路复用器的输出和所述读时钟的读触发器,所述读触发器经配置在所述数据存储器为空时生成所述存储器空信号。

13.根据权利要求3所述的异步FIFO电路,其中所述置位-清零寄存器组中的2N行中的每一行包括发生器电路,所述发生器电路包括:第一触发器,所述第一触发器经配置接收所述写使能信号、所述写时钟、所述FIFO写指针信号和反相的第二输出,所述第一触发器经配置生成第一输出;

第二触发器,所述第二触发器经配置接收所述读使能信号、所述读时钟、所述FIFO读指针信号和所述第一输出,所述第二触发器经配置生成第二输出;

经配置接收所述第二输出的反相器,并且所述反相器经配置反相所述第二输出以生成所述反相的第二输出;和异或非逻辑电路,所述异或非逻辑电路经配置接收所述第一输出和所述第二输出,所述异或非逻辑电路经配置生成所述状态位。

14.一种用于数据存储器的方法,其包括:

当写使能信号被断言时,在所述数据存储器中执行与写时钟同步的写操作;

响应于所述写操作,在置位-清零寄存器组中写入一组状态位;

当所述数据存储器为满时,生成存储器满信号;

当读使能信号被断言时,在所述数据存储器中执行与读时钟同步的读操作;

响应于所述读操作,清零所述置位-清零寄存器组中的所述一组状态位;以及当所述数据存储器为空时,生成存储器空信号。

15.根据权利要求14所述的方法,其还包括:

在所述数据存储器的行中执行所述写操作;

在所述置位-清零寄存器组中的对应行中写入状态位;以及将FIFO写指针信号递增规定整数值以生成写增量指针,其中,所述FIFO写指针信号经配置指定所述数据存储器中对应于当前写地址的行,并且其中,所述写增量指针经配置指定所述置位-清零寄存器组中的后续行。

16.根据权利要求15所述的方法,其中,当存储在所述置位-清零寄存器组的后续行中的所述状态位被写入时,生成所述存储器满信号。

17.根据权利要求14所述的方法,其还包括:

在所述数据存储器的行中执行所述读操作;

清零所述置位-清零寄存器组的对应行中的状态位;以及

将FIFO读指针信号递增规定整数值以生成读增量指针,其中,所述FIFO读指针信号经配置指定所述数据存储器中对应于当前读地址的行,并且其中,所述读增量指针经配置指定所述置位-清零寄存器组中的后续行。

18.根据权利要求17所述的方法,其中,当存储在所述置位-清零寄存器组的后续行中的所述状态位被清零时,生成存储器空信号。

19.一种用于异步先入先出电路即异步FIFO电路的设备,其包括:第一装置,所述第一装置经配置以写时钟运行;

第二装置,所述第二装置经配置以读时钟运行;和

耦合在所述第一装置和所述第二装置之间的异步发送FIFO电路和异步接收FIFO电路,所述异步发送FIFO电路和所述异步接收FIFO电路中的至少一个包括:耦合于写数据路径和读数据路径的数据存储器,所述数据存储器经配置接收写时钟和读时钟;

FIFO写指针计数器,所述FIFO写指针计数器经配置接收写使能信号和所述写时钟,所述FIFO写指针计数器经配置向所述数据存储器提供FIFO写指针信号;

FIFO读指针计数器,所述FIFO读指针计数器经配置接收读使能信号和所述读时钟,所述FIFO读指针计数器经配置向所述数据存储器提供FIFO读指针信号;和控制电路,所述控制电路经配置接收所述写使能信号、所述读使能信号、所述FIFO写指针信号、所述FIFO读指针信号、所述写时钟和所述读时钟,所述控制电路经配置当所述数据存储器为满时生成存储器满信号,以及当所述数据存储器为空时生成存储器空信号。

20.一种异步先入先出电路即异步FIFO电路,所述FIFO电路包括:用于接收写时钟和读时钟的装置;

用于接收写使能信号和所述写时钟的装置,所述用于接收写时钟和读时钟的装置经配置向数据存储器提供FIFO写指针信号;

用于接收读使能信号和所述读时钟的装置,其经配置向所述数据存储器提供FIFO读指针信号;以及用于接收所述写使能信号、所述读使能信号、所述FIFO写指针信号、所述FIFO读指针信号、所述写时钟和所述读时钟的装置,控制电路经配置当所述数据存储器为满时生成存储器满信号,以及当所述数据存储器为空时生成存储器空信号。

21.一种异步先入先出电路即异步FIFO电路,所述FIFO电路包括:用于当写使能信号被断言时,同步于写时钟在数据存储器中执行写操作的装置;

用于响应于所述写操作,在置位-清零寄存器组中写入一组状态位的装置;

用于当所述数据存储器为满时,生成存储器满信号的装置;

用于当读使能信号被断言时,同步于读时钟在所述数据存储器中执行读操作的装置;

用于响应于所述读操作,在所述置位-清零寄存器组中清零所述一组状态位的装置;以及用于当所述数据存储器为空时,生成存储器空信号的装置。

说明书 :

用于异步FIFO电路的方法和设备

[0001] 相关申请的交叉引用
[0002] 本申请要求于2014年7月31日提交的印度临时专利申请No.3755/CHE/2014的优先权,其全部内容通过引用并入本文。

技术领域

[0003] 本公开主要涉及数据存储和检索,并且更具体涉及异步FIFO(先进先出)电路。

背景技术

[0004] 与存储器存储单元相关联的数字逻辑电路能够与一个或更多个其他装置记录数据传输、命令或任何其他信息(称为“数据包”)。将数据包插入存储器存储单元与从存储器存储单元提取数据包之间的数据传输率能够不同。
[0005] 异步FIFO(先进先出)电路提供在工作频率明显不同的两个独立机器之间进行读写操作的重要数据缓冲功能。异步FIFO电路广泛用于在发送器和接收器工作在不同频率和时序时的数据传输同步。
[0006] FIFO电路具有数据存储器,该数据存储器具有多个可寻址位置。FIFO电路中的读写操作分别利用读指针和写指针来执行。在每个数据包插入数据存储器之后,写指针增加并指向存储器存储单元的后续地址位置。在从存储器存储单元提取每个数据包之后,读指针类似地增加并指向数据存储器的后续地址位置。
[0007] 比较读指针和写指针以跟踪数据存储器的占用率。基于该比较,生成诸如“存储器满”或“存储器空”的信号以分别指示是否继续数据包插入或提取操作。如果数据存储器为满,则关联电路执行的数据包插入操作将停止其写操作/数据包插入。类似地,如果数据存储器为空,则关联电路将停止读操作/数据包提取。
[0008] 在常规异步FIFO电路中,比较器用于比较读指针和写指针。具有更大“深度”的数据存储器的FIFO电路,读指针、写指针和比较器的大小按比例增加。随着比较器大小的增加,插入和提取数据率进一步减小。这降低工作频率(读时钟和写时钟的频率),从而降低系统的吞吐率。
[0009] 生成“存储器满”和“存储器空”信号需要分别同步读时钟域和写时钟域中的写指针和读指针。二进制到格雷码和格雷码到二进制转换器用于在同步写指针和读指针时最小化故障或避免亚稳态状况。每当任何触发器违背建立时间和保持时间时,其进入其输出不可预测的状态,这个状态称为亚稳态。亚稳态表示当读时钟和写时钟工作范围非常接近时的潜在故障状况。

发明内容

[0010] 本发明内容符合37C.F.R.§1.73,要求本发明的发明内容简要指出本发明的性质和实质。应当理解,本发明内容不会被用于解释或限制本权利要求的范围或含义。
[0011] 一个实施例提供异步FIFO(先入先出)电路。异步的FIFO电路包括耦合于写数据路径和读数据路径的数据存储器。数据存储器接收写时钟和读时钟。FIFO写指针计数器接收写使能信号和写时钟。FIFO写指针计数器向数据存储器提供FIFO写指针信号。
[0012] FIFO读指针计数器接收读使能信号和读时钟。FIFO读指针计数器向数据存储器提供FIFO读指针信号。控制电路接收写使能信号、读使能信号、FIFO写指针信号、FIFO读指针信号、写时钟和读时钟。当数据存储器为满时,控制电路生成存储器满信号,当数据存储器为空时,控制电路生成存储器空信号。
[0013] 其他方面和示例性实施例在后面的附图和具体实施方式中提供。

附图说明

[0014] 图1示出常规异步FIFO(先入先出)电路;
[0015] 图2示出根据一个实施例的异步FIFO(先入先出)电路;
[0016] 图3示出一种发生器电路;
[0017] 图4是示出根据一个实施例的方法的流程图;以及
[0018] 图5示出根据一个实施例使用在图2中示出的异步FIFO电路的设备。

具体实施方式

[0019] 图1示出常规异步FIFO(先入先出)电路100。常规异步FIFO电路100包括数据存储器105。数据存储器105包括2N行,并且2N行中的每一行存储M位,其中,M和N为整数。数据存储器105耦合于写数据路径WDATA 110和读数据路径RDATA 115。数据存储器105还接收写时钟WCLK 102和读时钟RCLK 104。
[0020] FIFO写指针计数器120接收写使能信号WEN 130和写时钟WCLK 102。FIFO写指针计数器120向数据存储器105提供FIFO写指针信号WPTR 135。FIFO读指针计数器125接收读使能信号REN 140和读时钟RCLK 104。FIFO读指针计数器125向数据存储器105提供FIFO读指针信号RPTR 145。
[0021] 常规异步FIFO电路100还包括逻辑单元150。逻辑单元150包括满(full)逻辑单元165、空逻辑单元170、满(full)比较器155、空比较器160、二进制到格雷码转换器152、二进制到格雷码转换器154、格雷码到二进制转换器156、格雷码到二进制转换器158、同步器162和同步器164。
[0022] 二进制到格雷码转换器152和满比较器155接收FIFO写指针信号WPTR 135和写指针溢出(overflow)信号WPTR_OFW 136。满逻辑单元165耦合于满比较器155。二进制到格雷码转换器152耦合于同步器164,以及格雷码到二进制转换器158耦合于同步器164。空比较器160接收格雷码到二进制转换器158的输出。空逻辑单元170耦合于空比较器160并生成存储器空信号180。FIFO读指针计数器125接收存储器空信号180。
[0023] 二进制到格雷码转换器154和空比较器160接收FIFO读指针信号RPTR 145和读指针下溢(underflow)信号RPTR_UFW 146。二进制到格雷码转换器154耦合于同步器162,以及格雷码到二进制转换器156耦合于同步器162。满比较器155接收格雷码到二进制转换器156的输出。满逻辑单元165接收满比较器155的输出并生成存储器满信号175。FIFO写指针计数器120接收存储器满信号175。
[0024] 图1中示出的常规异步FIFO电路100的运行在下面解释。FIFO写指针计数器120对写入数据存储器105中的数据包数量计数。而且,FIFO读指针计数器125对从数据存储器105清除的数据包数量计数。FIFO写指针信号WPTR 135指定数据存储器105中对应于当前写地址的行。FIFO读指针信号RPTR 145指定数据存储器105中对应于当前读地址的行。
[0025] FIFO读指针信号RPTR 145&读指针下溢信号RPTR_UFW 146通过二进制到格雷码转换器154、同步器162和格雷码到二进制转换器156与写时钟WCLK 102同步。这被执行以避免亚稳定性。满比较器155将FIFO写指针信号WPTR 135和写指针溢出信号WPTR_OFW136与从格雷码到二进制转换器156接收并与写时钟WCLK 102同步的FIFO读指针信号RPTR 145和读指针下溢信号RPTR_UFW 146(分别)比较。
[0026] 当FIFO读指针信号RPTR 145和FIFO写指针信号WPTR 135指定数据存储器105中的相同行时,满比较器155将向满逻辑单元165提供信号,并且,读指针下溢信号RPTR_UFW 146和写指针溢出信号WPTR_OFW 136不匹配,指示FIFO写指针信号WPTR 135溢出。满比较器155的输出由满逻辑单元165接收。基于满比较器155执行的比较结果,满逻辑单元165生成存储器满信号175。
[0027] 类似地,FIFO写指针信号WPTR 135&写指针溢出信号WPTR_OFW 136通过二进制到格雷码转换器152、同步器164和格雷码到二进制转换器158与读时钟RCLK 104同步。这被执行以避免亚稳定性。空比较器160将FIFO读指针信号RPTR 145和读指针下溢信号RPTR_UFW 146与从格雷码到二进制转换器158接收并与读时钟RCLK 104同步的FIFO写指针信号WPTR 
135&写指针溢出信号WPTR_OFW 136(分别)比较。
[0028] 当FIFO读指针信号RPTR 145和FIFO写指针信号WPTR 135确实指定数据存储器105中的相同行时,空比较器160也能够向空逻辑单元170提供信号,并且,读指针下溢信号RPTR_UFW 146&写指针溢出信号WPTR_OFW 136确实匹配,指示FIFO写指针信号WPTR 135未溢出。空比较器160的输出由空逻辑单元170接收。基于空比较器160执行的比较结果,空逻辑单元170生成存储器空信号180。
[0029] FIFO写指针信号WPTR 135和写指针溢出信号WPTR_OFW 136与FIFO读指针信号RPTR 145和读指针下溢信号RPTR_UFW 146的比较限制数据存储器105的工作频率并因此限制其吞吐率。常规异步FIFO电路100的性能取决于满比较器155和空比较器160的运行速度。
[0030] 在数据存储器105的深度(或数据存储器105的行数)增加时,FIFO写指针信号WPTR 135和FIFO读指针信号RPTR 145的大小成比例增加。因此,增加数据存储器105的行数降低数据存储器105的工作频率和吞吐率。
[0031] 图2示出根据一个实施例的异步FIFO(先入先出)电路200。异步FIFO电路200包括数据存储器205。数据存储器205包括2N行,并且2N行中的每一行存储M位,其中,M和N为整数。数据存储器205包括写地址列207、数据列208和读地址列209。写地址列207、数据列208和读N N
地址列209中的每一个具有2行。数据列208中的2行中的每一行存储M位。数据存储器205被示出具有从0到2N–1行、总数为2N行的行。
[0032] 数据存储器205耦合于写数据路径WDATA 210和读数据路径RDATA 215。数据存储器205还接收写时钟WCLK 202和读时钟RCLK 204。FIFO写指针计数器220接收写使能信号WEN 230和写时钟WCLK 202。FIFO写指针计数器220向数据存储器205提供FIFO写指针信号WPTR 235。FIFO读指针计数器225接收读使能信号REN240和读时钟RCLK 204。FIFO读指针计数器225向数据存储器205提供FIFO读指针信号RPTR 245。
[0033] 异步FIFO电路200还包括控制电路252。控制电路252包括置位-清零寄存器组250。置位-清零寄存器组250包括2N行。置位-清零寄存器组250被示出具有从0到2N–1行、总数为
2N行的行。因此,数据存储器205中的行数和置位-清零寄存器组250中的行数是相等的。在一个版本中,数据存储器205中的行数不等于置位-清零寄存器组250中的行数。
[0034] 置位-清零寄存器组250接收写使能信号WEN 230、读使能信号REN 240、FIFO写指针信号WPTR 235、FIFO读指针信号RPTR 245、写时钟WCLK 202和读时钟RCLK 204。写时钟WCLK 202与读时钟RCLK 204异步。
[0035] 控制电路252还包括写增量块255、多路复用器265以及写触发器275。写增量块255接收FIFO写指针信号WPTR 235。多路复用器265通过2N条输入线266耦合于置位-清零寄存器组250中的2N行中的每一行。多路复用器265还耦合于写增量块255。写触发器275耦合于多路复用器265并接收写时钟WCLK 202。写触发器275生成存储器满信号285。FIFO写指针计数器220接收存储器满信号285。
[0036] 控制电路252还包括读增量块260、多路复用器270以及读触发器280。读增量块260接收FIFO读指针信号RPTR 245。多路复用器270通过2N条输入线272耦合于置位-清零寄存器组250中的2N行中的每一行。多路复用器270还耦合于读增量块260。
[0037] 读触发器280耦合于多路复用器270并接收读时钟RCLK 204。在一个示例中,多路复用器270的输出被提供在读触发器280的NOT(非)端。读触发器280生成存储器空信号290。FIFO读指针计数器225接收存储器空信号290。异步FIFO电路200可以包括相关领域的技术人员已知的一个或更多个额外部件,不过,为了简化描述起见,不在这里讨论。
[0038] 图2中示出的异步FIFO电路200的运行在下面解释。FIFO写指针计数器220对写入数据存储器205中的数据包数量计数。而且,FIFO读指针计数器225对从数据存储器205清除的数据包数量计数。FIFO写指针计数器220存储当前的写地址,并且FIFO写指针信号WPTR235指定数据存储器205中对应于当前写地址的行。FIFO读指针计数器225存储当前的读地址,并且FIFO读指针信号RPTR 245指定数据存储器205中对应于当前读地址的行。
[0039] 当写使能信号WEN 230被断言时,FIFO写指针信号WPTR 235在写时钟WCLK 202的正边沿(positive edge)或负边沿(negative edge)中的一个边沿处增加。当读使能信号WEN 240被断言时,FIFO读指针信号RPTR 245在读时钟RCLK 204的正边沿或负边沿中的一个边沿处增加。在数据存储器205上执行的写操作与写时钟WCLK 202同步,以及在数据存储器205上执行的读操作与读时钟RCLK 204同步。写时钟WCLK 202与读时钟RCLK 204异步。
[0040] 置位-清零寄存器组250具有2N行。置位-清零寄存器组250响应于写使能信号WEN 230基于FIFO写指针信号WPTR 235写入一组状态位。置位-清零寄存器组250响应于读使能信号REN 240基于FIFO读指针信号RPTR 245清零该组状态位。在一个版本中,与异步FIFO电路200相关联的逻辑单元写入和清零置位-清零寄存器组250中的该组状态位。
[0041] 逻辑单元嵌入在异步FIFO电路200中或与异步FIFO电路200一起置于PCB(印刷电路板)上。置位-清零寄存器组250在2N行中写入一组状态位。置位-清零寄存器组中的2N行的每一行存储该组状态位的状态位。在一个示例中,每一行存储多个状态位。在另一示例中,状态位是位“1”和位“0”中的至少一个。
[0042] 在写操作期间,写使能信号WEN 230被断言。FIFO写指针信号WPTR 235指定数据存储器205中的2N行中对应于当前写地址的行。在写数据路径WDATA 210上接收的数据存储在数据存储器205中对应于由FIFO写指针信号WPTR 235指定的当前写地址的行中。置位-清零寄存器组250在置位-清零寄存器组250中的2N行中的行中写入状态位。置位-清零寄存器组250中的该行基于FIFO写指针信号WPTR235来选择。
[0043] 在一个示例中,置位-清零寄存器组250中的2N行中的每一行对应于数据存储器205中的2N行的行。例如,当写地址指定数据存储器205中的第一行时,状态位写入在置位-清零寄存器组250的第一行中。FIFO写指针信号WPTR 235增加以指定数据存储器205中的2N行中对应于下一个写地址的下一行。例如,FIFO写指针信号WPTR 235加1以指定数据存储器
205中的第二行。
[0044] 在读操作期间,读使能信号REN 240被断言。FIFO读指针信号RPTR 245指定数据存储器205中的2N行中对应于由FIFO读指针信号RPTR 245指定的当前读地址的行。存储在数据存储器205的行中的数据被传输到读数据路径RDATA 215。置位-清零寄存器组250清零置N位-清零寄存器组250中的2行中的该行中的状态位。置位-清零寄存器组250中的该行基于FIFO读指针信号RPTR 245来选择。
[0045] 例如,当写地址指定数据存储器205中的第一行时,存储在第一行中的数据被传输到读数据路径RDATA 215并且在置位-清零寄存器组250的第一行中的状态位被清零。FIFON读指针信号RPTR 245增加以指定数据存储器205中的2行中对应于下一个读地址的下一行。例如,FIFO读指针信号RPTR 245加1以指定数据存储器205中的第二行。
[0046] 控制电路252接收写使能信号WEN 230、读使能信号REN 240、FIFO写指针信号WPTR 235、FIFO读指针信号RPTR 245、写时钟WCLK 202和读时钟RCLK 204。当数据存储器205为满时,控制电路252生成存储器满信号285,当数据存储器205为空时,控制电路252生成存储器空信号290。
[0047] 控制电路252中的写增量块255接收FIFO写指针信号WPTR 235。写增量块255增加FIFO写指针信号WPTR 235规定整数值以生成写增量指针。在一个示例中,写增量块255将FIFO写指针信号WPTR 235加1。多路复用器265接收写增量指针作为选择线以从2N条输入线266选择一条线。多路复用器265耦合于置位-清零寄存器组250中的2N行中的每一行。
[0048] 因此,在示例中,当FIFO写指针信号WPTR 235指定数据存储器205的第一行时,写增量指针选择置位-清零寄存器组中的第二行。写触发器275接收多路复用器265的输出和写时钟WCLK 202并生成存储器满信号285。在一个版本中,写触发器275生成位“1”作为存储器满信号285。在另一版本中,写触发器275生成位“0”作为存储器满信号285。
[0049] 假设初始存储在置位-清零寄存器组250中的该组状态位具有位“0”的值。在一个示例中,当写时钟WCLK 202被断言并且在写数据路径WDATA 210上接收的数据存储在数据存储器205的第一行中时,置位-清零寄存器组250在置位-清零寄存器组250中的第一行中写入位“1”。写增量指针选择置位-清零寄存器组250中具有位“0”的第二行。因此,写触发器275生成位“0”以指示数据存储器205未满。
[0050] 控制电路252中的读增量块260接收FIFO读指针信号RPTR 245。读增量块260增加FIFO读指针信号RPTR 245规定整数值以生成读增量指针。在一个示例中,读增量块260将NFIFO读指针信号RPTR 245加1。多路复用器270接收读增量指针作为选择线以从2条输入线
272选择一条线。多路复用器270耦合于置位-清零寄存器组250中的2N行中的每一行。
[0051] 因此,在示例中,当FIFO读指针信号RPTR 245指定数据存储器205的第一行时,读增量指针选择置位-清零寄存器组中的第二行。读触发器280接收多路复用器270的输出和读时钟RCLK 204并生成存储器空信号290。
[0052] 当多路复用器270的输出被提供在读触发器280的NOT端时,多路复用器270的输出被反相并随后被读触发器280处理。在一个版本中,读触发器280生成位“1”作为指示数据存储器105为空的存储器空信号290。在另一版本中,读触发器280生成位“0”作为指示数据存储器105不为空的存储器空信号290。
[0053] 在完整的写操作后,假设初始存储在置位-清零寄存器组250中的该组状态位具有位“1”的值。在一个示例中,当读时钟RCLK 204被断言并且存储在数据存储器215的第一行中的数据被传输到读数据路径RDATA 215时,置位-清零寄存器组250清零置位-清零寄存器组250中的第一行中的位“1”。因此,置位-清零寄存器组250中的第一行具有位“0”。读增量指针选择置位-清零寄存器组250中具有位“1”的第二行。因此,读触发器280反相这个位“1”并生成指示数据存储器205不为空的位“0”。
[0054] 下面示出的表格1用于进一步解释异步FIFO电路200的操作。N为2。因此,数据存储器205和置位-清零寄存器组250中的每一个具有四行。数据存储器205中的这些行的地址是00、01、10和11。
[0055] 表格1
[0056]
[0057] 如表格1所示,从状态1到状态6,写使能信号WEN 230被断言并示为位“1”。在状态1中,FIFO写指针信号WPTR 235指向当前的写地址,该写地址是00。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址00。存储在置位-清零寄存器组250中的四个状态位是0000。因此,写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“1”以指示数据存储器205为空。因此,在状态1期间,在数据存储器205上执行写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 235加“1”。
[0058] 在状态2中,FIFO写指针信号WPTR 235指向当前的写地址,该写地址是01。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址01。由于,在状态1中,数据写入存储器地址00,置位-清零寄存器组250中的第一行的状态位转换为位“1”。因此,存储在置位-清零寄存器组250中的四个状态位是0001。写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“1”以指示数据存储器205为空。因此,在状态2期间,在数据存储器205上执行写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 235加“1”。
[0059] 在状态3中,FIFO写指针信号WPTR 235指向当前的写地址,该写地址是10。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址10。由于,在状态2中,数据写入存储器地址01,置位-清零寄存器组250中的第二行的状态位转换为位“1”。因此,存储在置位-清零寄存器组250中的四个状态位是0011。写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态3期间,在数据存储器205上执行写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 235加“1”。
[0060] 在状态4中,FIFO写指针信号WPTR 235指向当前的写地址,该写地址是11。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址11。由于,在状态3中,数据写入存储器地址10,置位-清零寄存器组250中的第三行的状态位转换为位“1”。因此,存储在置位-清零寄存器组250中的四个状态位是0111。写触发器275生成位“1”以指示数据存储器205为满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态4期间,在数据存储器205上执行写操作。然而,在状态4期间,暂停从数据存储器205到读数据路径RDATA 215的任何数据传输。由于数据存储器205为满,FIFO写指针信号WPTR 235未增加。
[0061] 如表格1所示,从状态5到状态8,读使能信号REN 240被断言并示为位“1”。在状态5中,FIFO读指针信号RPTR 245指向当前的读地址,该读地址是00。当读时钟RCLK 204为高时,存储在当前读地址00的数据被传输到读数据路径RDATA 215。存储在置位-清零寄存器组250中的四个状态位是0111。因此,写触发器275生成位“1”以指示数据存储器205为满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态1期间,在数据存储器205上执行读操作。由于数据存储器205为满,FIFO写指针信号WPTR 235未增加。由于数据存储器205不为空并且读使能信号REN 240被断言,FIFO读指针信号RPTR 245加“1”。
[0062] 在状态6中,FIFO读指针信号RPTR 245指向当前的读地址,该读地址是01。当读时钟RCLK 204为高时,存储在当前读地址01的数据被传输到读数据路径RDATA 215。由于,在状态5中,在存储器地址00的数据被读取,置位-清零寄存器组250中的第一行的状态位转换为位“0”。因此,存储在置位-清零寄存器组250中的四个状态位是0110。另外,由于写使能在状态6被断言并且写时钟WCLK 202为高,在写数据路径WDATA 210上接收的数据被存储在当前的写地址11。写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态6期间,在数据存储器205上同时执行读操作和写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 235加“1”。由于数据存储器205不为空并且读使能信号REN240被断言,FIFO读指针信号RPTR 245加“1”。
[0063] 在状态7中,FIFO读指针信号RPTR 245指向当前的读地址,该读地址是10。当读时钟RCLK 204为高时,存储在当前读地址10的数据被传输到读数据路径RDATA 215。由于,在状态6中,在存储器地址01的数据被读取并且该数据被写入存储器地址11,置位-清零寄存器组250的第二行的状态位转换为位“0”,以及置位-清零寄存器组250的第四行的状态位转换为“1”。因此,存储在置位-清零寄存器组250中的四个状态位是1100。写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态6期间,在数据存储器205上执行读操作。由于数据存储器205不为空并且读使能信号REN 240被断言,FIFO读指针信号RPTR 245加“1”。
[0064] 在状态8中,FIFO读指针信号RPTR 245指向当前的读地址,该读地址是11。当读时钟RCLK 204为高时,存储在当前读地址11的数据被传输到读数据路径RDATA 215。由于,在状态7中,存储器地址10的数据被读取,置位-清零寄存器组250中的第三行的状态位转换为位“0”。因此,存储在置位-清零寄存器组250中的四个状态位是1000。写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“1”以指示数据存储器205为空。因此,在状态8期间,在数据存储器205上执行读操作。然而,任何进一步的读操作都被搁置直到在数据存储器205上执行写操作。由于数据存储器205为空,FIFO读指针信号RPTR 245未增加。
[0065] 在状态9中,写使能信号WEN 230和读使能信号REN 240被断言。FIFO写指针信号WPTR 235指向当前的写地址,该写地址是00。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址00。存储在置位-清零寄存器组250中的四个状态位是1000。因此,写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“1”以指示数据存储器205不为空。因此,在状态1期间,在数据存储器205上执行写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 
235加“1”。
[0066] 在状态10中,写使能信号WEN 230和读使能信号REN 240被断言。FIFO写指针信号WPTR 235指向当前的写地址,该写地址是01。当写时钟WCLK 202为高时,在写数据路径WDATA 210上接收的数据被存储在当前的写地址01。而且,FIFO读指针信号RPTR 245指向当前的读地址,该读地址是11。当读时钟RCLK 204为高时,存储在当前读地址11的数据被传输到读数据路径RDATA 215。由于,在状态9中,数据写入存储器地址00,置位-清零寄存器组250中的第一行的状态位转换为位“1”。因此,存储在置位-清零寄存器组250中的四个状态位是1001。因此,写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态10期间,在数据存储器205上同时执行读操作和写操作。由于数据存储器205未满并且写使能信号WEN 230被断言,FIFO写指针信号WPTR 235加“1”。由于数据存储器205不为空并且读使能信号REN 240被断言,FIFO读指针信号RPTR 245加“1”。
[0067] 在状态11中,写使能信号WEN 230和读使能信号REN 240未被断言。由于,在状态10中,存储器地址11的数据被读取,置位-清零寄存器组250中的第四行的状态位转换为位“0”。而且,数据被存储在写地址01,因此,置位-清零寄存器组250中的第二行的状态位转换为位“1”。因此,存储在置位-清零寄存器组250中的四个状态位是0011。因此,写触发器275生成位“0”以指示数据存储器205未满,以及读触发器280生成位“0”以指示数据存储器205不为空。因此,在状态11时,异步FIFO电路200是空闲的。
[0068] 异步FIFO电路200消除了图1所示的常规异步FIFO电路100所需的比较器的需求。这大大提高了异步FIFO电路200的操作速度。而且,随着数据存储器205大小的增加,异步FIFO电路200的大小受到最小影响。然而,在常规异步FIFO电路100中,增加数据存储器205的大小将增加比较器的大小并因此对操作速度产生不利影响。
[0069] 而且,不需要同步异步FIFO电路200中的FIFO写指针信号WPTR235和FIFO读指针信号RPTR 245,这使得异步FIFO电路200不会由于亚稳定性而易于发生故障。因此,异步FIFO电路200提供增加的吞吐量和运行频率。另外,异步FIFO电路200是非常稳定的,并且甚至在读时钟RCLK 204和写时钟WCLK 202在接近范围内运行时,仍提供很好的性能。
[0070] 图3示出一种发生器电路300。注意,发生器电路300是实施发生器电路300的众多方式中的一种并且其变体以及其替代构造是明显的并且在本公开的实质和范围内。置位-清零寄存器组例如置位-清零寄存器组250(在图2中示出)中的2N行中的每一行包括发生器电路300。发生器电路300生成状态位。发生器电路300借助图2中示出的异步FIFO电路200来解释。
[0071] 发生器电路300包括第一触发器305、第二触发器310和异或非逻辑电路315。第一触发器305在使能端口(CE)接收写时钟WCLK202和写信号306。写信号306从写使能信号WEN 230和FIFO写指针信号WPTR 235获得。第一触发器305还通过反相器316接收由第二触发器
310生成的第二输出Q2312。反相器316反相第二输出Q2312并向第一触发器305提供反相的第二输出。反相的第二输出在第一触发器305的输入端口D接收。第一触发器305生成第一输出Q1314。
[0072] 第二触发器310在使能端(CE)接收读时钟RCLK 204和读信号308。读信号308从读使能信号REN 240和FIFO读指针信号RPTR 245获得。第二触发器310还在输入端口D接收第一输出Q1314。异或非逻辑电路315接收第一输出Q1314和第二输出Q2312。异或非逻辑电路315生成状态位S 320。发生器电路300可以包括相关领域的技术人员已知的一个或更多个额外部件,不过,为了简化描述起见,不在这里讨论。
[0073] 现在解释在图3中示出的发生器电路300的操作。当写使能信号WEN 230被断言并且FIFO写指针信号WPTR 235指定数据存储器205中的行时,写信号306为逻辑高或逻辑“1”。当写时钟WCLK 202在逻辑高时,第一输出Q1314在逻辑1并因此状态位S 320在逻辑“1”。当读使能信号REN 240被断言并且FIFO读指针信号RPTR 245指定数据存储器205中的行时,读信号308为逻辑高或逻辑“1”。当读时钟RCLK 204在逻辑高时,第二输出Q2312在逻辑“1”。因此,在先前的状态中,第一输出Q1314在逻辑“1”,状态位S 320在逻辑“0”。
[0074] 因此,第一输出Q1314在逻辑“1”,并且第二输出Q2312在逻辑“1”。当写使能信号WEN 230被再次断言并且写时钟WCLK 202在逻辑高时,第一输出Q1314转换为逻辑“0”,而第二输出Q2312保持在逻辑“1”。因此,状态位S 320转换为逻辑“1”。
[0075] 因此,第一输出Q1314在逻辑“0”,而第二输出Q2312在逻辑“1”。当读使能信号REN 240被再次断言并且读时钟RCLK 204在逻辑高时,第二输出Q2312转换为逻辑“0”,而第一输出Q1314保持在逻辑“0”。因此,状态位S 320转换为逻辑“0”。发生器电路300的操作在下面的表格2中进一步说明。表格2中的“X”代表逻辑“0”和逻辑“1”中的一个。
[0076] 表格2
[0077] 写信号 WCLK 读信号 RCLK Q1 Q2 S0 X 0 X 0 0 0
1 1 0 X 1 0 1
0 X 0 X 1 0 1
0 X 0 X 1 0 1
0 X 1 1 1 1 0
0 X 0 X 1 1 0
1 1 0 X 0 1 1
0 X 0 X 0 1 1
0 X 1 1 0 0 0
[0078] 图4是示出根据一个实施例的方法的流程图400。在步骤402,当写使能信号被断言时,与写时钟同步的写操作在数据存储器中执行。例如,在异步FIFO电路200中,当写使能信号WEN 230被断言时,与写时钟WCLK 202同步的写操作在数据存储器205中执行。在步骤404,响应于写操作,一组状态位被写入置位-清零寄存器组中。
[0079] 在一个示例中,当在数据存储器的行上执行写操作时,置位-清零寄存器组中的对应行的状态位被写为位“1”。FIFO写指针信号指定数据存储器中对应于当前写地址的行。FIFO写指针信号增加规定整数值以生成写增量指针。在一个版本中,FIFO写指针信号加1以生成写增量指针。写增量指针经配置指定置位-清零寄存器组中的后续行。如果FIFO写指针信号指定数据存储器的第一行时,写增量指针指定置位-清零寄存器组中的第二行。
[0080] 在步骤406,当数据存储器为满时,生成存储器满信号。在写操作期间,当数据存储器205中的2N行已被写入时,异步FIFO电路200生成存储器满信号。在一个示例中,当存储在置位-清零寄存器组中的后续行中的状态位被写入时,即当存储在置位-清零寄存器组中的后续行中的状态位为位“1”时,生成存储器满信号。
[0081] 在步骤408,当读使能信号被断言时,与读时钟同步的读操作在数据存储器中执行。例如,在异步FIFO电路200中,当读使能信号REN 240被断言时,与读时钟RCLK 204同步的读操作在数据存储器205中执行。
[0082] FIFO读指针信号指定数据存储器中对应于当前读地址的行。FIFO读指针信号增加规定整数值以生成读增量指针。在一个版本中,FIFO读指针信号加1以生成读增量指针。读增量指针经配置指定置位-清零寄存器组中的后续行。如果FIFO读指针信号指定数据存储器的第一行,读增量指针指定置位-清零寄存器组中的第二行。
[0083] 在步骤410,响应于读操作,清零置位-清零寄存器组中的该组状态位。在一个示例中,当在数据存储器的行上执行读操作时,置位-清零寄存器组中的对应行的状态位被清零或写为位“0”。在步骤412,当数据存储器为空时,生成存储器空信号。在读操作期间,当数据N存储器205中的2行已被读取时,异步FIFO电路200生成存储器空信号。在一个示例中,当存储在置位-清零寄存器组中的后续行中的状态位被清零时,即当存储在置位-清零寄存器组中的后续行中的状态位为位“0”时,生成存储器空信号。
[0084] 图5示出根据一个实施例使用异步FIFO电路的设备500。设备500是移动通信装置诸如移动电话、个人数字助理、收发器、个人计算机或任何其他类型的电子系统或被并入移动通信装置诸如移动电话、个人数字助理、收发器、个人计算机或任何其他类型的电子系统中。设备500可以包括相关领域的技术人员已知的一个或更多个额外部件,不过,为了简化描述起见,不在这里讨论。
[0085] 设备500包括第一装置505和第二装置510。第一装置505和第二装置510是下列装置但不局限于下列装置中的一个:计算装置、处理单元、存储器模块和测试器。处理单元能够是例如CISC型(复杂指令集计算机)CPU、RISC型CPU(精简指令集计算机)或数字信号处理器(DSP)。存储器模块可以是诸如RAM、闪存或磁盘存储的存储器。在一个示例中,第一装置505和第二装置510是智能或有源装置。在另一示例中,第一装置505和第二装置510中的至少一个是无源装置。
[0086] 设备500包括耦合在第一装置505和第二装置510之间的异步发送FIFO电路515和异步接收FIFO电路520。异步发送FIFO电路515和异步接收FIFO电路520中的至少一个在连接和操作方面类似于异步FIFO电路200。
[0087] 在一个示例中,异步发送FIFO电路515和异步接收FIFO电路520中两者均类似于异步FIFO电路200。异步发送FIFO电路515(或异步接收FIFO电路520)消除了常规异步FIFO电路中所需的比较器的需求。这大大提高异步发送FIFO电路515(或异步接收FIFO电路520)的运行速度。
[0088] 而且,不需要同步异步发送FIFO电路515(或异步接收FIFO电路520)中的写指针信号和读指针信号,这使得异步发送FIFO电路515(或异步接收FIFO电路520)不会由于亚稳定性而易于故障。因此,异步发送FIFO电路515(或异步接收FIFO电路520)提供增加的吞吐量和运行频率。另外,异步发送FIFO电路515(或异步接收FIFO电路520)是非常稳定的,并且甚至在读时钟和写时钟在接近的范围内运行时,仍提供很好的性能。
[0089] 在前面的讨论中,术语“连接”至少意味着连接装置之间的直接电气连接或通过一个或更多个无源中间装置的间接连接。术语“电路”至少意味着连接在一起提供预期功能的单个部件或多个无源部件。术语“信号”意指电流、电压、电荷、数据或其他信号中的至少一种。而且,术语“耦合”或“与...耦合”(等)旨在描述间接或直接电气连接。因此,如果第一装置耦合于第二装置,该连接可以是通过直接电气连接或经由其他装置和连接的间接电气连接。
[0090] 此外,术语“高”通常旨在描述逻辑“1”的信号,以及术语“低”通常旨在描述为逻辑“0”的信号。应用于晶体管或晶体管组的术语“接通”通常旨在描述栅极偏置以允许电流流过晶体管或多个晶体管。而且,术语“失活”或“无效”或“把...断开”用于描述装置、部件或信号的非活性化。术语“激活”或“激活的”或“把...接通”描述装置、部件或信号的激活。
[0091] 前面的描述阐述很多具体细节以传达本发明的透彻理解。不过,对本领域的技术人员来说明显的是,可以在没有这些具体细节的情况下实践本发明。有时候未详细描述众所周知的特征以避免模糊本发明。鉴于上述教导,其他变体和实施例是可能的,并且,本发明的范围不是由具体实施方式来限制,而是由所附权利要求来限制。