CN100396052C - 高可靠性的先入先出存储器及其实现方法 - Google Patents
高可靠性的先入先出存储器及其实现方法 Download PDFInfo
- Publication number
- CN100396052C CN100396052C CNB2004100088201A CN200410008820A CN100396052C CN 100396052 C CN100396052 C CN 100396052C CN B2004100088201 A CNB2004100088201 A CN B2004100088201A CN 200410008820 A CN200410008820 A CN 200410008820A CN 100396052 C CN100396052 C CN 100396052C
- Authority
- CN
- China
- Prior art keywords
- counter
- address counter
- cell
- write address
- count value
- 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
Landscapes
- Communication Control (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种高可靠性的先入先出存储器,包括有存储单元、读地址计数器、写地址计数器、数据单元计数器、空满标志产生逻辑和用于进行算法逻辑计算的逻辑模块。同时公开了一种高可靠性的先入先出存储器的实现方法,设置读地址计数器、写地址计数器和数据单元计数器中的两个计数器为独立计数器,逻辑模块获取两个独立计数器的计数值,并根据三个计数器计数值之间的关系,计算出第三个计数器的计数值,发送至第三个计数器。本发明方案使先入先出存储器在出现异常错误后,不需要重新复位就能够使FIFO在工作中自动恢复正常,保证对FIFO读写顺序的正确性,使其继续可靠的工作,从而提高FIFO的容错性和可靠性。
Description
技术领域
本发明涉及先入先出存储器(FIFO),特别是指一种具有自动纠正功能的高可靠性先入先出存储器及其实现方法。
背景技术
先入先出存储器的基本结构参见图1所示,包括:存储器101、读地址计数器102、写地址计数器103、数据单元计数器104和空满标志产生逻辑105。FIFO中存储器101一般采用随机存储器(RAM),如:双端口存储器(DPRAM)、单端口存储器(SPRAM)等。读地址计数器102、写地址计数器103和数据单元计数器104分别通过接收从一组控制信号总线106发来的控制信号独立进行计数,各计数器所接收的控制信号可以由信元级FIFO自身提供,也可以来自外部的控制装置。写地址计数器103和读地址计数器102将更新后的计数值发送至存储器101,存储器101根据收到的计数值,调整自身中的读地址和写地址指针。另外,数据单元计数器104将其计数值发送至空满标志产生逻辑105,空满标志产生逻辑105通过判断接收到的数据单元计数值,产生相应的空标志或满标志,来限制对存储器101的读写操作。其中,这里所述的数据单元是指FIFO读写数据过程中的基本单位。
目前比较常用的FIFO有信元级FIFO和数据帧级FIFO等。信元级FIFO一般以异步传输模式(ATM)信元作为基本单位进行数据读写,也即信元级FIFO中的数据单元是ATM信元。其中,ATM信元是一种固定长度的数据帧,是ATM网络中传输数据的基本单位,在ATM设备中,一般都是采用信元级FIFO存储ATM信元。信元级FIFO的存储器通常在逻辑上被划分为若干个相同大小的存储块,每个存储块用于存放一个ATM信元。
信元级FIFO的读地址和写地址在逻辑上分别分成两部分:高位地址和低位地址。高位地址指向存储器内部的某个存储块,即高位地址的一个地址值对应一个ATM信元,低位地址指向存储块中的一个具体存储单元。在接收一个ATM信元过程中,高位写地址保持不变,只有低位写地址变化;在完成接收一个ATM信元后,高位写地址改变,低位写地址被置为一个固定的初值,以保证写下个信元的起始地址相同;同样,在发送一个ATM信元过程中,高位读地址保持不变,只有低位读地址变化;在完成发送一个ATM信元后,高位读地址改变,低位读地址被置为一个固定的初值,以保证读下个信元的起始地址相同。因而,信元级FIFO的读地址计数器通常包含有高位读地址计数器和低位读地址计数器两部分,信元级FIFO的写地址计数器也同样包括有高位写地址计数器和低位写地址计数器两部分。
在信元级FIFO中数据单元计数器的计数值是信元级的,因此又称为信元计数器。每当接收或发送一个信元时,信元级FIFO中的信元计数器根据接收到的控制信号更新计数值,信元计数器的最大计数值对应于该FIFO中存储器能够存储的信元个数。
从信元级FIFO的控制总线发送来的控制信号一般包括:读开始信号、写开始信号和用于控制低位地址计数器计数的读写使能信号,或读结束信号、写结束信号和用于控制低位地址计数器计数的读写使能信号。这里的两组控制信号可由FIFO设计人员任意进行选择,取决于设计时打算以读写操作的开始时刻作为计数起点,还是以结束时刻作为计数起点。以读写操作的开始时刻作为计数起点为例:信元级FIFO中的读地址计数器只接收读开始信号和读使能信号,根据读开始信号更新高位读地址计数器的计数值,根据读使能信号更新低位读地址计数器的计数值;写地址计数器只接收写开始信号和写使能信号,根据写开始信号更新高位写地址计数器的计数值,根据写使能信号更新低位写地址计数器的计数值;信元计数器受读开始信号和写开始信号控制,如果接收到一个读开始信号则将信元计数值减1,如果接收到一个写开始或写结束信号则将信元计数值加1。
信元级FIFO的空满标志产生逻辑通过信元计数器输出的当前信元计数值,判断存储器当前的空满状态,并生成相应的空标志或满标志,空或满标志可以对FIFO的读或写接口产生反压,阻止外部向FIFO的存储器读取或写入数据。一般信元级FIFO输出的空标志和满标志是信元级的。
与信元级FIFO类似的还有数据帧级FIFO,它们的共同特点都是存储器划分为若干个存储块,每个存储块只能存放一个数据单元,计数器的高位地址指向存储器内部的存储块,低位地址指向存储块中的一个具体存储单元。不同点是数据帧级FIFO读写操作的基本单位为数据帧,其内部存储器的每个存储块中可存放一个数据帧,高位读或写地址的一个地址值对应一个数据帧,并采用数据帧计数器记录数据帧级FIFO中存储数据帧的个数。
由于现有技术FIFO中的读地址计数器、写地址计数器和数据单元计数器都是通过控制信号总线接收不同的控制信号,独立进行计数,各自的控制信号之间并没有关联。因此FIFO在实际使用过程会在可靠性上存在缺陷,即当出现异常情况导致FIFO内部的读地址、写地址或数据单元计数器的计数值出错时,FIFO无法做到自动纠错,并恢复正常。
举个例子来说:假设某个信元级FIFO最大可以存储的信元数为4个,在受到异常干扰前高位写地址、高位读地址和信元计数值都为0,在受到异常干扰后高位读地址发生跳变为1,高位写地址和信元计数值保持不变,假设干扰消失以后,按照先写入2个信元后再读出2个信元作为一次访问周期,对该信元级FIFO进行5次这样的读写访问,信元在存储器中的读写情况,
参见表1所示:
表1
从表1中可以看出,在读写访问过程中,写入信元的顺序为:C0、C1、C2、C3、C4、C5、C6、C7、C8、C9;而读出信元的顺序则成为:C1、X、C3、C0、C5、C2、C7、C4、C9、C6,其中,Cn表示信元n的值,X表示存储器中未初始化的信元。可以看出,由于一次扰动引起的高位读地址变化,导致输出信元的顺序发生了错误。虽然干扰很快消失,且该信元级FIFO以后的工作都处于正常状态,但是,其自身的读写错误却得不到纠正,并且如果读写访问继续进行下去的话,从该信元级FIFO中读出信元的顺序将仍然是错的。同样,如果发生异常跳变的是高位写地址值或信元计数值,信元级FIFO也不能自动对其进行纠正,并且也会导致对该信元级FIFO的读写错误,对于信元计数器计数值的错误还可能会引起空满标志产生逻辑产生空满标志时发生错误。
从上面的例子可以看出,现有技术FIFO中的计数器一旦出错则无法自动进行纠正或恢复,导致FIFO的数据输入输出顺序发生错误,如果要想恢复则必须对FIFO中所有的计数器进行复位,使所有计数器计数值复位成初始状态,这将给使用带来了很大麻烦。特别是由于在FIFO的各计数器发生出错情况时,很难被及时发现,从而造成长时间数据读写错误的严重后果,使FIFO的可靠性难以得到保证。
发明内容
有鉴于此,本发明的主要目的在于提供一种高可靠性的先入先出存储器,能够在工作中不需要重新复位,就可以使计数器的计数值错误得到自动纠正,保证FIFO的正常读写顺序,提高FIFO的可靠性。
本发明的另一主要目的在于提供一种高可靠性的先入先出存储器实现方法,使FIFO具有自动纠错功能,即使在计数器计数值出现异常错误后,也能够在工作中自动恢复正常,保证对FIFO的读写顺序正确,继续可靠的工作,从而提高FIFO的可靠性。
基于第一个目的本发明提供的一种高可靠性的先入先出存储器,包括有存储单元、读地址计数器、写地址计数器、数据单元计数器和空满标志产生逻辑;
并进一步包括:用于进行算法逻辑计算的逻辑模块;
所述读地址计数器、写地址计数器和数据单元计数器中有两个计数器为根据属于自身的控制信号独立计数的独立计数器,剩余的一个计数器为受所述逻辑模块控制进行计数的受控计数器;
所述两个独立计数器分别接收属于自身的控制信号,该两个独立计数器将输出信号发送至逻辑模块,所述逻辑模块进行计算后将输出信号发送至所述受控计数器。
该先入先出存储器所述逻辑模块进一步接收属于读地址计数器、写地址计数器和数据单元计数器的控制信号,将属于两个独立计数器的控制信号直接分别透传至两个独立计数器,并阻止属于第三个计数器独立计数的控制信号进入第三个计数器。
该先入先出存储器所述独立计数器为读地址计数器和写地址计数器,所述受控计数器为数据单元计数器;或所述独立计数器为写地址计数器和数据单元计数器,所述受控计数器为读地址计数器;或独立计数器为读地址计数器和数据单元计数器,所述受控计数器为写地址计数器。
该先入先出存储器所述读地址计数器包括高位读地址计数器和低位读地址计数器,所述写地址计数器包括高位写地址计数器和低位写地址计数器;
则所述独立计数器为高位读地址计数器和高位写地址计数器,所述受控计数器为数据单元计数器;或所述独立计数器为高位写地址计数器和数据单元计数器,所述受控计数器为高位读地址计数器;或所述独立计数器为高位读地址计数器和数据单元计数器,所述受控计数器为高位写地址计数器。
该先入先出存储器所述属于高位读地址计数器的控制信号为读开始信号或读结束信号;所述属于高位写地址计数器的控制信号为写开始信号或写结束信号;所述属于数据单元计数器的控制信号为读开始信号和写开始信号,或者为读结束信号和写结束信号。
该先入先出存储器所述先入先出存储器为信元级先入先出存储器,所述数据单元计数器为信元计数器;或者所述先入先出存储器为数据帧级先入先出存储器,所述数据单元计数器为数据帧计数器。
该先入先出存储器,所述存储单元可存储的数据单元数目比存储单元实际容量少至少一个。
该先入先出存储器所述逻辑模块为特定用途集成电路。
基于另一目的本发明提供了一种高可靠性的先入先出存储器实现方法,将所述先入先出存储器的读地址计数器、写地址计数器和数据单元计数器中的两个设置为独立计数的独立计数器,剩余的一个计数器设置为受控计数器,并进一步包括以下步骤:
a)所述两个独立计数器分别接收属于自身的控制信号,该两个独立计数器根据收到的控制信号更新自身的计数值;
b)获取该两个独立计数器的当前计数值,并通过所述受控计数器的计数值与该两个独立计数器计数值之间的逻辑关系,计算得到受控计数器的当前计数值,发送至受控计数器;
c)所述受控计数器根据发送来的当前计数值更新自身的计数值。
该方法所述两个独立计数器分别是写地址计数器和读地址计数器,所述受控计数器是数据单元计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:数据单元计数器计数值为写地址计数器计数值与读地址计数器计数值的差。
该方法步骤b)中所述计算得到受控计数器的当前计数值后,进一步包括:判断当前计算得到的作为受控计数器的数据单元计数器计数值是否为0,如果不是0,则继续后面流程;如果是0,则进一步判断本次对所述先入先出存储器进行的是读操作还是写操作,如果是写操作,则判定数据单元计数器当前计数值为数据单元计数器的最大计数值,如果是读操作,则判定数据单元当前计数值为0。
该方法进一步包括:预先设置所述先入先出存储器可存储的数据单元数目比存储器实际容量少至少一个。
该方法所述两个独立计数器分别是写地址计数器和数据单元计数器,所述受控计数器是读地址计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:读地址计数器计数值为写地址计数器计数值与数据单元计数器计数值的差。
该方法所述两个独立计数器分别是读地址计数器和数据单元计数器,所述受控计数器是写地址计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:写地址计数器计数值为读地址计数器计数值与数据单元计数器计数值的和。
该方法所述读地址计数器包括高位读地址计数器和低位读地址计数器,所述写地址计数器包括高位写地址计数器和低位写地址计数器;所述逻辑关系中的写地址计数器计数值为高位写地址值,所述读地址计数器计数值为高位读地址值。
该方法所述属于高位读地址计数器的控制信号为读开始信号或读结束信号;所述属于高位写地址计数器的控制信号为写开始信号或写结束信号;所述属于数据单元计数器的控制信号为读开始信号和写开始信号,或者为读结束信号和写结束信号。
该方法所述先入先出存储器为信元级先入先出存储器,所述数据单元计数器为信元计数器;或者所述先入先出存储器为数据帧级先入先出存储器,所述数据单元计数器为数据帧计数器。
从上述方案可以看出,本发明公开的高可靠性的先入先出存储器及其实现方法,在写地址计数器、读地址计数器和数据单元计数器之间建立联系,利用三个计数器计数值之间的内在逻辑关系,使FIFO的计数器计数值即使出错,也能够迅速自动恢复正常,避免数据的写入和读出顺序发生错误,从而有效解决了现有技术FIFO的计数器计数值和读写顺序发生错误的情况下无法自动恢复的问题,大大提高了FIFO的可靠性和容错能力,并且本发明方案具有技术灵活、实现简单、应用广泛等特点和优点。
附图说明
图1为现有技术FIFO的结构示意图;
图2为本发明第一个较佳实施例中FIFO的结构示意图;
图3为本发明第一个较佳实施例FIFO的工作流程示意图;
图4为本发明第二个较佳实施例中FIFO的结构示意图;
图5为本发明第二个较佳实施例FIFO的工作流程示意图;
图6为本发明第三个较佳实施例中FIFO的结构示意图;
图7为本发明第三个较佳实施例FIFO的工作流程示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
现有技术方案中导致信元级或数据帧级FIFO的计数器无法进行自动纠错和自动恢复的根本原因,在于FIFO的高位读地址、高位写地址和数据单元计数值都是根据FIFO的控制信号独立进行计数的,而没有考虑到它们的计数值之间存在的逻辑关系,这样一旦由于异常情况导致某个计数器的计数值出错,则无法自动恢复正常。实际上这三个计数器的计数值之间是密切相关的,知道其中任何两个计数器的计数值,通过逻辑计算就可以得到第三个计数器的值。
通常在正常情况下,信元级或数据帧级FIFO的三个计数器之间应该符合以下公式(1)、公式(2)和公式(3)的关系:
公式(1):数据单元计数值=高位写地址值-高位读地址值;
公式(2):高位读地址值=高位写地址值-数据单元计数值;
公式(3):高位写地址值=高位读地址值+数据单元计数值。
因此,本发明的技术方案是在FIFO的数据单元计数器、写地址计数器和读地址计数器之间建立联系,使高位读地址计数器、高位写地址计数器和数据单元计数器之中只有两个计数器是根据FIFO控制信号总线发送来的控制信号独立计数,而剩下的一个计数器的计数值则按照上面公式(1)、公式(2)或公式(3),通过算法逻辑计算得到。这样在FIFO中计数器计数值出错的情况下,由于FIFO中各计数器之间的逻辑联系,将使FIFO输出信元顺序和输入信元顺序可以很快自动恢复正常,从而避免现有技术中输出和输入信元顺序出错后,仍会长时间保持错误状态而无法自动恢复的问题。
下面以信元级FIFO为例,对本发明高可靠性的先入先出存储器的结构和实现方法进行详细说明。
根据公式(1)的逻辑关系设计的信元级FIFO的结构,参见图2所示,包括:存储器101、读地址计数器102、写地址计数器103、信元计数器104和空满标志产生逻辑105,其中,读地址计数器102和写地址计数器103中包含有高位读地址计数器102a、低位读地址计数器102b两部分,以及高位写地址计数器103a和低位写地址计数器103b两部分,低位的读和写计数器分别根据读写使能信号独立计数。与现有技术不同的是该FIFO进一步包含一个具有数据处理功能的逻辑模块201,该逻辑模块201主要用于根据上述三个计数器计数值之间的逻辑关系进行算法逻辑计算,所述逻辑模块201可以是特定用途集成电路(Asic)。该信元级FIFO中的读地址计数器102、写地址计数器103和信元计数器104都与逻辑模块201连接,并通过逻辑模块201与控制信号总线106连接。
该FIFO的高位写地址计数器103a和高位读地址计数器102a为根据属于自身的控制信号独立进行计数的独立计数器,信元计数器104则作为受控计数器。读开始或读结束信号、写开始或写结束信号、以及用于控制低位地址计数器计数的读写使能信号,通过控制信号总线106进入逻辑模块201。逻辑模块201将读写使能信号分别直接透传至低位读地址计数器102b和低位写地址计数器103b;将用于高位写地址计数器103a计数的写开始或写结束信号透传至高位写地址计数器103a,将用于高位读地址计数器102a计数的读开始或读结束信号透传至高位读地址计数器102a;而阻止用于信元控制器104计数的写开始或写结束、读开始或读结束信号传输至信元计数器104。高位写地址计数器103a和高位读地址计数器102a分别将输出信号发送至逻辑模块201,逻辑模块201通过公式(1)计算得到信元计数值,发送至信元计数器104。
由于信元计数器的计数值完全受到逻辑模块的控制,因此,本实施例FIFO中信元计数器的功能可以简化,只需具有暂时的数据记录功能即可,所以信元计数器可以采用其它具有简单数据记录功能的器件代替,甚至这一部分信元计数器的功能可以完全放在逻辑模块中完成,这样相当于将信元计数器内嵌在逻辑模块中。
该信元级FIFO的工作过程参见图3所示:
步骤301,逻辑模块将从控制信号总线接收到的读地址计数器和写地址计数器的控制信号不作处理直接透传至相应的计数器,而阻断向信元计数器发送的控制信号。
步骤302,读地址计数器和写地址计数器根据各自接收的控制信号更新自己的计数值,并分别将更新后的高位读地址值和高位写地址值发送至逻辑模块。
步骤303,逻辑模块根据接收到的高位写地址值和高位读地址值,通过公式(1)的逻辑关系计算信元计数值。
步骤304,判断步骤303计算得到的信元计数值是否为0,如果是,则进入步骤305,否则,进入步骤306。
步骤305,判断本次对该信元级FIFO所进行的操作是读操作还是写操作,如果是读操作,则判定信元计数值是0,进入步骤306;如果是写操作,则判定信元计数值是信元计数器的最大计数值,进入步骤306。
步骤306,将得到的信元计数值发送至信元计数器。
步骤307,信元计数器根据逻辑模块发来的信元计数值更新自身的计数值。
然后,该信元级FIFO的空满标志产生逻辑可以根据对信元计数器的计数值判断产生空满标志。
通过上述方案可以实现信元级FIFO的自动纠错和自动恢复。举个例子说明,假设一个信元级FIFO的存储器最大可存储4个信元。
在该信元级FIFO工作时,假设受到干扰前高位写地址和高位读地址都为0,在受到干扰后高位读地址跳变为1,则信元级FIFO的信元计数器的计数值按照公式(1):信元计数值=高位写地址-高位读地址=00-01=11,得到信元计数值为3。
这样,如果异常跳变发生后接下来执行由外部向信元级FIFO写入信元的写入操作,则当写入一个信元后,按照公式(1)信元计数值=高位写地址-高位读地址=00-00=00。由于这时高位写地址与高位读地址相同,存储器有可能是读空也可能是写满,因此这种情况下根据步骤301-307的流程,应进一步判断本次对信元级FIFO进行的操作是读操作还是写操作,如果判断结果是写操作,则应是信元计数器的最大计数值,即信元计数器的计数进一位成为100,即计数值为4。之后,空满标志产生逻辑通过判断信元计数值为4与存储器的最大存储量相等,认为该存储器已满,产生满标志,对写入接口产生反压,阻止外部数据继续写入FIFO。这样在下一次只能对该信元级FIFO执行读操作。
以发生异常跳变后,按照先写入2个信元后再读出2个信元作为一次访问周期为例,对该FIFO进行5次这样的读写访问后的结果参见表2所示:
表2
表2中,Cn表示信元n的值,X表示存储器中未初始化的信元。从中可以看出,写入信元的顺序为:C0、C1、C2、C3、C4、C5、C6、C7、C8......;读出信元的顺序为:C0、C1、C2、C3、C4、C5、C6......。可见,读出信元的顺序和写入信元的顺序相比没有发生改变,FIFO各计数器的计数值和FIFO的输入输出信元顺序均恢复正常。
如果发生跳变后对该信元级FIFO执行信元的读取操作,则由于信元计数值为3,因此最多会读出三个存储块的信元,如果读取三个信元1、2、3,这样高位读地址会指到0,恢复到与高位写地址相同,很容易可以看出接下来对该FIFO的读写顺序也将恢复正常。
如果仍然按照读出2个信元后再写入2个信元的周期顺序,则此时对该FIFO进行5次这样的读写访问后的结果参见表3所示:
表3
表3中,Cn表示信元n的值,X表示存储器中未初始化的信元。从中可以看出,写入信元的顺序为:C0、C1、C2、C3、C4、C5、C6、C7......;读出信元的顺序为:C0、C1、C2、C3、C4、C5、C6......。可见,读出信元的顺序和写入信元的顺序相比也没有发生改变。
另外,对于采用公式(1)设计的FIFO,为了省去步骤304和3 05对信元计数器的计数值为0时的处理过程,也可预先设定FIFO中存储器的最大可用信元数比存储器的实际容量少一个或多个,对于信元级FIFO来说即是使存储块的可用数目比实际存储块数目少一块或多块,比如:假设所少的块数为n,信元级FIFO中实际存储块个数为m,则1≤n<m,其中n和m都为整数。这样,当信元计数值大于等于m-n时,即认为存储器已满,空满标志产生逻辑产生满标志,禁止外部数据写入。例如:m=4,n=1,这样当信元级FIFO的信元计数器计数值根据公式(1)计算为3时,空满标志产生逻辑认为存储器已满,产生满标志;当信元计数器计数值为0时,空满标志产生逻辑产生空标志,因此避免了信元计数值为0时,产生的歧义,无需进行步骤304和305所述的对信元计数器实际信元计数值的判定过程。本发明较佳的实施方案通常是取n=1。
对于采用公式(2)的逻辑关系设计的信元级FIFO,其结构参见图4所示,与采用公式(1)的信元级FIFO相同的是包括:存储器101、读地址计数器102、写地址计数器103、信元计数器104、空满标志产生逻辑105,以及一个具有数据处理功能的逻辑模块201;该信元级FIFO中的读地址计数器102、写地址计数器103和信元计数器104都与逻辑模块201连接,并通过逻辑模块201与控制信号总线106连接。
不同的只是该信元级FIFO的高位写地址计数器103a和信元计数器104作为独立计数器独立进行计数,而其读地址计数器102中的高位读地址计数器102a则作为受控计数器,其产生的高位读地址计数值受逻辑模块201控制。
逻辑模块201将读写使能信号分别直接透传至低位读地址计数器102b和低位写地址计数器103b;将用于高位写地址计数器103a计数的写开始或写结束信号透传至高位写地址计数器103a;将用于信元控制器104计数的写开始或写结束、读开始或读结束信号透传至信元计数器104;而阻止用于高位读地址计数器102a计数的读开始或读结束信号传输至高位读地址计数器102a。高位写地址计数器103a和信元计数器104分别将输出信号发送至逻辑模块201,逻辑模块201通过公式(2)计算得到高位读地址值,发送至高位读地址计数器102a。
该信元级FIFO的工作过程参见图5所示:
步骤501,逻辑模块将从控制信号总线接收到的写地址计数器和信元计数器的控制信号不作处理直接透传至相应的计数器,而阻断高位读地址计数器的控制信号。
步骤502,写地址计数器和信元计数器根据各自接收的控制信号更新自己的计数值,并分别将更新后的高位写地址值和信元计数值发送至逻辑模块。
步骤503,逻辑模块根据接收到的高位写地址值和信元计数值,通过公式(2)的逻辑关系计算得到高位读地址计数值。
步骤504,逻辑模块将得到的高位读地址计数值发送至读地址计数器;
步骤505,读地址计数器根据逻辑模块发来的高位写地址计数值更新自身的高位读地址计数器计数值。
然后,该信元级FIFO的空满标志产生逻辑同样根据对信元计数器的计数值判断产生空满标志。
从上述可以看出本实施例信元级FIFO读地址计数器的高位读地址计数值受逻辑模块控制,因此也可以对读地址计数器的功能进行简化,使高位读地址计数器部分只需具有数据记录功能即可。
举个例子说明,假设一个信元级FIFO的存储器最大可存储4个信元。
在该FIFO工作时,假设干扰前高位写地址为0,信元计数值为3,则根据公式(2):高位读地址=高位写地址-信元计数值=00-11=01,即高位读地址为1。假设此时信元计数值异常跳变为1,则按照公式(2)高位读地址=高位写地址-信元计数值=00-01=11,即高位读地址也随之改变为3。
如果下一步是读操作,则根据信元计数值1,最多只能从存储器中读取一个存储块的信元,即读存储块3中的信元,此时信元计数值为0,空满标志产生逻辑产生空标志,这样高位读地址指向0,高位读地址与高位写地址相同。
以按照先读出2个信元后再写入2个信元的周期顺序,则对该FIFO进行5次这样的读写访问后的结果参见表4所示:
表4
如果下一步是写操作,按照写入2个信元后再读出2个信元的周期顺序,则对该FIFO进行5次这样的读写访问后的结果参见表5所示:
表5
表4和表5中,Cn表示信元n的值,X表示存储器中未初始化的信元。从表4和表5中可以看出,不论下一步是读操作还是写操作,读出信元的顺序和写入信元的顺序都将很快恢复正常。
对于采用公式(3)的逻辑关系设计的信元级FIFO,其结构参见图4所示,与采用公式(1)和公式(2)的信元级FIFO相同的是包括:存储器101、读地址计数器102、写地址计数器103、信元计数器104、空满标志产生逻辑105,以及一个具有数据处理功能的逻辑模块201;该信元级FIFO中的读地址计数器102、写地址计数器103和信元计数器104都与逻辑模块201连接,并通过逻辑模块201与控制信号总线106连接。
所不同的只是该信元级FIFO的高位读地址计数器102a和信元计数器104作为独立计数器独立进行计数,其写地址计数器103中的高位写地址计数器103a则作为受控计数器,其产生的高位写地址值受逻辑模块201控制。
逻辑模块201将读写使能信号分别直接透传至低位读地址计数器102b和低位写地址计数器103b;将用于高位读地址计数器102a计数的读开始或读结束信号透传至高位读地址计数器102a;将用于信元控制器104计数的写开始或写结束、读开始或读结束信号透传至信元计数器104;而阻止用于高位写地址计数器103a计数的写开始或写结束信号传输至高位写地址计数器103a。高位读地址计数器102a和信元计数器104分别将输出信号发送至逻辑模块201,逻辑模块201通过公式(3)计算得到高位写地址值,发送至高位写地址计数器103a。
该信元级FIFO的工作过程参见图7所示:
步骤701,逻辑模块将从控制信号总线接收到的读地址计数器和信元计数器的控制信号不作处理直接透传至相应的计数器,而阻断高位写地址计数器的控制信号。
步骤702,读地址计数器和信元计数器根据各自接收的控制信号更新自己的计数值,并分别将更新后的高位读地址值和信元计数值发送至逻辑模块。
步骤703,逻辑模块根据接收到的高位读地址值和信元计数值,通过公式(3)的逻辑关系计算得到高位写地址计数值。
步骤704,逻辑模块将得到的高位写地址计数值发送至写地址计数器。
步骤705,写地址计数器根据逻辑模块发来的高位写地址计数值更新自身的高位写地址计数器的计数值。
然后,该信元级FIFO的空满标志产生逻辑同样根据对信元计数器的计数值判断产生空满标志。
从上述可以看出本实施例信元级FIFO写地址计数器的高位写地址计数值受逻辑模块控制,因此也可以对写地址计数器的功能进行简化,使高位写地址计数器部分只需具有数据记录功能即可。
该信元级FIFO的空满标志产生逻辑根据对信元计数器的计数值判断产生空满标志。采用公式(3)设计的信元级FIFO的工作过程与采用公式(1)、(2)类似,在由于异常导致FIFO中计数值出错的情况下,采用公式(3)设计的信元级FIFO也能够自动恢复正常。
并且从上面可以看出,对于采用公式(2)和公式(3)设计的FIFO,由于其中的信元计数器独立计数,因此,不会涉及到当信元计数器为0时,判断前一操作是读还是写操作的问题,从而可以使设计更为容易。另外,如果需要也可以设置采用公式(2)和公式(3)设计的信元级FIFO中存储块的可用数目比实际少一块或多块,不会影响本发明效果。
如果信元级FIFO的存储器最大可存储8个信元。则写地址和读地址计数器的高位写或读地址可采用三位2进制进行计数。以采用公式(3)的情况为例:假设高位读地址为3,信元计数值为5,则根据公式(3):高位写地址=高位读地址+信元计数值=011+101=000,即此时写地址计数器的高位写地址计数为0。
当FIFO存储器中存储块个数不是2n个时,也可以对计数器的计数值进行换算,以使其满足公式(1)、(2)或(3)的形式,然后再根据其中的任一个公式设计得到高可靠性FIFO。
本发明方案提供的FIFO设计方案改变了现有信元级FIFO设计中的高位读地址、高位写地址和信元计数值都是独立计数的固有形式,使在FIFO中只有两个计数器是根据FIFO的控制信号独立计数的,而另一个计数值则按照上面公式(1)、公式(2)或公式(3),通过算法逻辑计算得到,这样,在由于异常导致FIFO中计数值出错的情况下,FIFO很快就能自动恢复正常,不会像现有的FIFO那样出现输出信元顺序和输入信元顺序不同而无法恢复的问题。
本发明上面所述所有方案也可以同样适用于数据帧级FIFO等在读地址计数器、写地址计数器和信元计数器的计数值之间有逻辑关系的先入先出存储器。另外,对于以字节为基本单位进行读写操作的FIFO,其数据单元计数器的每个计数值代表一个字节,在该类FIFO的读地址计数器和写地址计数器不作高位地址和低位地址的区分,每个地址位只代表一个字节,读地址计数器和写地址计数器的输出也只有读地址值和写地址值两种。本发明方案可同样适用于这类FIFO,只是相应的上述公式(1)、(2)和(3)应修改为:
公式(1’):数据单元计数器计数值=写地址计数器计数值-读地址计数器计数值;
公式(2’):读地址计数器计数值=写地址计数器计数值-数据单元计数器计数值;
公式(3’):写地址计数器计数值=读地址计数器计数值+数据单元计数器计数值。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (17)
1.一种高可靠性的先入先出存储器,包括有存储单元、读地址计数器、写地址计数器、数据单元计数器和空满标志产生逻辑;
其特征在于,进一步包括:用于进行算法逻辑计算的逻辑模块;
所述读地址计数器、写地址计数器和数据单元计数器中有两个计数器为根据属于自身的控制信号独立计数的独立计数器,剩余的一个计数器为受所述逻辑模块控制进行计数的受控计数器;
所述两个独立计数器分别接收属于自身的控制信号,该两个独立计数器将输出信号发送至逻辑模块,所述逻辑模块进行计算后将输出信号发送至所述受控计数器。
2.根据权利要求1所述先入先出存储器,其特征在于,所述逻辑模块进一步接收属于读地址计数器、写地址计数器和数据单元计数器的控制信号,将属于两个独立计数器的控制信号直接分别透传至两个独立计数器,并阻止属于第三个计数器独立计数的控制信号进入第三个计数器。
3.根据权利要求1或2所述先入先出存储器,其特征在于,所述独立计数器为读地址计数器和写地址计数器,所述受控计数器为数据单元计数器;或所述独立计数器为写地址计数器和数据单元计数器,所述受控计数器为读地址计数器;或独立计数器为读地址计数器和数据单元计数器,所述受控计数器为写地址计数器。
4.根据权利要求1或2所述先入先出存储器,其特征在于,所述读地址计数器包括高位读地址计数器和低位读地址计数器,所述写地址计数器包括高位写地址计数器和低位写地址计数器;
则所述独立计数器为高位读地址计数器和高位写地址计数器,所述受控计数器为数据单元计数器;或所述独立计数器为高位写地址计数器和数据单元计数器,所述受控计数器为高位读地址计数器;或所述独立计数器为高位读地址计数器和数据单元计数器,所述受控计数器为高位写地址计数器。
5.根据权利要求4所述先入先出存储器,其特征在于,所述属于高位读地址计数器的控制信号为读开始信号或读结束信号;
所述属于高位写地址计数器的控制信号为写开始信号或写结束信号;
所述属于数据单元计数器的控制信号为读开始信号和写开始信号,或者为读结束信号和写结束信号。
6.根据权利要求4所述先入先出存储器,其特征在于,所述先入先出存储器为信元级先入先出存储器,所述数据单元计数器为信元计数器;或者所述先入先出存储器为数据帧级先入先出存储器,所述数据单元计数器为数据帧计数器。
7.根据权利要求1所述先入先出存储器,其特征在于,所述存储单元可存储的数据单元数目比存储单元实际容量少至少一个。
8.根据权利要求1所述先入先出存储器,其特征在于,所述逻辑模块为特定用途集成电路。
9.一种高可靠性的先入先出存储器实现方法,其特征在于,将所述先入先出存储器的读地址计数器、写地址计数器和数据单元计数器中的两个设置为独立计数的独立计数器,剩余的一个计数器设置为受控计数器,并进一步包括以下步骤:
a)所述两个独立计数器分别接收属于自身的控制信号,该两个独立计数器根据收到的控制信号更新自身的计数值;
b)获取该两个独立计数器的当前计数值,并通过所述受控计数器的计数值与该两个独立计数器计数值之间的逻辑关系,计算得到受控计数器的当前计数值,发送至受控计数器;
c)所述受控计数器根据发送来的当前计数值更新自身的计数值。
10.根据权利要求9所述方法,其特征在于,所述两个独立计数器分别是写地址计数器和读地址计数器,所述受控计数器是数据单元计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:数据单元计数器计数值为写地址计数器计数值与读地址计数器计数值的差。
11.根据权利要求10所述方法,其特征在于,步骤b)中所述计算得到受控计数器的当前计数值后,进一步包括:判断当前计算得到的作为受控计数器的数据单元计数器计数值是否为0,如果不是0,则继续后面流程;如果是0,则进一步判断本次对所述先入先出存储器进行的是读操作还是写操作,如果是写操作,则判定数据单元计数器当前计数值为数据单元计数器的最大计数值,如果是读操作,则判定数据单元当前计数值为0。
12.根据权利要求10所述方法,其特征在于,进一步包括:预先设置所述先入先出存储器可存储的数据单元数目比存储器实际容量少至少一个。
13.根据权利要求9所述方法,其特征在于,所述两个独立计数器分别是写地址计数器和数据单元计数器,所述受控计数器是读地址计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:读地址计数器计数值为写地址计数器计数值与数据单元计数器计数值的差。
14.根据权利要求9所述方法,其特征在于,所述两个独立计数器分别是读地址计数器和数据单元计数器,所述受控计数器是写地址计数器,所述受控计数器计数值与两个独立计数器计数值之间的逻辑关系为:写地址计数器计数值为读地址计数器计数值与数据单元计数器计数值的和。
15.根据权利要求10、11、12、13或14所述方法,其特征在于,所述读地址计数器包括高位读地址计数器和低位读地址计数器,所述写地址计数器包括高位写地址计数器和低位写地址计数器;
所述逻辑关系中的写地址计数器计数值为高位写地址值,所述读地址计数器计数值为高位读地址值。
16.根据权利要求15所述方法,其特征在于,所述属于高位读地址计数器的控制信号为读开始信号或读结束信号;
所述属于高位写地址计数器的控制信号为写开始信号或写结束信号;
所述属于数据单元计数器的控制信号为读开始信号和写开始信号,或者为读结束信号和写结束信号。
17.根据权利要求15所述方法,其特征在于,所述先入先出存储器为信元级先入先出存储器,所述数据单元计数器为信元计数器;或者所述先入先出存储器为数据帧级先入先出存储器,所述数据单元计数器为数据帧计数器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100088201A CN100396052C (zh) | 2004-03-12 | 2004-03-12 | 高可靠性的先入先出存储器及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100088201A CN100396052C (zh) | 2004-03-12 | 2004-03-12 | 高可靠性的先入先出存储器及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1668022A CN1668022A (zh) | 2005-09-14 |
CN100396052C true CN100396052C (zh) | 2008-06-18 |
Family
ID=35038906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100088201A Expired - Fee Related CN100396052C (zh) | 2004-03-12 | 2004-03-12 | 高可靠性的先入先出存储器及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100396052C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100346289C (zh) * | 2006-04-12 | 2007-10-31 | 华为技术有限公司 | 一种先入先出存储器及其输出空满标志的方法 |
CN108108148B (zh) * | 2016-11-24 | 2021-11-16 | 舒尔电子(苏州)有限公司 | 一种数据处理方法和装置 |
CN116107795B (zh) * | 2023-04-14 | 2023-07-14 | 苏州萨沙迈半导体有限公司 | 报错电路及芯片设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1035381A (zh) * | 1987-10-14 | 1989-09-06 | 北方电信有限公司 | 先进先出(fifo)缓冲控制器 |
CN1035382A (zh) * | 1987-10-14 | 1989-09-06 | 北方电信有限公司 | 先进先出(fifo)信息缓冲控制器 |
CN1116764A (zh) * | 1994-07-06 | 1996-02-14 | 现代电子产业株式会社 | 先进先出缓冲存储器 |
-
2004
- 2004-03-12 CN CNB2004100088201A patent/CN100396052C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1035381A (zh) * | 1987-10-14 | 1989-09-06 | 北方电信有限公司 | 先进先出(fifo)缓冲控制器 |
CN1035382A (zh) * | 1987-10-14 | 1989-09-06 | 北方电信有限公司 | 先进先出(fifo)信息缓冲控制器 |
CN1116764A (zh) * | 1994-07-06 | 1996-02-14 | 现代电子产业株式会社 | 先进先出缓冲存储器 |
Also Published As
Publication number | Publication date |
---|---|
CN1668022A (zh) | 2005-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101019192B (zh) | 跟踪出故障的存储单元的方法和设备 | |
CN100465934C (zh) | 一种在异步时钟域传输数据的装置及其方法 | |
CN110515881A (zh) | 一种串口通信帧的同步系统及同步高性能方法 | |
CN106407050A (zh) | 一种数据存储方法 | |
CN101807165A (zh) | 用于快速缓存命中检测的系统和方法 | |
CN100531104C (zh) | 一种高可靠性的先入先出存储器及其实现方法 | |
CN100396052C (zh) | 高可靠性的先入先出存储器及其实现方法 | |
CN1062668C (zh) | 具有错误检测与纠正装置的fifo缓存系统 | |
CN100437527C (zh) | 存储器装置 | |
CN115509466B (zh) | 一种数据管理方法、装置及电子设备和存储介质 | |
US20100077280A1 (en) | Semiconductor recording device | |
CN109669641B (zh) | 降低ssd误码率的数据存放方法及装置 | |
US20060274875A1 (en) | Interface circuit for a media access controller and an optical line termination transceiver module | |
CN110956995A (zh) | 一种stt-ram缓存的动态数据擦洗方法 | |
CN104051020A (zh) | 存储器装置及其操作方法 | |
CN112511156B (zh) | 一种脉冲计量及存储方法 | |
CN106407037B (zh) | 一种双端口存储器字线控制电路 | |
CN101937722B (zh) | 存储器装置及其相关测试方法 | |
CA1310761C (en) | Memory readback check apparatus | |
CN103038829B (zh) | 用以使由于纠错而引起的老化相关的性能退化最小化的nand存储器控制器中的动态缓冲管理 | |
CN109800102A (zh) | 存储器装置及其操作方法 | |
US11010244B2 (en) | Memory data management method | |
CN107391290A (zh) | 一种闪存制程差异的检测方法 | |
CN103092730A (zh) | 一种信息存储与读取方法 | |
CN104348738A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080618 Termination date: 20180312 |