一种先入先出存储器及其输出空满标志的方法

文档序号:7959686阅读:119来源:国知局
专利名称:一种先入先出存储器及其输出空满标志的方法
技术领域
本发明涉及先入先出存储器(FIFO),特别是涉及一种高可靠性字节级写入包级读出先入先出存储器及其输出空满标志的方法。
背景技术
在IP网络中传输数据的基本单位是包,包是一种非固定长度的数据帧。在IP设备中,存储包的FIFO一般采用字节级FIFO或块状FIFO。字节级FIFO读写端都是按照字节进行访问,输出的空标志和满标志也是字节级的;块状FIFO读写端都是按照块进行访问,输出的空标志和满标志也是块级的。
字节级FIFO包括存储器、读地址计数器、写地址计数器、字节计数器和空满标志产生逻辑。对读出端每读出一个数据,读地址计数器的计数值加1,加到最大值变为0后,如果有数据读出继续加1;对写入端每写入1个数据,写地址计数器的计数值加1,加到最大值变为0后,如果有数据写入继续加1。字节计数器的计数值等于写地址计数器的计数值减读地址计数器的计数值,如果字节计数器的计数值为0,空满标志产生逻辑输出空标志;如果字节计数器的计数值达到设定的阈值,空满标志产生逻辑输出满标志。
假如字节级FIFO开始为空,写入数据后FIFO非空,读出端开始读出数据。在FIFO尚未写入一个完整的包时写入端由于某种原因中断写入,但对读出端而言,如果内部调度是基于包的,读出端由于不能读出一个完整的包必须等待,这使得字节级写入字节级读出FIFO在基于包级调度时效率不高。
块状FIFO包括存储器、读地址计数器、写地址计数器、块计数器和空满标志产生逻辑。存储器在逻辑上划分为多个相同大小的存储块,例如一个存储块可以存放128或256个字节。读地址和写地址在逻辑上分别分成两部分高位地址和低位地址,高位地址指向存储器内部的某个存储块,低位地址指向存储块中的一个具体存储单元。在接收一个块的过程中,高位写地址保持不变,只有低位写地址变化;在完成接收一个块后,高位写地址改变,低位写地址被置为一个固定的初值,以保证每个包在存储块中存储的起始地址相同。同样,在发送一个块的过程中,高位读地址保持不变,只有低位读地址变化;在完成发送一个块后,高位读地址改变,低位读地址被置为一个固定的初值,以保证读下个包的起始地址相同。每当接收一个块时,块计数器的计数值加1,每当发送一个块时,块计数器的计数值减1,块计数器的最大值等于该FIFO中存储块的总个数。块计数的计数值为0时,空满标志产生逻辑输出空标志,块计数的计数值达到设定的阈值时,空满标志产生逻辑输出满标志。
在基于内部块调度的前提下,块状FIFO不需要等待,实现了比字节级FIFO更高的调度效率。但是块状FIFO对存储器的使用效率低,例如,设定块的大小为128字节,如果输入的包是129字节,那么第二个块只有1个存储单元被使用,浪费了大量存储器资源。

发明内容
本发明的目的是针对上述问题提供一种高可靠性字节级写入包级读出先入先出存储器。
本发明的另一目的是提供一种先入先出存储器输出空满标志的方法。
本发明的先入先出存储器,包括存储器、写地址计数器、读地址计数器、字节计数器和空满标志产生逻辑,其中写地址计数器用于根据来自外部电路的写信号进行计数,并将得到的写地址计数值发送到存储器和字节计数器;读地址计数器用于根据来自外部电路的读信号进行计数,并将得到的读地址计数值发送到存储器和字节计数器;存储器用于数据的存储,并根据接收到的写地址计数值和读地址计数值,调整写地址指针和读地址指针;字节计数器用于根据接收到的写地址计数值和读地址计数值对存储器中存储的字节进行计数,并将得到的字节计数值发送到空满标志产生逻辑;包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑;空满标志产生逻辑用于根据接收到的字节计数值和/或包计数值判断存储器是否为空或满,并输出相应的空标志或满标志。
所述包计数器根据来自外部电路的写包尾信号和读包尾信号进行计数,接收到写包尾信号时,计数值加1,接收到读包尾信号时,计数值减1。
所述空满标志产生逻辑在接收到的包计数值等于0时,确定存储器为空,并输出空标志;在接收到的字节计数值达到设定的阈值时,确定存储器为满,并输出满标志。
进一步,所述空满标志产生逻辑在接收到的字节计数值达到阈值,并且接收到的包计数值大于0时,确定存储器为满,并输出满标志。
进一步,本发明的先入先出存储器还包括包长计数器,其根据来自外部电路的读信号进行计数,当其计数值达到设定的包长时,输出伪包尾信号到包计数器,以及接收外部电路的读包尾信号,接收到读包尾信号时其计数值清0;所述包计数器还根据伪包尾信号进行计数,接收到伪包尾信号时,包计数值减1。
本发明先入先出存储器输出空满标志的方法,包括以下步骤步骤A,根据来自外部电路的写信号和读信号对存储器中存储的字节进行计数,得到字节计数值,根据来自外部电路的写包尾信号和读包尾信号对存储器中存储的包进行计数,得到包计数值;步骤B,根据所述字节计数值和/或所述包计数值,判断存储器是否为空或满,并输出相应的空标志或满标志。
在步骤B中,若所述包计数值为0,确定存储器为空,并输出空标志;若所述字节计数值达到设定的阈值,确定存储器为满,并输出满标志。
进一步,在步骤B中,若所述字节计数值达到设定的阈值,并且所述包计数值大于0,确定存储器为满,并输出满标志。
进一步,在步骤A中,还对读出的数据长度进行计数,如果数据长度计数值达到设定的包长,则包计数值减1,并且当外部电路输入读包尾信号时,数据长度计数值清0。
本发明的有益效果是实现了字节级写入和包级读出,字节级写入可以最大效率地利用FIFO中的存储器资源,包级读出可以最大效率地实现调度效率;同时提出了字节级写入包级读出FIFO缺陷的自恢复方法,提高了设计的可靠性和容错性。


图1为本发明FIFO的结构示意图;图2为在图1基础上增加了一个包长计数器的FIFO的结构示意图。
具体实施例方式
以下结合附图对本发明进行详细描述。
本发明的关键是在现有的FIFO上,增加了一个包计数器,该包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑,空满标志产生逻辑根据接收到的字节计数值和/或包计数计数值判断存储器是否为空或满,并输出相应的空标志或满标志。
如图1所示,本发明的FIFO包括存储器、写地址计数器、读地址计数器、字节计数器、包计数器和空满标志产生逻辑,其中写地址计数器用于根据来自外部电路的写信号进行计数,并将得到的写地址计数值发送到存储器和字节计数器;读地址计数器用于根据来自外部电路的读信号进行计数,并将得到的读地址计数值发送到存储器和字节计数器;存储器用于数据的存储,并根据接收到的写地址计数值和读地址计数值,调整写地址指针和读地址指针;字节计数器用于根据接收到的写地址计数值和读地址计数值对存储器中存储的字节进行计数,并将得到的字节计数值发送到空满标志产生逻辑;包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑;空满标志产生逻辑用于根据接收到的字节计数值和/或包计数值判断存储器是否为空或满,并输出相应的空标志或满标志。
所述存储器为随机存储器(RAM),如双端口存储器(DPRAM)、单端口存储器(SPRAM)等,本发明的优选方式为双端口存储器。
所述读地址计数器以读信号为触发信号,每读出一个数据,读地址计数值加1,加到最大值变为0后,如果有数据读出继续加1。所述写地址计数器以写信号为触发信号,每写入1个数据,写地址计数值加1,加到最大值变为0后,如果有数据写入继续加1。本发明中的包计数器的计数值是包级的,因此称为包计数器。每当接收或发送一个包时,包计数器根据接收的控制信号更新计数值。包计数器根据来自外部电路的写包尾信号和读包尾信号进行计数,接收到写包尾信号时,计数值加1,接收到读包尾信号时,计数值减1。
空满标志产生逻辑包括两个输出端空标志输出端和满标志输出端。空标志输出端将空标志信号发送到外部对FIFO进行读操作的读模块;满标志输出端将满标志信号发送到外部对FIFO进行写操作的写模块。空满标志的输出端可以通过输出高电平或低电平代表空满标志的有效或无效。比如当输出为高电平表示有效,低电平表示无效时,如果FIFO为满,则满标志输出端置为高电平,否则置为低电平;如果FIFO为空,则空标志输出端置为高电平,否则置为低电平。空满标志产生逻辑输出端置于高电平有效还是置于低电平有效,可以由设计者自己决定。空或满标志有效后可以对FIFO的读或写接口产生反压,阻止外部向FIFO的存储器读出或写入数据。
具体来说,空满标志产生逻辑在接收到的包计数值等于0时,确定存储器为空,并输出空标志;空满标志产生逻辑在接收到的字节计数值达到设定的阈值时,确定存储器为满,并输出满标志。
在正常情况下,上述方式不会有问题。但FIFO在使用时受到干扰(例如时钟干扰),会出现一些异常情况,下面举例说明两种异常情况及解决方法。
1)字节计数值已经达到阈值,此时,空满标志产生逻辑输出满标志,FIFO处于满的状态。在受到干扰时,包计数值有可能变为0,包计数值变为0时,空满标志产生逻辑输出空标志,FIFO处于空的状态。这样FIFO同时输出了空标志和满标志,外部既不能读也不能写FIFO。
在这种情况下,空满标志产生逻辑输出满标志的条件是接收到的字节计数值达到阈值,并且接收到的包计数值大于0。这样,外部就可以读FIFO了。
2)FIFO初始化为空,此时包计数值和字节计数值都为0,由于受到干扰,包计数值变为非0,FIFO的状态为非空。此时外部可以读FIFO,但读出的是无效数据,由于FIFO中没有包尾标志符号,包计数值一直不变,不能输出空标志,导致读出端无法停下。
在这种情况下,如图2所示,可以增加一包长计数器,其根据来自外部电路的读信号进行计数,当其计数值达到设定的包长时,输出伪包尾信号到包计数器,所述包长计数器还接收外部电路的读包尾信号,接收到读包尾信号时其计数值清0。包长可以根据需要设定,只要比传输中的最长包长大即可。所述包计数器还根据伪包尾信号进行计数,接收到伪包尾信号时,包计数值减1。这样,如果一直没有数据写入存储器,包计数值就会逐渐减小到0,空满标志产生逻辑输出空标志,读出端停止读数据。
本发明先入先出存储器输出空满标志的方法包括以下步骤步骤A,根据来自外部电路的写信号和读信号对存储器中存储的字节进行计数,得到字节计数值;根据来自外部电路的写包尾信号和读包尾信号对存储器中存储的包进行计数,得到包计数值。
当写入一个字节时,字节计数值加1,当读出一个字节时,字节计数值减1;当外部电路输入一个写包尾信号时,包计数值加1,当外部电路输入一个读包尾信号时,包计数值减1。
步骤B,根据所述字节计数值和/或所述包计数值,判断存储器是否为空或满,并输出相应的空标志或满标志。
在步骤B中,若所述包计数值为0,确定存储器为空,并输出空标志;若所述字节计数值达到设定的阈值,确定存储器为满,并输出满标志。
进一步,在步骤B中,若所述字节计数值达到设定的阈值,并且所述包计数值大于0,确定存储器为满,并输出满标志。
进一步,在步骤A中,还对读出的数据长度进行计数,如果数据长度计数值达到设定的包长,则包计数值减1,并且当外部电路输入读包尾信号时,数据长度计数值清0。
本发明的FIFO实现了字节级写入和包级读出,字节级写入可以最大效率地利用FIFO中的存储器资源,包级读出可以最大效率地实现调度效率。因而,本发明的FIFO在有效利用存储器存储空间的同时提高了调度效率。本发明同时提出了字节级写入包级读出FIFO缺陷的自恢复方法,提高了设计的可靠性和容错性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的包含范围之内。
权利要求
1.一种先入先出存储器,包括存储器、写地址计数器、读地址计数器、字节计数器和空满标志产生逻辑,其中,所述写地址计数器用于根据来自外部电路的写信号进行计数,并将得到的写地址计数值发送到存储器和字节计数器;所述读地址计数器用于根据来自外部电路的读信号进行计数,并将得到的读地址计数值发送到存储器和字节计数器;所述存储器用于数据的存储,并根据接收到的写地址计数值和读地址计数值,调整写地址指针和读地址指针;所述字节计数器用于根据接收到的写地址计数值和读地址计数值对存储器中存储的字节进行计数,并将得到的字节计数值发送到空满标志产生逻辑;其特征在于还包括包计数器,所述包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑;所述空满标志产生逻辑用于根据接收到的字节计数值和/或包计数值判断存储器是否为空或满,并输出相应的空标志或满标志。
2.如权利要求1所述的先入先出存储器,其特征在于所述包计数器根据来自外部电路的写包尾信号和读包尾信号进行计数,接收到写包尾信号时,计数值加1,接收到读包尾信号时,计数值减1。
3.如权利要求1或2所述的先入先出存储器,其特征在于所述空满标志产生逻辑在接收到的包计数值等于0时,确定存储器为空,并输出空标志。
4.如权利要求1或2所述的先入先出存储器,其特征在于所述空满标志产生逻辑在接收到的字节计数值达到设定的阈值时,确定存储器为满,并输出满标志。
5.如权利要求1或2所述的先入先出存储器,其特征在于所述空满标志产生逻辑在接收到的字节计数值达到阈值,并且接收到的包计数值大于0时,确定存储器为满,并输出满标志。
6.如权利要求1或2所述的先入先出存储器,其特征在于还包括包长计数器,其根据来自外部电路的读信号进行计数,当其计数值达到设定的包长时,输出伪包尾信号到包计数器,以及接收外部电路的读包尾信号,接收到读包尾信号时其计数值清0;所述包计数器还根据伪包尾信号进行计数,接收到伪包尾信号时,包计数值减1。
7.一种先入先出存储器输出空满标志的方法,其特征在于,包括以下步骤步骤A,根据来自外部电路的写信号和读信号对存储器中存储的字节进行计数,得到字节计数值,根据来自外部电路的写包尾信号和读包尾信号对存储器中存储的包进行计数,得到包计数值;步骤B,根据所述字节计数值和/或所述包计数值,判断存储器是否为空或满,并输出相应的空标志或满标志。
8.如权利要求7所述的方法,其特征在于在步骤B中,若所述包计数值为0,确定存储器为空,并输出空标志。
9.如权利要求7所述的方法,其特征在于在步骤B中,若所述字节计数值达到设定的阈值,确定存储器为满,并输出满标志。
10.如权利要求7所述的方法,其特征在于在步骤B中,若所述字节计数值达到设定的阈值,并且所述包计数值大于0,确定存储器为满,并输出满标志。
11.如权利要求7所述的方法,其特征在于在步骤A中,还对读出的数据长度进行计数,如果数据长度计数值达到设定的包长,则包计数值减1,并且当外部电路输入读包尾信号时,数据长度计数值清0。
全文摘要
本发明公开了一种先入先出存储器及其输出空满标志的方法。该先入先出存储器包括存储器、写地址计数器、读地址计数器、字节计数器和空满标志产生逻辑,其中,所述包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑,所述空满标志产生逻辑用于根据接收到的字节计数值和/或包计数值判断存储器是否为空或满,并输出相应的空标志或满标志,所述空满标志产生逻辑在接收到的包计数值等于0时,确定存储器为空,并输出空标志,所述空满标志产生逻辑在接收到的字节计数值达到设定的阈值时,确定存储器为满,并输出满标志。本发明的先入先出存储器在最大效率地利用存储器资源的同时,最大效率地实现了调度效率。
文档编号H04L29/06GK1862482SQ20061007319
公开日2006年11月15日 申请日期2006年4月12日 优先权日2006年4月12日
发明者雷春 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1