无需同步器的自填充多时钟fifo的利记博彩app
【专利摘要】本发明公开了一种消除了对于同步器的需求的异步先入先出存储设备。所述设备包括多个数据寄存器的流水线。这些数据寄存器包括用于接受数据写入的第一个寄存器和用于数据读取的最后一个寄存器。各寄存器都具有能够表明允许读取操作的满状态和允许写入操作的空状态的使能输入。气泡插入器电路将气泡插入到所述第一个寄存器中,以防止所有寄存器都出现全空状态。各控制器与各寄存器相关联,以使得所述气泡或所写入的数据能够从所述第一个寄存器传递至所述最后一个寄存器。近空检测电路被耦合至各寄存器,以判定所述流水线的近空状态。当所述多个寄存器是近空时,仲裁器判定对所述第一个寄存器是进行数据写入还是进行气泡插入。
【专利说明】
无需同步器的自填充多时钟FIFO
技术领域
[0001]本发明一般涉及数据寄存器,且更具体地,涉及用于存储操作的FIFO电路的使用。
【背景技术】
[0002]多年以来,在用于缓冲和流量控制的数字化设计中使用先入先出(FIF0:firstinfirst out)存储寄存器已经十分普遍了。用于内部连接的系统化芯片(S0C:system onchip)和网络化芯片(NOC: networks on chip)的出现已经使得确保芯片或晶片(die)上的正确的数据流量成了当务之急。这类网络中的各种各样的计算部件通常在不同的时钟下被同步化。因此,这类系统中的数据传输需要异步先入先出(asynchronous FIFO)寄存器,以便帮助在被不同地计时的部件之间传输数据。
[0003]异步FIFO指的是这样的FIFO设计:其中,使用一个时钟域将数据值顺序地写入到FIFO缓冲器中,并且使用另一个时钟域从该同一个FIFO缓冲器中顺序地读取这些数据值,此处这两个时钟域是彼此异步的。先入先出(FIFO)缓冲器充当如下两个异步器件之间的存储缓冲器:这两个异步器件各自都具有对该FIFO的同时写入和读取访问。这样的访问是彼此独立的。被写入到FIFO中的数据以流水线的方式被顺序地读出。因此,被写入到FIFO中的第一个数据字将会是第一个被读出的数据字。FIFO的基本架构具有写端口、读端口和存储位置。各端口都具有它自己的指向存储器中的某一位置的关联指针。在复位之后,写指针和读指针两者都将会处于FIFO内的存储寄存器为空的第一存储位置处。当写地址寄存器再次到达读地址寄存器时,FIFO寄存器就满了。每个写操作将会使写指针发生增量至存储器中的下一个地址,由此填充寄存器,而当清空各寄存器时,每个读操作将会使读指针发生增量至下一个存储位置。
[0004]为了使读操作和写操作同步化,同步器电路被用来比较上述两个指针的地址。这样的比较将会判定FIFO是空的还是满的,并且由此判定是可以执行读操作还是可以执行写操作。同步器包括用来比较读侧的数据地址和写侧的数据地址的诸如触发器(flip flops)等逻辑器件。这样的电路在延迟和可靠性二者间做出权衡。可靠性要求更多级的触发器电路,但是由于地址比较必须经过各个触发器级,所以更多级的触发器电路就会增加上述同步化的延迟。在传统的FIFO中,状态信号(或被用来生成这些状态信号的地址)必须在被运用于接收时钟域(receiving clock domain)中之前就通过同步器。这些同步器中的级计数确定它们的延迟/可靠性权衡关系。
[0005]在设计异步FIFO时的一种常规技术是使用格雷码(Graycode)指针,且在生成同步的FIFO满或空状态信号之前,这些格雷码指针被同步化到一个相反时钟域中。一种格雷码计数器风格使用单组的触发器作为格雷码寄存器。当在异步FIFO中在独立的时钟域之间传输指针信息时,该指针的新的或旧的各个位都需要被发送。如果多位指针(mult1-bitpointer)中的不止一位在采样点处发生改变,那么不正确的二进制值就可能被传送。格雷码通过保证只有一位能够发生改变,就保证了仅仅可能存在的采样值是新的或旧的多位值,由此能够确保可靠的用于表明写寄存器和读寄存器是满还是空的标志信息。
[0006]这个设计需要各端口中的多位同步器,以便使另一个端口的地址寄存器是能用的。因为许多位需要同时被同步化,所以这个同步器是比较大的,而且为了使同步化能够表现良好,这些位可能需要进行与格雷码的相互转换。在该设计中,这个同步器还被安置在固定位置中,这导致了固定的延迟/可靠性权衡关系。这个权衡关系得自于如下的事实:同步器具有的时间越多,它带入到周围系统中的延迟就越大,并且它的操作就越可靠。
【发明内容】
[0007]一个实例是如下一种先入先出(FIFO)存储设备:它包括用于流水线中的各寄存器的额外位,以表明气泡的插入,由此防止了FIFO总是处于全空状态(completely emptystate)中且消除了对同步化电路的需求。所述FIFO存储设备包括寄存器的流水线,这些寄存器包括以第一时钟速度从写设备接受数据的第一个寄存器和允许读设备以不同的第二时钟速度读取数据的最后一个寄存器。所述FIFO存储设备具有近空(near empty)检测电路,所述近空检测电路将会致使气泡插入器电路把气泡插入到所述第一个寄存器中且把标志设置于表明气泡的所述额外位中。这不需要所述读设备与所述写设备之间的同步化,这是因为:由于利用所述气泡所述寄存器将永远不会空,那么如果所述读设备的时钟速度更快,就能够一直执行读取。对具有表明气泡的所述位的寄存器不执行读操作。因为所述FIFO永远不会空,所以不需要同步,因此减少了已知的FIFO寄存器中的同步化电路所要求的延迟。
[0008]根据参照附图而给出的各个实施例的详细说明,本领域普通技术人员将会更加清楚本发明的其他方面。下面提供了附图的简要说明。
【附图说明】
[0009]通过阅读下列详细说明且通过参照附图,前述的和其它的优点将变得更清晰。
[0010]图1是晶片上的处理系统的框图;
[0011]图2是被用于图1中的处理系统晶片上的自填充(self-stuffing)异步FIFO存储设备的实例的框图;
[0012]图3A是适合于控制图2的自填充FIFO存储设备中的寄存器的简单控制器的实例的框图;
[0013]图3B是用于控制图2的自填充FIFO存储设备中的寄存器、且具有单线输入和输出的控制器的实例的框图;
[0014]图4A是图2的自填充FIFO存储设备中的气泡插入器电路的实例的框图;
[0015]图4B是图4A中的气泡插入器电路在使用了D锁存器情况下的变形;
[0016]图5是图2的自填充FIFO存储设备中的近空检测电路的实例的框图;
[0017]图6是自填充FIFO存储设备在具有协议转换器情况下的另一个实例;
[0018]图7A和图7B是被用于图6的FIFO存储设备中的协议转换器的实例;和
[0019]图8是利用单独的读信用系统(readcredit system)来使得能够针对于发送器和接收器两者具有不同的时钟速度的自填充FIFO存储设备的实例。
[0020]本发明可以采取各种各样的修改和替代形式,但是这里通过附图中的实例示出了具体的实例,并且将会在下面详细说明这些具体的实例。然而,应当理解的是,本发明并非旨在受限于所公开的特定形式。相反,本发明理应涵盖落入到如随附权利要求所限定的本发明的主旨和范围内的所有变型例、等同物和替代方案。
【具体实施方式】
[0021]包括了集成电路部件晶片中的数据交换的计算系统的一个说明性实例是根据图1中所示的实施例的可编程逻辑器件(PLD:programmable logic device) 100。可编程逻辑器件100具有输入/输出电路110,所述输入/输出电路110用于将可编程逻辑器件100的信号传送出去且用于经由输入/输出引脚120从其它器件接收信号。诸如全局和局部的垂直导线和水平导线以及总线等互连资源115可以被用来路由(route)可编程逻辑器件100上的信号。
[0022]输入/输出电路110包括传统的输入/输出电路、串行数据收发器电路、微分收发机电路、或者其它的被用来将一个集成电路连接至另一个集成电路的电路。
[0023]互连资源115包括导线和各个导线之间的可编程连接,且因此互连资源115有时被称为可编程互连线115。
[0024]可编程逻辑区域140可以包括可编程部件,例如数字信号处理电路、储存电路、运算电路、或者其它的诸如可配置寄存器电路等组合和时序逻辑电路。作为实例,所述可配置寄存器电路可以作为传统寄存器来运行。可替代地,所述可配置寄存器电路可以作为具有误差检测能力和误差校正能力的寄存器来运行。
[0025]可编程逻辑区域140可以被构造成执行定制的逻辑功能。可编程逻辑区域140也可以包括用于执行既定应用程序且具有有限可配置性的专用块。例如,可编程逻辑区域140可以包括诸如可配置储存块、可配置处理块、可编程锁相环电路、可编程延时锁定环电路等专用块,或者其它的具有可能有限的可配置性的专用块。可编程互连线115也可以被认为是一种类型的可编程逻辑区域140。
[0026]可编程逻辑器件100包含可编程存储元件130。存储元件130能够利用引脚120和输入/输出电路110而被加载配置数据(也称为编程数据)。一旦被加载,这些存储元件各者就提供相应的静态控制信号以用于控制可编程逻辑区域140中的相关逻辑部件的操作。在典型情景中,加载后的存储元件130的输出被施加至可编程逻辑区域140中的金属-氧化物-半导体晶体管的栅极,以使某些晶体管接通或关断,且由此配置可编程逻辑区域140中的逻辑和路由路径。可以以这种方式被控制的可编程逻辑电路元件包括多路复用器(例如,被用来形成可编程互连线115中的路由路径的多路复用器)、查找表、逻辑阵列、与(AND)逻辑门、或(OR)逻辑门、与非(NAND)逻辑门、或非(NOR)逻辑门、选通门(pass gate)等等各部分。
[0027]存储元件130可以使用任何合适的易失性和/或非易失性存储器结构,例如随机存取存储器(RAM:random-access-memory)单元的结构、恪丝结构、反恪丝结构、可编程只读存储器存储单元的结构、掩模编程结构、激光编程结构、上述这些结构的组合,等等。因为存储元件130是在编程的期间内被加载配置数据的,所以存储元件130有时被称为配置存储器、配置RAM(CRAM:configurat1n RAM)或可编程存储元件。
[0028]可编程逻辑器件100中的电路可以使用任何合适的架构而被组织起来。作为实例,可编程逻辑器件100的逻辑可以被组织在较大可编程逻辑区域中的一系列的行和列中,各个所述较大可编程逻辑区域都包含多个较小的逻辑区域。这些较小的区域例如可以是有时被称为逻辑元件(LE:logiC element)且各自都包含查找表、一个或多个寄存器、及可编程多路复用器电路的逻辑区域。这些较小的区域例如也可以是有时被称为适应性逻辑模块(ALM: adaptive logic module)、可配置逻辑块(CLB:configurable logic block)、分区、半分区(half-slice)等等的逻辑区域。各个适应性逻辑模块都可以包括一对加法器、一对相关寄存器、及查找表或者其它的共用组合逻辑块(即,来自一对LE—在本上下文中,有时被称为适应性逻辑元件或ALE—的资源)。所述较大区域例如可以是逻辑阵列块(LAB: logicarray block)或者是包含例如多个逻辑元件或多个ALM的逻辑区域的逻辑簇。
[0029]在器件编程的期间内,配置数据被加载到可编程逻辑器件100中,该配置数据配置可编程逻辑区域140以使得它们的逻辑资源执行所期望的逻辑功能。例如,所述配置数据可以将可配置寄存器电路的一部分配置成作为传统寄存器来运行。如果需要,所述配置数据可以将某个可配置寄存器电路配置成作为具有误差检测能力和误差校正能力的寄存器来运行。
[0030]FIFO存储设备经常被简单地插入,以补偿在诸如图1中的PLD 100等具有能够交换数据的多个器件的系统中的发送设备与接收设备之间的未知相位关系。另一种常见情况是如下的源同步链路:在该源同步链路中,发送器和接收器设备的时钟最终来源于同一个时钟源但是在各自情况下具有未知的相位。在这种情景下,可以使用没有同步化电路的更简单FIFO存储设备。
[0031]图2是基于流水线的增加了自填充电路的自填充FIFO存储设备200的框图,所述自填充电路用于插入气泡并由此消除对同步化电路的需求。气泡是一组虚设值(dummyvalue),它们替代诸如通过前一次写入已经被读取的值而被存储于相应寄存器中的数据等实际数据。FIFO存储设备200包括以流水线的方式布置着的一系列寄存器202、204、206和208,以便将利用写设备而写入到第一个寄存器202中的数据传递给第二个寄存器204,并且顺序地传递至最后一个寄存器208以便利用读设备而被读取。在这个实例中,从第一时钟被计时的写设备或发射器设备对第一个存储寄存器202进行写入,而另一个从不同的第二时钟被计时的读设备或接收器设备从最后一个寄存器208中进行读取。寄存器202和208分别通过数据输入总线210和数据输出总线212而被访问。
[0032]寄存器202、204、206和208中的各者都具有相关的I位锁存器222、224、226和228。如下面将要解释的那样,所述I位锁存器222、224、226和228表明气泡是否已经被插入到特定的相关寄存器中。尽管在这个实例中存在着四个寄存器,但是需要理解的是,FIFO存储设备200中能够有任何数量的寄存器。寄存器202、204、206和208中的各者和它们的相关的I位锁存器222、224、226和228是由相应的锁存控制器电路232、234、236和238控制的。这些锁存控制器电路中的各者(例如,锁存控制器电路232)具有使能输出E、接收器端口 L和发射器端口 R。如图2所示,当针对流水线中的各个相应寄存器顺序地执行写入时,信号可以从一个控制器(例如,控制器232)的发射器端口 R被传递给下一个控制器234的接收器端口 L。对应地,当执行读取时,信号可以从一个控制器(例如,控制器238)的接收器端口L被传递给流水线中的下一个控制器236的发射器端口 R。针对于各个寄存器和I位锁存器的所述锁存控制器接收读请求和写请求,并且对相应的寄存器和I位锁存器是否被使能(寄存器202、204、206和208以及锁存器222、224、226和228上的相应的输入E1-E4)进行控制,由此使得数据能够被写入或不能写入(表明该寄存器具有已存储的要被读取的数据)。具体地,当寄存器(例如,寄存器208)已经被读取时,那么它的控制器(例如,控制器238)就改变它的使能输入(E4),以使得来自所述写设备或前一个寄存器的数据能够被写入。
[0033]在这个实例中,近空检测电路240被耦合至锁存控制器232、234、236和238的使能输出。自填充电路或气泡插入器电路250被親合至第一个I位锁存器222和第一个锁存控制器232。这个实例中的FIFO存储设备200是在如下情况下运行的:假设用于调节将数据写入至FIFO存储设备200的第一个寄存器202中的那些设备的时钟的运行速度等于或低于用于调节对该数据进行读取的那些设备的时钟的运行速度,且因此FIFO存储设备200可能变空。为了补偿这个可能性,就像如果FIFO存储设备200远远低于半满时所需要的那样,气泡插入器电路250可以将“气泡”插入到与其它的寄存器204、206和208—起呈流水线的方式布置着的第一个寄存器202中,并由此避免了使用同步化电路来检测FIFO存储设备200中的完全物理空条件。
[0034]如图2所示,近空检测电路240具有针对于由锁存控制器232、234、236和238控制的寄存器202、204、206和208的各个使能状态信号的输入端。气泡插入器电路250包括写握手连接(write handshake connect1n)252和堵塞输入(JAM input)254。气泡插入器电路250包括写握手连接256和气泡标志输出258。写使能握手连接256输出被耦合至连续的锁存控制器232、234、236和238中的各者的接收器端口L的信号,并因此利用经由E输出将使能信号输出至使能输入El至E4的连续的锁存控制器232、234、236和238中的各者来使能相应的寄存器202、204、206和208,以使该寄存器接收将要从数据输入总线210写入的且以流水线的方式通过寄存器202、204、206和208的数据。来自接收器端口 L的信号致使各个连续的锁存控制器将该信号经由发射器端口 R发送至下一个控制器的接收器端口 L。锁存控制器232、234、236和238还使能相应的I位锁存器222、224、226和228以便写入零来表明气泡的存在。气泡标志输出258被耦合至第一个I位锁存器222。如下面所解释,气泡标志输出258将零存储于被使能的I位锁存器222中,以表明存储于相应的寄存器202中的气泡的存在。随着气泡通过寄存器204、206和208的流水线而被传送,该零就分别被传递给各个连续的I位锁存器224、226和228,以表明气泡的存在。对最后一个寄存器208的读取是从输出数据总线212来完成的,且是利用读握手连接(read handshake connect1n)260而被触发的。成功的读取致使各个进程寄存器中的数据被写入流水线中的下一个寄存器中。在有气泡的情况下,最后一个I位锁存器228中的零将会表明气泡,且因此读设备不从最后一个寄存器208中读取该气泡。
[0035]图2中的基本组的寄存器202、204、206和208具有如下的非常令人期望的性能:如果全部的寄存器被初始化为半满(例如,每隔一个寄存器级包含数据),且它的端点时钟具有相同的频率,那么寄存器将永远不会变空或变满,并且因为在寄存器202、204、206和208中能够一直发生读或写,所以读和写将会永远不需要被同步化。即使端点时钟具有未知的(但仍然是固定的)相位关系,也同样如此。
[0036]在图2中的FIFO存储设备200的运行中,写设备的时钟速率总是等于或低于读设备的时钟速率。以这种方式,将永远不会出现如下的情形:数据被重写在还没有被读取的寄存器中。如果从写握手连接252接收到写请求信号,那么气泡插入器电路250将会通过写握手连接256发送写使能信号。锁存控制器232将会通过把使能高信号发送至寄存器202以使能输入El,来使寄存器202能够接受来自数据输入总线210的数据。在这种情况下,因为真实的数据字被写入,所以气泡标志输出258将锁存器222设定成高以表明真实数据现在被存储于寄存器202中。
[0037]在读请求的情况下,下游消费者将读握手连接260上的读信号断言(assert)为低且传递给最右边的锁存控制器238的发射器端口 R。该读信号被保持为低,且以从该控制器的接收器端口 L到下一个控制器的发射器端口 R的方式被顺序地发送至连续的锁存控制器236、234和232中的各者。在接收到读信号的时候,相应的锁存控制器238、236、234和232致使低使能信号被发送至相应的寄存器208、206、204和202。因为来自锁存控制器238的使能信号对于寄存器208是低的,所以寄存器208中的数据可以在数据输出总线212上被读取和输出。在从寄存器208中读取了数据之后,读握手连接260返回高,且通过最右边的锁存控制器238将使能信号设定为针对于寄存器208是高的,这使得数据能够从寄存器206被写入寄存器208中。针对各个前述的寄存器重复这个过程,由此使数据或气泡通过寄存器202、204、206和208的流水线而移动。因此,在该过程结束的时候,第一个寄存器202最终将会是物理空的(既没有数据也没有气泡)。如果针对最后一个寄存器208而将锁存器228设定为低,那么气泡被存储于寄存器208中且读设备将不会接收到有效数据。然而,该过程将会继续把其它数据输送通过寄存器202、204、206和208,从而导致空的第一个寄存器202。
[0038]近空检测电路240检测是否存在近空条件,其被定义为寄存器202、204、206和208中的少于两个寄存器是满的。这个检测的出现是为了防止所有的寄存器202、204、206和208为空的情形。近空检测电路240将检测出这样的近空情形,且将堵塞输出信号发送至气泡插入器电路250的堵塞输入254。气泡插入器电路250将气泡“插入”第一个寄存器202中,且将锁存器222中的气泡标志设定为低以表明有气泡被存储于第一个寄存器202中。气泡仅仅是用于替代实际数据的将会被读设备忽略的虚设数据值,且因此简单地使用寄存器202中的任何值作为气泡的“插入”。于是,当数据通过寄存器202、204、206和208的流水线而被移动时,气泡被添加到通过寄存器而移动的数据的序列中且顺序地被写入寄存器204中。气泡起到防止空的情形的作用,并因此消除了使读操作与写操作同步化的需要。当气泡通过寄存器202、204、206和208的流水线而被传递时,气泡标志被传递至相应的锁存器222、224、226和 228 0
[0039]图3A是基于转变信令(transit 1n-signaling-based)的版本的锁存控制器电路300的电路图,锁存控制器电路300可以被用作图2中的锁存控制器电路232以控制从相应的寄存器202向该寄存器204的数据写入。锁存控制器电路300包括D锁存器302和异或门(X0Rgate)304。锁存控制器电路300包括请求输入312和请求输出314。锁存控制器电路300具有确认输入316和相应的确认输出318。使能输出320被耦合至相应的寄存器以发送使能信号,从而使得数据能够被写入寄存器中。这个使能输出是电平敏感和高电平有效的,但是所有的其它输入和输出都使用转变信令。利用转变信令,通过信号变化值来表明一个事件,但是该值本身并不重要。
[0040]当在请求输入312上接收到针对在寄存器上进行写操作的请求转变时,该请求经由D锁存器302而被向前传递至请求输出314,请求输出314将该请求向前传递至下一个控制器。请求输出314还改变异或门304的一个输入。因此,异或门304的输出将会从高下降到低,并且经由使能输出320来清除相应的寄存器的使能信号以便指示该寄存器锁存等待数据(waiting data)。异或门304的输出还被连接至D锁存器302的使能输入,并且异或门304的输出的下降将会使D锁存器302的输出与D输入断开,直到受控制的该寄存器的内容稍后被读出为止。
[0041]D锁存器302的输出还能够通过确认输出318而被发送回来,以表明已经接收到写请求。当最后一个锁存控制器238接收到该请求转变时,确认信号被发送至与异或门304的另一个输入连接的确认输入316,并且使能输出320被设定成高以使能对寄存器的写入(因为下一个寄存器已经确认吸收了它的内容),且使得该寄存器能够重新被写入。通过异或门304的高输出而使D锁存器302成为透明的。图3A中的锁存控制器电路300遭受额外的延迟,因为它需要所有信号都通过异或门304和锁存器子电路。
[0042]图3B是锁存控制器电路350(例如,图2中的锁存控制器电路232)的另一个实例的电路图。图3A中的控制器使用转变信令,而图3B使用电平敏感型脉冲信令,也称为四相信令(four-phase signaling),但是它是通过共用线来这样实现的,所以需要相同数量的转变。因为图3B中的控制器使用了更简单的部件,所以它还具有更小的延迟,因此它被实施于图2的存储设备200中。参照图2,锁存控制器350包括接收器引脚352(L)和发射器引脚354(R)。假设控制器350是针对于图2中的最左边的寄存器202的第一个控制器232,那么接收器引脚352被耦合至来自图2中的气泡插入器电路250的写使能输出256,同时发射器引脚354(R)被顺序地耦合至下一个锁存控制器234的接收器引脚L。锁存控制器电路350包括使能输出356(E),该使能输出356(E)被耦合至图2中的相应的寄存器和I位锁存器的使能输入且被耦合至近空检测电路240的输入。
[0043]锁存控制器350是单线电平敏感型设计,其此后由用于表征图2中所示的锁存控制器232的圆圈符号来表示。锁存控制器350包括输入接收器/转换器电路362(在图3B中的左边)和输出转换器/发射器电路364(在图3B中的右边)。向与非门366的输入是来自接收器输入352和发射器输入354的信号。与非门366的一个输出被親合至反相器368。与非门366和反相器368构成了在接收器电路362与发射器电路364之间的协调/同步化电路。
[0044]输入接收器电路362包括PFET(p沟道场效应晶体管)370,PFET370的栅极通过反相器372而被耦合至来自接收器输入引脚352的输入信号。PFET 370和反相器372形成了将左边接收器输入352保持为高的半锁存电路中的循环。接收器/转换器电路362包括PFET374,PFET 374与PFET 370串联且PFET 374的栅极被耦合至与非门366的反相输出。NFET(n沟道场效应晶体管)376与PFET 374串联耦合,且NFET 376的栅极被耦合至反相器368的输出。因此,PFET 374起到如下的三态控制的作用:当NFET 376接通时,该三态控制使所述半锁存器断开,这就避免了争用。如果锁存控制器350是中间的一个锁存控制器(例如,图2中的锁存控制器234),那么左边接收器引脚352被位于锁存控制器350左边的前一个锁存控制器中的半锁存器保持为低状态。
[0045]右边半个输出电路364包括NFET 380,NFET 380的栅极通过反相器382而被耦合至右边发射器引脚354 JFET 380和反相器382形成了将右边发射器引脚354保持为低的半锁存器中的循环。NFET 384与NFET 380串联耦合,且NFET 384的栅极被耦合至与非门366的输出。NFET 384起到如下的三态控制的作用:当通过发射器引脚354的输出驱动器经由PFET386而接通时,该三态控制使该半锁存电路断开,由此避免争用。右边发射器引脚354被位于锁存控制器350右边的下一个锁存控制器中的半锁存器保持为高状态。PFET 386与NFET384串联耦合,且PFET 386被与非门366的输出所控制,这里与非门366的输出被耦合至PFET386的栅极。使能输出356是右边发射器引脚354的反相状态,因为使能输出356是反相器382的输出。
[0046 ]在这个实例中,锁存控制器3 5 O被用作图2中的锁存控制器(例如,锁存控制器232)。因此,每一对去往右边的请求信号和去往左边的确认信号被呈接收器引脚(L)352和发射器引脚(R)354这样形式的单个双向线取代。图3B中的控制器电路350包括接收器/转换器362、转换器/发射器364、以及在转换器362与364之间的协调/同步化电路(与非门366和反相器368)。“转换器”指的是在单个双向线与一对单向线之间的转换。
[0047]当利用气泡插入器电路250发送了写请求时,在接收器引脚352中接收到高信号。该高的输入信号被反相器372反相且使PFET 370接通。这是在接收器侧的半锁存器,只要需要且直到断开为止,该半锁存器都使输入信号保持为高。该高信号还被输入至与非门366的一个输入中,当与非门366的通过反相器382与发射器引脚354親合的另一个输入为低或稍后变为低时,所述与非门366将会产生低信号。来自与非门366的该低信号被反相器368反相且将PFET 374关断,由此使半锁存器与接收器引脚352断开。当从发射器引脚354接收到读请求时,与非门366的输出变为低。来自与非门366的该低输出被反相器368反相且使NFET376接通。NFET 376因此将接收器引脚352拉低。这起到对接收器引脚352上的请求的“自复位(self-reset)”作用和对执行该写入操作的上游电路的确认作用。
[0048]来自与非门366的该低输出还将NFET 380关断,由此使由反相器382和NFET 380形成的半锁存器断开(该半锁存器的断开(依赖于它的状态)可以使发射器引脚354保持为低),并且该低输出使PFET 386接通。现在在引脚354处的高信号被反相器382反相然后将低信号提供给与非门366。来自反相器382的该反相信号也是来自使能输出356的使得相应的寄存器能够接受读取的输出使能信号。
[0049]发射器引脚354上的高状态表明在寄存器中存在有要被读取的数据。该信号被反相器382反相,这致使低输出被发送至与非门366 ο来自反相器382的反相信号还将使能输出356设定为低,且防止对寄存器的任何写入。这个低值致使与非门366的输出变为高,该高输出就使NFET 384接通,由此使发射器引脚354上的半锁存器重新连接以维持它目前的高电平,并且该高输出把先前将发射器引脚354拉高以表明这种状态下的新数据的PFET 386关断。这为随后的用于读取现在在本级中的数据的读请求准备了电路。
[0050]图4A是图2中的气泡插入器电路250的实例的电路图。图4A中所示的气泡插入器电路250包括单线接收器/转换器410、单线转换器/发射器412、和在接收器410与发射器412之间的仲裁器414。锁存器420被耦合至仲裁器414,以保持该仲裁的结果。输入锁存器422保持来自堵塞输入254的堵塞输入信号的值。
[0051 ]与图3B中的锁存控制器350相似,接收器/转换器410读取来自写握手连接252的信号。该信号被馈送至与PFET 442耦合的反相器440中。PFET 442与PFET 444及NFET 446串联连接。PFET 442和PFET 444形成了用于使写握手连接252保持为高的半锁存器。当已经出现了写入时,NFET 446允许写握手连接252的复位。
[0052]转换器/发射器412包括反相器450,反相器450的输入被親合至写握手连接256。PFET 452与NFET 454及另一个NFET 456串联连接。PFET 452和NFET 454是由或非门464控制的。NFET 456是通过还含有反相器450而被构建成的半锁存器的一部分。NFET 456的栅极被耦合至反相器450的输出。在下游级将写握手连接256拉低以确认收到了数据读取之后,半锁存器使该写握手连接256保持为低。
[0053]仲裁器414包括反映写请求的第一输入430和反映堵塞请求的第二输入432。仲裁器414包括第一输出434和第二输出436,第一输出434准许来自图2中的写握手连接252的写请求,第二输出436准许来自堵塞输入254的堵塞请求。假设堵塞请求和写请求同时被接收至IJ,那么仲裁器414就会决定哪个请求获胜。在这个实例中,仲裁器414具有无限的计算时间以判定是写入新数据还是插入气泡。输出434和436分别被耦合至一对与门460和462的一个输入。与门460和462的输出被耦合至或非门464,或非门464的输出被耦合至PFET 452和NFET 454的栅极。
[0054]如上所述,当新的常规数据被接收到以被写入FIFO存储设备200中时,写握手连接252被设定成高,而当需要气泡时,堵塞输入254通过图2中的近空检测电路240而被设定成高。当接收到写请求时,该信号被发送至仲裁器414的输入430,且从仲裁器414的输出434输出一个高信号。当该写请求是第一次接收到时,随之而来的堵塞输入254上的堵塞请求最初被忽略且被保持在与第二输入432连接的锁存器422中,直到第一输入430接收到低信号为止。来自输出434的所述高信号被输入至与门462。与门462的第二输入是写握手连接256的反相信号。该写握手连接为低状态,因此高信号从与门462被输出,这导致了来自或非门464的低输出。来自或非门464的低输出将NFET 454关断且使PFET 452接通,因此将写握手连接256拉高,其被传递给锁存控制器232ο与门462的输出还被耦合至锁存器420的S输入,该锁存器420输出气泡标志输出258上的高信号且致使气泡位标志输出变为高,这被存储于锁存器222中并因此表明寄存器202具有真实数据。与门462的输出还被耦合至NFET 446和PFET444的栅极,NFET 446和PFET 444将写握手连接252拉低以确认所述写入。
[0055]在写握手连接256变为高之后,该输出被反相器450反相且使得向与门462的输入变低,因此致使所述或非门的输出变为高、使NFET 454接通、将PFET 452关断、且经由反相器450使NFET 456接通,于是,使得写握手连接256能够在下游逻辑确认对刚写入的数据的读取时被拉低。
[0056]如果通过近空检测电路240检测到寄存器202、204、206和208的流水线中的近空条件,那么将堵塞输入254设定成高,这个高状态被输入至锁存器422的S输入且作为高信号被输出至仲裁器414的输入432。仲裁器414致使第二输出436变为高。当接收到该堵塞请求时,忽略随后的任何写信号,并且仲裁器414使第一输出434保持为低直到第二输入432返回至低为止。第二输出436被耦合至与门460的一个输入。与门460的另一个输入被耦合至写握手连接256,写握手连接256为低状态且被反相器450反相,从而致使高信号被输入至与门460。与门460的输出因此为高,且被耦合至或非门464,该或非门464输出低信号。来自或非门464的低输出将NFET 454关断且使PFET 452接通,因此将写握手连接256拉高,这被传递给锁存控制器232。与门460的输出还被耦合至锁存器420的R输入,且致使气泡位标志输出成为反映了与门462的低输出的低状态,这通过气泡标志输出258而被输出且被存储于图2中的锁存器222中,表明寄存器202已存储了气泡。与写操作相似,利用用于确认对刚写入的气泡的读取的下游电路,写握手连接256将会再次被拉低,且气泡插入器电路250为下一步动作做好准备。
[0057]由于新数据可以在任何时候从位于图2中的FIFO存储设备200左边的发送设备到达以供写入,所以仲裁器414需要决定该流水线是将新的数据字插入寄存器202中还是将气泡插入寄存器202中,因为这两个事件相对于彼此是异步的。如果写请求和堵塞请求两者同时出现,那么仲裁器414决定哪个请求应当第一个被执行,并且将另一个请求推迟直到第一个请求完成为止。
[0058]如上所述,因为与门460和462的输入被耦合至把来自写握手连接256的信号反相的反相器450,所以在发射器412准备好通过写握手连接256来发送事件之前,与门460和462防止了上述仲裁决定向右传送。与门460和462以及或非门464的输出产生了对FIFO存储设备200中的寄存器和控制器流水线的请求,以便通过写使能输出256上的信号输出来接受新的进入。RS锁存器420记住仲裁结果,且它的输出被发送至气泡标志输出258,以设置存储于锁存器222中的代表着是将真实数据写入还是将气泡插入第一个寄存器202中的额外位。如上所解释的那样,如果新数据被写入到第一个寄存器202中,那么RS锁存器420的输出被设定成I且通过气泡标志输出258而被发送以将锁存器222设定为I。如果气泡被插入,那么RS锁存器420的输出被设定成低且通过V输出258而被发送以将气泡标志设定为低。
[0059]图4B示出了用于图4A的气泡插入器电路250中的RS型锁存器422的替代保持电路。图4A中的锁存器422被图4B中所示的D触发器470取代。如图4B所示,堵塞输入254被连接至时钟输入474。0锁存器470的复位输入472被耦合至图4A中的与门460的输出。D输入被固定为高,而Q引脚476被耦合至仲裁电路414的第二输入432。
[0060]只有当“堵塞”信号被快速消除时,包括图4A中的RS锁存器422的电路才能表现正常。使用图4B中所示的D触发器470的电路只对堵塞信号输入254上的信号的上升沿做出响应,但是并不关注该上升沿何时被消除。因此,具有D锁存器470的这种电路能够容许更宽范围的针对于生成上述“堵塞”信号的近空检测电路240的电路可能性。
[0061]图5示出了近空检测电路500(例如,图2中的近空检测电路240)的实例。近空检测电路240可以以许多方式被实施。它能够直接地监控由锁存控制器(例如,图2中的锁存控制器232)生成的锁存使能的状态。为了能够容许脉冲时序的波动,如图5中的近空检测电路500的实例所示,应当通过检查寄存器的至少两个锁存使能被断言来检查近空条件。近空检测电路500包括或门502,或门502的输出504被耦合至图2中的堵塞输入254。或门502的输入被耦合至各个与门510、512、514、516、518和520的输出。这些与门的输入都被耦合至从图2中的控制器232、234、236和238到各个寄存器202、204、206和208的使能输入El至E4的使能输出。例如,与门510具有第一输入和第二输入,该第一输入被耦合至寄存器202的使能输入E1,该第二输入被耦合至寄存器204的使能输入E2。因此,与门510、512、514、516、518和520中的各者都具有唯——组的、来自寄存器202、204、206和208的使能输入El至E4中的两个使能输入。如果没有断言两个锁存使能,即表明至少两个寄存器是空的,那么或门502的输出将高信号发送至堵塞输入254,以触发如上所解释的气泡插入。
[0062]另一种更综合且更强有力的技术是:刚好在数据被写入到寄存器的流水线中之前和之后计算锁存控制器握手脉冲上的转变,且如果这两个计数之间的差处于某一范围中,那么流水线寄存器是近空的。因此,图2中的近空检测电路240包括来自锁存控制器232、234、236和238之间的线路的输入。近空检测电路240的另一个变形是可编程的,以便在不同的延迟及不同的仲裁器可靠性之间进行选择。
[0063]整个FIFO存储设备200的延迟和可靠性能够通过改变近空检测电路240而被改变。如果无论何时流水线占用下降到少于例如两个时所述近空检测电路240就请求新的气泡,那么这意味着任何新到达的数据将会在此之前具有该流水线中的至少两件,可能是全部气泡,因此通过流水线的这个数据的延迟不可能少于两个。这还意味着气泡插入器电路250中的仲裁器414 一直具有两个时钟周期,以便作出它的决定(因为需要耗用许多时钟周期来清空流水线),这是十分重要的,原因在于:如果仲裁器414内部进入亚稳态,那么该决定就会被延时,并且这需要一定量的时间来解决。
[0064]图6是FIFO存储设备600的实例,FIF0存储设备600使用协议转换器和门控电路,以便除非寄存器流水线不是全空的否则就确保不能够读取。在FIFO存储设备600中,写设备的时钟速率比读设备的时钟速率慢,因此,在没有气泡插入器电路的情况下的寄存器流水线中可能存在空条件(empty condit1n)。与图2中的FIFO存储设备200相似,FIFO存储设备600包括呈流水线形式式的一系列寄存器602、气泡位锁存器604和锁存控制器606 AIFO存储设备600包括气泡插入电路608和近空检测电路610。数据从输入数据总线612被写入到寄存器602中,且通过输出数据总线614从寄存器中被读取。写入是从写请求输入(txvalid)616启动的,并且读取是从读请求输入(rxready)618启动的。寄存器602的非空(not empty)条件是由读有效输出(rxvalid)620表明的。非满(not full)条件是由被永久固定为高的写有效输出(txready )622表明的。
[0065]第一个协议转换器630被连接至气泡插入电路608。另一个协议转换器632被连接至读使能输入(read enable input)618。当在写使能输入616上接收到写请求时,该信号被发送至与门634的一个输入。与门634的另一个输入被耦合至一直被固定为高的写就绪输出(write ready output)622。写信号被发送至协议转换器630,协议转换器630与对FIFO存储设备600进行写入的设备一样地被计时。协议转换器630将该高信号发送至气泡插入电路608,以便当第一个寄存器602被使能时,启动对该寄存器的写入。为了阻止寄存器602变成空的,近空检测电路610可以将堵塞信号发送至气泡插入电路608以表明寄存器602是几乎空的,从而导致气泡的插入。
[0066]相似地,当读取被请求时,信号被发送至读使能输入618。该信号被输入至与门636的一个输入。与门636的另一个输入被耦合至读有效输出620,当寄存器602不是完全空时,读有效输出620将会是高状态,由此使得读取能够发生。与门636的输出被耦合至或门638的一个输入。或门638的另一个输入是从读有效输出620反相而来的。恰好当读取被请求且该读取有效时,或当寄存器流水线中存在气泡时,或门638的输出将高信号发送至协议转换器632的使能输入。协议转换器632按照与用于从FIFO存储设备600中执行读取的设备的时钟一样的时钟被计时。协议转换器632将信号输出至最后一个锁存控制器606,以便请求流水线中的最后一个寄存器602的读取。
[0067]图7A示出了将计时信号转换成握手协议的握手协议转换器700(例如,图6中的协议转换器630)的计时协议的实例。协议转换器700包括D触发器702,D触发器702的输入被耦合至反相器704。该触发器的输出被耦合至与图3B中的右边所示的电路完全相同的半锁存转换器/发射器电路。触发器702的该输出被耦合至PFET 706和NFET 708的栅极。PFET 706和NFET 708与NFET 710串联连接。NFET 710的栅极被耦合至反相器712。使能输入720采取由写设备计时的高信号。该高信号被反相器704反相然后作为来自D触发器702的低信号而被输出。该低信号被发送至PFET 706和NFET 708的栅极,以将写握手连接722拉高。写握手连接722把使用写入握手协议的连接点提供给图7A右边的设备。写握手连接722被反相器712反相,于是向既定的输入产生低信号,从而在D触发器702中清除该低信号。
[0068]图7B示出了将握手信号转换成计时信号的计时协议转换器750(例如,图6中的协议转换器632)的握手协议的实例。转换器750包括D触发器752,D触发器752将Q输出馈送至与非门754的一个输入。握手信号被親合至反相器756,反相器756被親合至PFET 760的栅极。与非门754的输出被反相器758反相,反相器758的输出被耦合至PFET 762和NFET 764的栅极。PFET 762与PFET 760串联连接。如图7A和图7B所示,协议转换器700和750包含分别与图3B的控制器350中的块364和362完全相同的转换器/发射器子块和接收器/转换器子块。
[0069]当通过输入770(例如,图6中的协议转换器632的输入)接收到诸如使能读取等信号时,该高信号被输入至触发器752。所得到的触发器752的高输出被耦合至与非门754,这导致了低输出,该低输出被反相器758反相,并且将PFET 762关断且使NFET 764接通。这将握手连接772拉低,以向上游电路表明该读请求已经吸收了所读取的数据。
[0070]当握手连接772变为高时,与非门754的另一个输入变为高,并由此将握手连接772再次拉低。握手连接772的输出还被耦合至反相器756,反相器756使该高信号反相且使PFET760接通,以便在这个半锁存器构造中维持该高信号。这将握手连接772拉低,以向上游电路表明该读请求已经吸收了所读取的数据。
[0071]图8示出了具有空和满仲裁的自填充的基于流水线的FIFO存储设备800的实例。除了添加了向后流向的信用路径以外,存储设备800以与图6中所示的存储设备600相似的方式运行。在FIFO存储设备800中,请求数据读取的设备的时钟速率和请求数据写入的设备的时钟速率可以处于不同的速率。因此,如果写设备的时钟速率更快,那么可能会存在寄存器流水线的满状态,但是如果读设备的时钟速率如上所述更快,那么可能会存在空状态。通过添加使用与上述的气泡插入和仲裁一样的技术的逆向路径,能够消除尽管具有不同的读时钟速度和写时钟速度但是要使FIFO 800同步化的需求。与图2中的FIFO存储设备200相似,FIFO存储设备800包括一系列寄存器802、气泡位锁存器804和锁存控制器806 JIFO 800包括气泡插入器电路808和近空检测电路810。数据从输入数据总线812被写入寄存器802中,并且通过输出数据总线814从寄存器中被读取。对第一个寄存器802的数据写入是从写使能输入(txvalid)816上的请求信号启动的,且从最后一个寄存器802中的数据读取是从读使能输入(rxready) 818上的请求信号启动的。写就绪输出(txready) 820表明流水线没有满,因此可以启动写入。读就绪输出(rxvalid)822表明流水线没有全空,且可以启动读取。
[0072]在FIFO 800中,已经添加了第二个逆向的锁存控制器824、826、828和830的序列,锁存控制器824、826、828和830表明准许通过数据接收器向写设备的信用传输。锁存控制器824、826、828和830被连接至I位信用锁存器832、834、836和838的流水线,且使能所述I位信用锁存器832、834、836和838的该流水线。气泡插入器840被耦合至近满(near full)检测电路842。当寄存器802几乎满时,气泡插入器840将信用插入第一个锁存器832中。无论何时当寄存器802中的一个寄存器重新变空时,该信用就被插入,以便防止寄存器802全满(completely full)。因此,信用沿着锁存器832、834、836和838的流水线向下被输送到最后一个I位锁存器838。这些I位信用锁存器各自均在寄存器802的相反方向上传送信用数据,并且利用把由I位信用锁存器832、834、836和838组成的第二个FIFO理解为包含信用的周围电路,且使用这些I位信用锁存器832、834、836和838来防止在寄存器802中的超限运转。与上面解释的气泡插入器相似,气泡插入器840包括仲裁器,当近满检测电路842表明需要插入气泡且同时出现了来自读使能输入818的读请求时,该仲裁器做出仲裁是进行气泡插入还是进行数据读取。
[0073]控制器824、826、828和830不需要控制锁存器,因为信用或气泡的存在是唯一被需要的。然而,在气泡插入器840中的仲裁之后,必须知道流水线是包含真实信用还是气泡信用,所以沿着底部的存储着这个指示器的单个位锁存器832、834、836和838需要被控制。正如向前数据路径被扩大到包括用于气泡标志的I位那样,逆向信用路径从零宽度被扩大到I位锁存器832、834、836和838的I位流水线。逆向信用路径中的位使得能够避免流水线中的寄存器802的全满条件,并因此消除了对于同步器的需求。
[0074]FIFO 800还包括两个协议转换器850和852,它们将来自设备时钟的信号转换成用于控制器和气泡插入器电路的握手信号。第一个协议转换器850被耦合至气泡插入器电路808,且第一个协议转换器850的输入被耦合至与门854的输出。与门854的输入被耦合至将在下面解释的写使能输入816和写就绪输出820。
[0075]第二个协议转换器852被耦合至气泡插入电路840的输出。协议转换器852的输入被耦合至与门856的输出。与门856的第一输入被耦合至读使能线818,且另一个输入被耦合至读就绪输出822。
[0076]FIFO 800还包括两个协议转换器860和862,它们将读请求和写请求分别转换成用于控制器和气泡插入器电路的握手信号。第一个协议转换器860被親合至最后一个控制器806的R引脚。协议转换器860的输入被耦合至或门864的输出。或门864的输入被耦合至传输/读取有效(非空)输入822和与门856的输出。因此,在直到通过来自最后一个气泡标志锁存器804的读取有效输入822表明了流水线是非空的之前,将不会启动通过读使能输入818的读请求。
[0077]另一个协议转换器862的输出被耦合至锁存控制器830。协议转换器862的输入被耦合至或门866的输出。或门866的输入是写就绪输出820和与门854的输出。因此,在直到通过来自最后一个信用标志锁存器838的写有效输入820表明了流水线是非满的之前,将不会启动通过写使能输入816的写请求。
[0078]FIFO 800使得能够仲裁会阻止对寄存器802的写入的满流水线情形。如果在读使能输入818上接收到读使能,那么它被耦合至与门856的输入。与门856的另一个输入被耦合至最后一个锁存器804的输出,当最后一个寄存器具有要被读取的真实数据时,最后一个锁存器804的输出将会只允许与门856的输出信号变为高,且因此存储于最后一个锁存器804中的气泡标志是I。读使能信号因此被馈送至协议转换器852中,协议转换器852将该使能信号传送至气泡插入器电路840,这表明已经出现信用。如图8所示,协议转换器852在与做出读请求的设备的速率相同的速率下被计时。气泡插入器电路840将使能请求转换成用于锁存器832的信用信号。与门856的输出还被耦合至或门864的一个输入。或门864的另一个输入被親合至最后一个锁存器804的气泡标志值。或门864的输出被親合至协议转换器860的使能输入。协议转换器860在与做出读请求的设备的速率相同的速率下被计时。协议转换器860将确认信号发送至锁存控制器806的链路,且最终发送至气泡插入器电路808。以这种方式,读使能信号被转换成寄存器的时序,且当寄存器802中不存在空条件时,该读使能信号才被发送。
[0079]相似地,当在写请求输入816上接收到写请求时,该信号被连接至与门854的输入中的一个输入。与门854的另一个输入被親合至写就绪输出820,这是最后一个I位锁存器838的值。如果锁存器832的值为高,那么它表明相应的寄存器为空,且已准备好被写入。与门854的输出被耦合至协议转换器850的使能输入,协议转换器850按照请求写入的设备的速率而被计时。协议转换器850的输出被耦合至气泡插入器电路808的写握手连接,该插入器电路808启动从数据输入总线812的数据写入。
[0080]图8中的基于握手的FIFO800包括核心转换电路,以用来在核心中的基于握手的信令与在写和读接口中的传统同步计时之间转换。这个转换电路包括四个协议转换器850、852、860和862和四个核准门(qualifying gate)854、856、864和866。如上所解释的,与近满检测器842组合的锁存器832、834、836和838的流水线将会插入适当数量的真实信用和气泡信用,这将会防止会使寄存器802变得全满的额外写入。
[0081]虽然已经参照一个或多个特定实例说明了本原理,但是本领域技术人员应当理解,能够在不脱离本发明主旨和范围的情况下对本发明作出许多改变。在随附权利要求中所陈述的这些实例及其显而易见的变形中的各者被认为落入在本发明主旨和范围内。
[0082]相关申请的交叉参考
[0083]本申请要求2015年3月12日提交的美国专利申请第14/656,300号的优先权,特此将该美国专利申请的全部内容以引用的方式并入本文中。
【主权项】
1.一种异步先入先出存储设备,其包括: 以流水线的形式布置着的多个数据寄存器,所述多个数据寄存器包括用于接受来自写设备的数据写入的第一个寄存器和允许通过读设备进行数据读取的最后一个寄存器,各寄存器具有用于表明允许该寄存器的读取操作的满条件和允许该寄存器的写入操作的空条件的使能输入,所述多个数据寄存器能够让数据从所述第一个寄存器顺序地传递至所述最后一个寄存器; 气泡插入器电路,所述气泡插入器电路致使取代实际数据的替用虚设值的气泡被存储于所述第一个寄存器中,以防止所有寄存器出现全空条件;以及 近空检测电路,所述近空检测电路被耦合至所述多个寄存器的所述使能输入,以判定所述多个寄存器的近空条件,并且 其中所述气泡插入器电路包括仲裁器,且当所述多个寄存器被所述近空检测电路判定为近空时,所述仲裁器判定对所述第一个寄存器是进行数据写入还是进行气泡插入。2.根据权利要求1所述的存储设备,其还包括多个控制器,各所述控制器经由所述使能输入与所述多个寄存器中的相应寄存器相关联,所述多个控制器能够让所述气泡或所写入的数据从所述第一个寄存器传递至所述最后一个寄存器。3.根据权利要求2所述的存储设备,其中,各所述控制器均包括半锁存电路和确认电路,所述半锁存电路用于保持请求信号,所述确认电路用于在一个时钟周期内发送确认输出信号。4.根据权利要求1所述的存储设备,其中,所述写设备的时钟速率等于或低于所述读设备的时钟速率。5.根据权利要求1所述的存储设备,其中,所述仲裁器具有无限的计算时间,以判定是写入新数据还是插入作为实际数据的替用值的所述气泡。6.根据权利要求1所述的存储设备,其还包括多个气泡位,各所述气泡位分别针对于所述多个寄存器中的一个寄存器,所述气泡插入器设定了用于表明所述第一个寄存器正在通过改变所述气泡位来存储气泡的标示,且其中,所述气泡位随着所述气泡从所述第一个寄存器顺序地传递至所述最后一个寄存器,并且其中,如果所述最后一个寄存器包含气泡,那么所述读设备在响应于读请求时忽略所述最后一个寄存器中的内容。7.根据权利要求1所述的存储设备,其中,所述近空检测电路能够编程以便在不同的延迟及不同的仲裁器可靠性之间进行选择。8.根据权利要求1所述的存储设备,其还包括: 含有多个信用锁存器的信用流水线,所述信用流水线包括针对于所述最后一个寄存器的第一个信用锁存器和针对于所述第一个寄存器的最后一个信用锁存器,其中,当从所述最后一个寄存器中执行了读取时,信用被写入所述第一个信用锁存器中; 第二气泡插入器,所述第二气泡插入器被耦合至所述第一个信用锁存器;以及 近满检测电路,所述近满检测电路被耦合至所述多个信用锁存器,且当所述信用锁存器都是近空时,所述近满检测电路将气泡信用插入所述第一个信用锁存器中,并且 其中,所述读设备的时钟速率比所述写设备的时钟速率慢。9.一种使用先入先出存储设备的方法,所述先入先出存储设备具有以流水线的形式布置着的多个寄存器,所述多个寄存器包括用于接受来自写设备的数据写入的第一个寄存器和允许通过读设备来进行数据读取的最后一个寄存器,各寄存器具有空条件和满条件,所述方法包括: 判定所述多个寄存器是否处于近空状态; 致使取代实际数据的替用虚设值的气泡被存储于所述第一个寄存器中,以避免在所述多个寄存器中都出现空状态; 设定与所述第一个寄存器相关联的气泡位,以表明气泡被存储于所述第一个寄存器中; 响应于读请求将所述气泡和所述气泡位传送至所述多个寄存器中的下一个寄存器,直到所述气泡到达所述最后一个寄存器为止; 接收用于读取所述最后一个寄存器中的数据的读请求; 读取与所述最后一个寄存器相关联的所述气泡位;以及 如果所述最后一个寄存器包含气泡,那么在响应于所述读请求时忽略所述最后一个寄存器中的内容。10.根据权利要求9所述的方法,其还包括: 接收写请求; 判定所述写请求和近空状态的所述判定是否同时发生; 在所述写请求与气泡插入之间进行仲裁; 如果所述仲裁继续进行所述写请求,那么将数据写入所述第一个寄存器中;和如果所述仲裁继续进行所述气泡插入,那么延迟对所述第一个寄存器的所述数据写入,直到所述气泡被插入为止。11.根据权利要求9所述的方法,其中,所述写设备的时钟速率等于或低于所述读设备的时钟速率。12.根据权利要求10所述的方法,其中,所述仲裁具有无限的计算时间,以判定是写入所述数据还是插入所述气泡。13.根据权利要求9所述的方法,其中,设置有多个气泡位,各所述气泡位分别针对于所述多个寄存器中的一个寄存器,并且其中,做出用于表明所述第一个寄存器正在通过改变所述气泡位来存储气泡的标示。14.根据权利要求9所述的方法,其中,所述近空条件能够编程以便在不同的延迟之间进行选择。15.根据权利要求10所述的方法,其中,所述近空条件能够编程以便在不同的仲裁可靠性之间进行选择。16.根据权利要求9所述的方法,其还包括: 当从所述最后一个寄存器中执行了读取时,将信用写入到多个信用锁存器的所述第一个寄存器中,所述多个信用锁存器的流水线包括针对于所述最后一个寄存器的第一个锁存器和针对于所述第一个寄存器的最后一个锁存器;以及 当所述信用锁存器都是近空时,将气泡信用插入到所述第一个信用锁存器中,并且 其中,所述读设备的时钟速率比所述写设备的时钟速率慢。17.—种计算系统,其包括: 写设备,所述写设备以第一时钟速率进行计时; 读设备,所述读设备以第二时钟速率进行计时;和 异步先入先出存储设备,所述异步先入先出存储设备被耦合至所述写设备和所述读设备,并且所述异步先入先出存储设备包括: 以流水线的形式布置着的多个数据寄存器,所述多个数据寄存器包括用于接受来自所述写设备的数据写入的第一个寄存器和允许通过所述读设备进行数据读取的最后一个寄存器,各寄存器具有用于表明允许该寄存器的读取操作的满条件和允许该寄存器的写入操作的空条件的使能输入,所述多个数据寄存器能够让数据从所述第一个寄存器顺序地传递至所述最后一个寄存器; 气泡插入器电路,所述气泡插入器电路致使取代实际数据的替用虚设值的气泡被存储于所述第一个寄存器中,以防止所有寄存器出现全空条件;以及 近空检测电路,所述近空检测电路被耦合至所述多个寄存器的所述使能输入,以判定所述多个寄存器的近空条件,并且 其中所述气泡插入器电路包括仲裁器,且当所述多个寄存器被所述近空检测电路判定为近空时,所述仲裁器判定对所述第一个寄存器是进行数据写入还是进行气泡插入。
【文档编号】G06F5/06GK105975246SQ201610140675
【公开日】2016年9月28日
【申请日】2016年3月11日
【发明人】达纳·豪
【申请人】阿尔特拉公司