CN100346289C - 一种先入先出存储器及其输出空满标志的方法 - Google Patents
一种先入先出存储器及其输出空满标志的方法 Download PDFInfo
- Publication number
- CN100346289C CN100346289C CNB2006100731943A CN200610073194A CN100346289C CN 100346289 C CN100346289 C CN 100346289C CN B2006100731943 A CNB2006100731943 A CN B2006100731943A CN 200610073194 A CN200610073194 A CN 200610073194A CN 100346289 C CN100346289 C CN 100346289C
- Authority
- CN
- China
- Prior art keywords
- count value
- empty
- bag
- storer
- byte
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明公开了一种先入先出存储器及其输出空满标志的方法。该先入先出存储器包括存储器、写地址计数器、读地址计数器、字节计数器和空满标志产生逻辑,其中,所述包计数器用于对存储器中存储的包进行计数,并将得到的包计数值发送到空满标志产生逻辑,所述空满标志产生逻辑用于根据接收到的字节计数值和/或包计数值判断存储器是否为空或满,并输出相应的空标志或满标志,所述空满标志产生逻辑在接收到的包计数值等于0时,确定存储器为空,并输出空标志,所述空满标志产生逻辑在接收到的字节计数值达到设定的阈值时,确定存储器为满,并输出满标志。本发明的先入先出存储器在最大效率地利用存储器资源的同时,最大效率地实现了调度效率。
Description
技术领域
本发明涉及先入先出存储器(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缺陷的自恢复方法,提高了设计的可靠性和容错性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的包含范围之内。
Claims (11)
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。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100731943A CN100346289C (zh) | 2006-04-12 | 2006-04-12 | 一种先入先出存储器及其输出空满标志的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100731943A CN100346289C (zh) | 2006-04-12 | 2006-04-12 | 一种先入先出存储器及其输出空满标志的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1862482A CN1862482A (zh) | 2006-11-15 |
CN100346289C true CN100346289C (zh) | 2007-10-31 |
Family
ID=37389925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100731943A Expired - Fee Related CN100346289C (zh) | 2006-04-12 | 2006-04-12 | 一种先入先出存储器及其输出空满标志的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100346289C (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281489B (zh) * | 2007-04-03 | 2010-05-26 | 中兴通讯股份有限公司 | 一种先进先出存储器实现方法及装置 |
CN102013935B (zh) * | 2010-01-21 | 2014-09-17 | 柳州市达迪通信设备有限公司 | 一种e1信号的提取方法及其装置 |
US9053248B2 (en) * | 2012-08-31 | 2015-06-09 | Nxp B.V. | SRAM handshake |
CN106445842B (zh) * | 2016-09-18 | 2019-09-10 | 北京机械设备研究所 | 一种数据缓存器和数据缓存方法 |
CN108108148B (zh) * | 2016-11-24 | 2021-11-16 | 舒尔电子(苏州)有限公司 | 一种数据处理方法和装置 |
CN108268238A (zh) * | 2018-01-24 | 2018-07-10 | 深圳市风云实业有限公司 | 数据处理方法、装置、计算机存储介质及fifo设备 |
CN109358835B (zh) * | 2018-10-25 | 2021-01-15 | 天津市滨海新区信息技术创新中心 | Fifo存储器及其数据传输方法 |
CN111367495B (zh) * | 2020-03-06 | 2023-03-28 | 电子科技大学 | 一种异步先入先出的数据缓存控制器 |
CN112437021B (zh) * | 2020-11-30 | 2022-03-29 | 清华大学 | 路由控制方法、装置、路由设备及存储介质 |
CN113472486A (zh) * | 2021-06-30 | 2021-10-01 | 四川省分析测试服务中心 | 一种仪器运行数据低频采集的高效重传方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05224880A (ja) * | 1992-02-12 | 1993-09-03 | Matsushita Electric Ind Co Ltd | 先入れ先出しバッファ回路 |
JPH0683581A (ja) * | 1992-09-03 | 1994-03-25 | Matsushita Electric Ind Co Ltd | 先入れ先出しバッファ回路 |
CN1668022A (zh) * | 2004-03-12 | 2005-09-14 | 华为技术有限公司 | 高可靠性的先入先出存储器及其实现方法 |
CN1668021A (zh) * | 2004-03-12 | 2005-09-14 | 华为技术有限公司 | 一种高可靠性的先入先出存储器及其实现方法 |
-
2006
- 2006-04-12 CN CNB2006100731943A patent/CN100346289C/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05224880A (ja) * | 1992-02-12 | 1993-09-03 | Matsushita Electric Ind Co Ltd | 先入れ先出しバッファ回路 |
JPH0683581A (ja) * | 1992-09-03 | 1994-03-25 | Matsushita Electric Ind Co Ltd | 先入れ先出しバッファ回路 |
CN1668022A (zh) * | 2004-03-12 | 2005-09-14 | 华为技术有限公司 | 高可靠性的先入先出存储器及其实现方法 |
CN1668021A (zh) * | 2004-03-12 | 2005-09-14 | 华为技术有限公司 | 一种高可靠性的先入先出存储器及其实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1862482A (zh) | 2006-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100346289C (zh) | 一种先入先出存储器及其输出空满标志的方法 | |
US7302543B2 (en) | Compressed memory architecture for embedded systems | |
WO2023155531A1 (zh) | 数据读写方法、装置及相关设备 | |
CN1949695A (zh) | 一种帧数据传输中错帧丢弃的方法和系统 | |
CN1788261A (zh) | 具有用于传送描述符的存储器的usb主机控制器 | |
CN1863132A (zh) | 一种缓存管理系统与方法 | |
CN1492330A (zh) | 通用Windows程序运行日志信息记录方法 | |
CN1774008A (zh) | 手机电话簿备份方法和导入方法 | |
CN1918541A (zh) | 具有非易失性存储级的先入先出存储设备 | |
CN1669279A (zh) | 提高分组应用的存储器存取效率 | |
CN1132105C (zh) | 电子设备与电池组之间通信的方法及相关的装置和电池 | |
CN1149483C (zh) | 控制设置在数字缓冲存储器内的数字缓冲器的控制方法 | |
CN1816017A (zh) | 一种数据报文的发送方法 | |
CN1885827A (zh) | 一种报文存储转发的方法及报文存储转发电路 | |
CN1633101A (zh) | 一种数据包存储的管理方法和装置 | |
CN114153758B (zh) | 具有帧计数功能的跨时钟域数据处理方法 | |
CN100338910C (zh) | 网络信息交换中多端口收发包数统计方法 | |
CN100337443C (zh) | 一种先入先出存储器及快速产生存储标志的方法 | |
CN1470996A (zh) | 外部存储器sdram读写处理方法 | |
CN1214541C (zh) | 一种网络处理器中内核与微引擎间的通信方法 | |
CN2781505Y (zh) | 无线遥控led数码显示屏 | |
CN1322319A (zh) | 在一个串行接口和一个处理器之间传输数据的接口电路和方法 | |
CN1213546C (zh) | 一种数据传输过程中提高带宽利用率的方法 | |
CN1838311A (zh) | 串行传输接口的存储器装置以及错误更正方法 | |
CN1242324C (zh) | 手机大容量移动存储的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |