先进先出存储器 本发明涉及一般数字电路,并特别涉及先进先出(“FIFO”)存储器的设计。
通信系统使得相距一段距离的用户进行通信并通常包括结点和信道网络使得通信成为可能。虽然通信系统传统上是以模拟形式携带信息,但是以数字形式携带信息和通信系统正逐渐被建立起来。
图1表示包含有能使两用户Alicel与Bill3通信的通信网络6的一个数字通信系统。当Alice要向Bill发送一条消息时,它把该消息提供给它的站。该站可以是任何能够把Alice所提供的信息转换成数字形式的装置(例如,电话,传真机或计算机)。一般,数字形式的消息包含了一系列离散的数据。然后Alice的站一般是把这一系列的数据一个接一个地发送到通信网络的一个结点上。通常,站是以高于网络结点处理数据的速度把数据系列发送到网络上。在这种情形下,最好在网络中包括临时缓冲器以调整各个数据到达的速率与它们被处理的速度之间的差异。这种缓冲器通常是由先进先出装置构成。
通常称作“FIFO”的先进先出装置的主要特性是:其从源装置接收多个数据,存储这些数据,然后把这些数据以它们被接收时相同的顺序向目标装置输出。
本发明的实施例避免了先有技术的先进先出存储器(“FIFOs”)的高成本和局限性。特别是,本发明的实施例可顺序地执行同时的读和写操作而不会发生争用问题也无需双端口随机存取存储器(“RAM”)。而且本发明的实施例理想地适用于生产廉价的大容量FIFOs。
这些结果可在本发明的一个示例性地实施例中获得,该实施例可附加到两个相同的独立的RAM存储体上,该实施例最好包括;一个控制顺序器,一个写指针,一个读指针,一个用于向此两个RAM存储体之一提供存储器地址的第一地址发生器,一个用于向此两个RAM存储体的另一个存储器提供另一存储器地址的第二地址发生器。
图1表示了一个全国范围的通信系统的图示,该系统可使用本发明的一个或多个实施例。
图2是一个数据源装置,一个数据目标装置和插入在这两个装置之间的先进先出(“FIFO”)存储器的框图。
图3描绘了图2中所示的FIFO的主要部件的框图。
图4描绘了图3中所示的FIFO RAM控制器的从属子部件的框图。
图5描绘了图3中所示的FIFO RAM控制器的较佳实施例的框图。
图6描绘了关于图4和图5中所示的控制顺序器的示例性的状态转移图。
图7是图6的状态转移图的有限态自动机的原理图的第一页。
图8是图6的状态转移图的有限态自动机原理图的第二页。
图9是说明图7和图8如何相联以形成单个原理图的表示图。
图10表示说明作为最佳实施例经历过典型实践的最佳实施例中各种信号之间的关系的时序图的第一页。
图11表示说明作为最佳实施例经历典型实践的最佳实施例中各种信号之间的关系的时序图的第二页。
图12是说明图10与11如何相联以形成单个时序图的图示。
图2表示本发明的最佳实施例的框图,其用作为具有N个M位容量的数据段先进先出存储器(“FIFO”)。为便于说明,N规定为FIFO的深度,M规定FIFO的宽度。本发明的实施例特别适用于深的(即大的N)FIFOs并避免了必须使用双端口RAM(即对于不同的存储器单元可执行两个同时的读,两个同时的写,或同时的读和写的RAM)。双端口RAM典型的缺点在于它比同样价格的单端口RAM具有较小的容量。
而且,虽然熟悉本技术的人士都清楚,本发明的实施例可在单片集成电路上制成,但使用本发明的FIFO也可由多个集成电路制成。这种实现方式提供了低成本、大容量的FIFO,正象异步传输方式(“ATM”)网络中所希望的那样。
如图2中所示,FIFO100最好是同步装置,其时钟与分别向FIFO100发送或从FIFO100接收数据的源装置141与目标装置143同步。对于熟悉本技术的人士由以上所讨论就会清楚如何构成并应用对于源装置141和/或目标装置143为异步的本发明的实施例。
现对于该最佳实施例有关源装置141和目标装置143的操作进行说明。FIF0100最好接收在导线111输入的二进制写信号和在导线115输入的二进制读信号。为 说明目的,二进制信号定义为只能具有以下二种可能的值之一的信号:“断言的”(也可称为或以符号表示为“HIGH”或“1”)和“取消”(也可称为或以符号表示为“LOW”或“O”)。在所示实施例中写信号与读信号都是HIGH有效。
当源装置要向FIFO100发送数据时,源装置141最好把该数据置于数据输入总线113上并以所熟知的方式断言导线111上的写信号一个时钟周期。类似地,当源装置不希望发送数据时,源装置141最好撤回导线111上的写信号,这种情况下数据输入总线113上的寄生信号被FIFO100忽略。
当目标装置143要从FIFO100接收数据时,目标装置143最好断言导线115上的读信号,这种情况下FIFO100在下一时钟周期再次以熟知的方式在数据输出总线117上向目标装置141发送适当的数据。类似地,当目标装置不想从FIFO100要数据时,目标装置143最好撤回导线115上的读信号并忽略数据输出总线117上的寄生信号。
在该最佳实施例中,FIFO100的优越之处在于能够顺序地同时接收来自源装置141的一个数据并向目标装置143发送另一数据,而不需要源装置141或目标装置143等待。写信号,读信号及数据输入总线113和数据输出总线117上的数据的时间关系如图10,11与12中所示,它将在以后讨论。
图3描绘了FIFO100的主要部件的框图:FIFO RAM控制器101,RAM存储体A103和RAM存储体B105,如所示相互连接。FIFO RAM控制器101的构成和操作将在以下进行说明。RAM存储体A103与RAM存储体B105最好都是同样的个M位随机存取存储器,具有分离的数据输入与输出端口,虽然熟悉本技术的人员清楚如何用其他型号的包括单端口RAM的存储器来制造本发明的实施例。为说明目的,RAM存储体A103与RAM存储体B105的读和写控制都是分别由导线121与131上的R/W信号控制的,当相应的信号被断言时则指示读取,而当信号被撤消时则为写入。正如熟悉本技术的人员所熟知,FIFO RAM控制器101的优越在于与RAM存储体A103及RAM存储体B105分别以所熟知的方式通信。
图4描绘了组成FIFO RAM控制器101的示例性实施例的八个所属部件的框图。控制顺序器201最好是同步有限态自动机,接收导线115上输入的读信号和导线111上输入的写信号。控制顺序器201通过各种信号,到两个RAM存储体A103与RAM存储体B105的R/N信号来控制写指针203,读指针205,RAM存储体A地址发生器211,RAM存储体B地址发生器213,RAM存储体A数据写程序221,RAM存储体B数据写程序223与输出数据驱动器231。
正如熟悉本技术的人员所知道的那样,FIFO100的内部操作可被概念化为一循环排列。该排列的后面即是要写入顺序数据之处并最好是由包含在写指针203中的逻辑指针所指示的地点。该排列的前面是顺序的数据读出之处并最好是由包含在读指针205中的逻辑指针所指示的地方。该排列最好由两个独立的RAM存储体构成,其物理地址逻辑上被映射使得概念循环排列(conceptualcincular queue)中的顺序位置物理上包含在不同的RAM存储体中。
例如,如果RAM存储体A103有4个数据的容量,RAMRAM存储体B105有4个数据的容量,那么FIFO100的总容量为8个数据。如果FIFO100有8数据的容量,则概念循环排列具有最大为8存储位置,逻辑地址为0,1,2,3,4,5,6,7。这种情形下,最好是逻辑地址0,2,4,6分别指定给RAM RAM存储体A103的物理地址0,1,2,3,且逻辑地址1,3,5,7分别指定给RAM存储体B105的物理地址0,1,2,3。
重要的是要明白在本最佳实施例中,写指针203与读指针205指向概念循环排列中的逻辑位置而不是RAM存储体A103或RAM存储体105中的物理存储器单元。最好是写指针203与读指针205都由log2N计数器构成,该计数由0到N-1并翻转到0。这种情况下,逻辑排列位置映射到物理存储地址就可通过应用来自每一指针的除去最小有效位以外所有位作为进入相应RAM存储体的全部物理地址。换言之,物理地址等于包含在逻辑地址除以2中的最大整数。这种方案的优点在于各RAM存储体可通过检验逻辑地址中的最小有效位确定其物理地址(例如,“0”=RAM存储体A,“1”=RAM存储体B)。
由于由读指针205所指示的逻辑地址是独立于由写指针203所指示的地址的,于是可能会出现读指针205与写指针203都指向同一RAM存储体这种情形。并由于在该最佳实施例中,一个RAM存储体不能同时被写入和读出,故具优越之处在于应用了一种机制解决了这种多用问题。这种机制最好包括RAM存储体A地址发生器211和RAM存储体B地址发生器213,这两个发生器均由控制顺序器201彼此独立地进行控制。从以下的讨论熟知本技术的人员会明白如何构成和应用RAM存储体A地址发生器211与RAM存储体B地址发生器213。
在该最佳实施例中,当原来希望对单一的RAM存储体同时执行写和读时,则当执行写操作时由各存储体地址发生器对读给出优先而直到执行读操作后写地址被存储。而且,RAM存储体A数据写入器221或是RAM存储体B数据写入器223,由于适当地存储了新到达而待写入的数据,所以直至执行完读操作后,在执行写操作。
反之,对于熟知本技术人员来说将会明白如何构成和使用使得写操作优先而延迟读出的本发明的实施例。在那种情况下,熟知本技术的人员会明白RAM存储体A数据写入器221与RAM存储体B数据写入器223可被取消。输出数据驱动器231从RAM存储体A103和RAM存储体B105都接收数据,并在控制顺序器201导引下把适当的数据引向数据输出总线117。对于熟悉本技术的人员会明白如何制造输出数据驱动器231用于写优先而不是象在本最佳实施中这样读优先的设计。
熟悉本技术的人员明白,这种特殊的实施例在一数据写入到FIFO100和该数据可从FIFO100读出之间包含一个时钟周期的等待时间。熟悉本技术的人员清楚如何制成和应用本发明的不具有等待时间或具有大于一时钟周期的等待时间的实施例。
图5绘出了本发明的最佳实施例的原理图,该实施例与图4中所绘最佳的一般结构是一致的。该最佳实施例包括控制顺序器201,写指针203,读指针205,地址锁存器A301,地址多路复用器A303,数据锁存器A305,地址锁存器B302,地址多路复用器B304,数据锁存器B306与数据多路复用器307。本实施例中很清楚,地址锁存器A301与地址多路复用器A303构成RAM存储体A地址发生器211,且地址锁存器B302与地址多路复用器B304构成RAM存储体B地址发生器213。而且,数据锁存器A305构成RAM存储体A数据写入器221,数据锁存器B306构成RAM存储体B数据写入器223,且数据多路复用器307构成输出数据驱动器231。
控制顺序器201最好按照图6所描绘的状态转移图示实现。如图6,7,8,9中所示,控制顺序器201最好是具有至少六互斥的状态的有限态自动机,并该自动机最好接收输入的二进制读信号和二进制写信号。如图6中所示,该状态转移图示的初始状态,以及对应的有限态自动机是状态S。
表1 状态 写指针203 读指针205地址锁存器301地址锁存器302 指向 指向 包含 包含 S0 RAM存储体ARAM存储体A 无 无 S1 RAM存储体BRAM存储体B 无 无 S2 RAM存储体BRAM存储体A 无 无 S3 RAM存储体ARAM存储体B 无 无 S4 RAM存储体BRAM存储体B 下一个写地址 无 S5 RAM存储体ARAM存储体A 无 下一个写地址表1:利用写指针203,读指针205和地址锁存器A301与地址锁存器B302
的内容的控制顺序器状态的最佳定义。
如表1所示,这些状态利用每一指针的逻辑地址转换到的那个物理RAM存储和地址锁存器的内容来定义。如何制造和应用具有到控制顺序器更多的输入(例如,一个复位信号)或控制顺序器中有更多的状态的本发明的实施例是熟悉本项技术的人员所清楚的。
图6的有限态自动机是作为一个有向图(V,E)而描绘的,其中V是自动机的状态集(例如,S0,…S5),E是边或各状态之间的转移集。图6中的每一状态由一圆圈表示,该圆圈围绕着所指的状态。每一条边标以一个I/O操作,该操作既定义了发生转移所必须的条件又定义了作为转移结果所采取的行动。
为了进行表示,每条边标以格式为?a·b!的文本串,这表示当输入a与b都为真时,该边行将被经历。而且当该边被经历时,该状态自动机要影响对应于跟随惊叹号的动作码的动作。例如,标以?READ·WRITE!6的边在读信号与写信号都被断言时则被经历。而且该边的经历触发动作码6。表2定义了图6中根据图5的原理图中所示的控制信号上每一个所具有的效果指定义的17种各个不同的动作。
表2
被储存的写配置行动表 动作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 读增量ent(225) N N N Y Y Y N Y N Y Y N N Y Y Y Y 写增量ent(245) N Y Y N N Y N Y N Y Y Y Y N N Y Y地址多路复用器A(313) x W x R x R W x x R W W W W R R W 锁存器A(315) E E E E E L E E E L E E E E E E E R/WA(121) R W R R R R W R R R W W W W R R W 地址多路复用器B(323) x x W x R x x R W W R W W R W W R 锁存器B(325) E E E E E E E L E E L E E E E E E R/WB(131) R R W R R R R R W W R W W R W W R 输出多路复用器(331) x x x A B A x B x A B x x B A A B
熟知本项技术的人员明白如何由图6和表2建立控制顺序器201。图7,8,9描绘了对应于图6中的有限状态自动机的示例性的控制顺序器201的原理图。为了示范,该示例性控制顺序器201被表示为由AND门,OR门,反相器与“D”型触发器设计成。熟悉本项技术的人员明白如何用其他元件组成控制顺序器201。
参见图5,写指针203最好为log2N位同步计数器,该计数器的计数由导线245上的写增量信号所控制。当写增量信号由控制顺序器201断言时,写指针203在下一时钟脉冲之后增加一次。当写增量信号被取消时,写指针203不增加读指针除3由导线225上的读增量信号所控制以外,其设计最好与写指针203相同。
写指针203的输出被馈送至地址锁存器A301与地址锁存器B302,此两锁存器最好都为位宽的锁存器。当导线315上的锁存器A的信号被断言时,地址锁存器A301被输入锁存允许方式,由此在其输入端的任何信号在下一时钟周期被同步锁存到它的输出端。当导线315上的锁存A。信号被取消时,地址锁存器301用作锁存器并保持任何被锁存的信号。在这种情况下,地址锁存器A301不论其输入如何变化将输出其存储的值。地址锁存器302除了是由导线325上的锁存B信号控制以外其设计最好与地址锁存器A301相同。
地址多路复用器A303最好为位宽的二到一多路复用器并通过地址锁存器A301和读指针205被馈送到写指针203的输出。地址多路复用器A303由导线313上的address-mux-A信号控制。地址多路复用器B304除由导线323上的address-mux-B信号控制以外,其设计最好与地址多路复用器A303相同。
数据锁存器A305最好为M位宽的锁存器,由导线315上的锁存A信号所控制,虽然这并不是必须的宽度,但数据锁存器A305与数据锁存器306的设计和操作最好与地址锁存器A301及地址锁存器B302的设计与操作相同。数据锁存器B306除了由导线325上的锁存器B信号控制以外,其设计最好与数据锁存器A305相同。
数据多路复用器307最好为由导线331上的输出多路复用信号控制的M位宽的二到一多路复用器。虽然这一宽度不是必须的,但数据多路复用器307的设计与操作最好与地址多路复用器A303和地址多路复用器304的设计和操作相同。熟悉本技术的人员由以上可知如何构成和应用本发明的实施例。
该最佳实施例的操作易由图10,11与12中所示的时序图中看出。在时钟周期1之前,该实施例定义为处于其初始状态S0。而且写指针203与读指针205都设定为零。
在时钟周期1中,写信号(在导线111上)被断言且数据#1由源装置141置于数据输入总线113上。同时读信号(导线115上的)被取消,指明目标装置143在该时间点处不需要数据。由于读信号被取消且写信号在时钟周期2的开关被断言,本实施例进入状态S2(如同由图6或图7、8和9可见)。状态S0到S2的转换触发动作#2,该动作如表2中所定义那样引起控制顺序器201作用于控制信号。
在时钟周期2期间,引起:(1)写指针将地址0通过锁存器A和地址多路复用器A置于地址A总线127上;(2)数据#1被置于数据输出A总线123;(3)R/W-A信号(导线121上的)被取消;(4)数据#1被写入RAM存储体A的地址0处;(5)写指针被增加。
同时在时钟周期2期间,写信号保持断言状态且数据#2由源装置141放到数据总线113上。导线115上的读信号保持撤消状态。于是由于该实施例处于状态S2,在写信号被断言时读信号被撤消,故该实施例回到状态S0。这一转换在时钟周期3中引起控制顺序器201采取如表2中所定义的动作#3。
在时钟周期3期间,引起:(1)写指针把地址0通过地址锁存器B与地址多路复用器B置于地址B总线137;(2)数据#2被置于数据输出B总线133;(3)R/W-B信号(导线131上)被撤消;(4)数据#2被写入RAM存储体B物理地址0处;(5)写指针被增加。
而且在时钟周期3中,写信号保持被断言且数据#3被置于数据输入总线113上。而且导线115上的读信号变为被断言。指示目标装置143需要数据。由于在时钟周期3期间实施例处于状态S0,读信号与写信号都被断言,该实施例进入状态S4。这一转换引起在时钟周期4中控制顺序器210采取如表2中定义的动作#6。
在时钟周期4之中,引起两个主要动作发生。首先发生来自RAM存储体A数据#1的读操作并且数据#1被输出到数据输出总线117上。其次,由于读操作支配了RAM存储体A,从而阻止了数据#3向RAM存储体A的写入,数据#3存储在数据锁存器A305并且要存储数据#3的RAM存储体A地址被存储在地址锁存器A301,直至当写操作完成时的下一时钟周期。
更具体而言,在时钟周期4之中引起:(1)读指针把地址0通过地址多路复用器A303放到地址A总线127;(2)R/W-A信号(导线121上的)被断言;(3)数据#1从RAM存储体A读出到数据输入总线125并通过数据多路复用器307到数据输出总线117;(4)地址锁存器A301锁存地址1;(5)数据锁存器A305锁存数据#3;(6)写指针被增加;(7)读指针被增加。
而且在时钟周期4之中,写信号保持被断言且数据#4被置于数据输入总线113上。而且,该信号也保持被断言,指示目标装置143要求另一数据。由于在时钟周期4期间该实施例处于状态S4,读信号与写信号都被断言,所以该实施例进入状态S5。这一转变引起控制顺序器201在时钟周期5期间采取如表2中所定义的动作#11。
在时钟周期5之中,引起三个主要动作的发生。首先,数据#2从RAM存储体B被读出并输出到数据输出总线117上。第二,数据#3被从锁存器A写入到RAM存储体A中。第三,由于读操作支配了RAM存储体B,从而防止了数据#4向RAM存储体B的写入,数据#4存储在数据锁存器B306之中,且数据#4要被存储的RAM存储体B的地址存储在地址锁存器B302之中,直至当写操作被完成时的下一个时钟周期为止。
更具体地说,在时钟周期5期间引起:(1)读指针把地址0通过地址多路复用器B304置于地址-B总线137上;(2)R/W-B信号(在导线131上)被断言;(3)数据#2从RAM存储体B被读出到数据输入总线135并通过数据多路复用器307到数据输出总线117上;(4)地址锁存器A301把地址1通过地址多路复用器A置于地址A总线127上;(5)R/W-A信号(在导线121上)被撤消;(6)数据#3被存储到RAM存储体A地址1处;(7)地址锁存器B302锁存来自写指针203的地址1;(8)数据锁存器B306锁存数据#4(9)读指针被增加;(10)写指针被增加。
同时在时钟周期5期间,写信号保持被断言且数据#5被置于数据输入总线113上。而且读信号也保持被断言,指示目标装置143要求另一数据。由于在时钟周期5期间该实施例处于S5状态,且读信号与写信号都被断言,则该实施例返回到状态S4。这一转变引起控制顺序器201在时钟周期6期间采取如表2所定义的动作#10。
在时钟周期6期间,引起三个主要动作发生。首先,数据#3从RAM存储体A被读出并输出到数据输出总线117上。第二,数据#4从数据锁存器B被写入到RAM存储体B。第三,由于读操作支配了RAM存储体A,从而防止了数据#5向RAM存储体A的写入,数据#5存储在数据锁存器A305之中以及要存储数据#5的RAM存储体A的地址被存储在地址锁存器A301之中,直至完成写操作的下一个时钟周期为止。
更具体而言,在时钟周期6期间,引起:(1)读指针把地址1通过地址多路复用器-A303放置到地址-A总线127上;(2)R/W-信号(在导线121上)被断言;(3)数据#3被从RAM存储体A读出到输入总线125上并通过数据多路复用器307到数据输出总线117上;(4)地址锁存器B302把地址1通过地址多路复用B放到地址-B总线137上;(5)R/W-B信号(在导线131上)被撤消;(6)数据#4被存储到RAM存储体B地址1处;(7)地址锁存器A301锁存来自写指针203的地址2;(8)数据锁存器A305锁存数据#5;(9)读指针被增加;(10)写指针被增加。
同时在时钟周期6期间,写信号与读信号被撤消。由于在时钟周期6之中该实施例处于状态S4,且读信号与写信号被撤消,则该实施例进到状态S1。这一转变引起控制顺序器201在时钟周期7采取如表2中所定义的动作#7。
在时钟周期7期间,刚开始的数据#5的写入被完成。具体来说在时钟周期7期间,引起:(1)锁存器A301把地址2通过地址多路复用器-A置于地址-A总线127上;(2)R/W-A信号(在导线121上)被撤消;(3)数据#5被存储到RAM存储体A地址2处。
同时在时钟周期7期间,写信号又被断言且数据#6由源装置141放置到数据输入总线113上。导线115上的读信号保持被撤消。于是,由于该实施例处于状态S1,且读信号在写信号被断言时被撤消,故本实施例进入状态S3。这一转换引起控制顺序器201在时钟周期8期间采取如表2中所定义的动作#3。
在时钟周期8期间,引起(1)写指针把地址2通过地址锁存器B302和地址多路复用器-B304放置到地址-B总线137;(2)数据#6被放置到数据输出B总线133上;(3)R/W-B信号(在导线131上)被撤消;(4)数据#6被写入到RAM存储体B地址2处;(5)写指针被增加。
同时,在时钟周期8期间,写信号被撤消且读信号变为被断言。由于在时钟周期8中该实施例处于状态S3,且读信号在写信号被取消时则被断言,所以该实施例返回到状态S0。这一转换引起控制顺序器201在时钟周期9中采取如表2中所定义的动作#5,且无限地进行重复。
在没有出错信号插入该最佳实施例时,熟悉本技术的人员明白如何构成和应用包含这些实施例在内的本发明的实施例。