專利名稱:一種高可靠性的先入先出存儲(chǔ)器及其實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及先入先出存儲(chǔ)器(FIFO),特別是指一種具有自動(dòng)糾正功能的高可靠性先入先出存儲(chǔ)器及其實(shí)現(xiàn)方法。
背景技術(shù):
先入先出存儲(chǔ)器的基本結(jié)構(gòu)參見圖1所示,包括存儲(chǔ)器101、讀地址計(jì)數(shù)器102、寫地址計(jì)數(shù)器103、數(shù)據(jù)單元計(jì)數(shù)器104和空滿標(biāo)志產(chǎn)生邏輯105。FIFO中存儲(chǔ)器101一般采用隨機(jī)存儲(chǔ)器(RAM),如雙端口存儲(chǔ)器(DPRAM)、單端口存儲(chǔ)器(SPRAM)等。讀地址計(jì)數(shù)器102、寫地址計(jì)數(shù)器103和數(shù)據(jù)單元計(jì)數(shù)器104分別通過接收從一組控制信號(hào)總線106發(fā)來的控制信號(hào)獨(dú)立進(jìn)行計(jì)數(shù),計(jì)數(shù)器所接收的控制信號(hào)可以由信元級(jí)FIFO自身提供,也可以來自外部的控制裝置。寫地址計(jì)數(shù)器103和讀地址計(jì)數(shù)器102將更新后的計(jì)數(shù)值發(fā)送至存儲(chǔ)器101,存儲(chǔ)器101根據(jù)收到的計(jì)數(shù)值,調(diào)整自身中的讀地址和寫地址指針。另外,數(shù)據(jù)單元計(jì)數(shù)器104將其計(jì)數(shù)值發(fā)送至空滿標(biāo)志產(chǎn)生邏輯105,空滿標(biāo)志產(chǎn)生邏輯105通過判斷接收到的數(shù)據(jù)單元計(jì)數(shù)值,產(chǎn)生相應(yīng)的空標(biāo)志或滿標(biāo)志,來限制對(duì)存儲(chǔ)器101的讀寫操作。其中,這里所述的數(shù)據(jù)單元是指FIFO讀寫數(shù)據(jù)過程中的基本單位。
目前比較常用的FIFO有信元級(jí)FIFO和數(shù)據(jù)幀級(jí)FIFO等。信元級(jí)FIFO一般以異步傳輸模式(ATM)信元作為基本單位進(jìn)行數(shù)據(jù)讀寫,也即信元級(jí)FIFO中的數(shù)據(jù)單元是ATM信元。其中,ATM信元是一種固定長(zhǎng)度的數(shù)據(jù)幀,是ATM網(wǎng)絡(luò)中傳輸數(shù)據(jù)的基本單位,在ATM設(shè)備中,一般都是采用信元級(jí)FIFO存儲(chǔ)ATM信元。信元級(jí)FIFO的存儲(chǔ)器通常在邏輯上被劃分為若干個(gè)相同大小的存儲(chǔ)塊,每個(gè)存儲(chǔ)塊用于存放一個(gè)ATM信元。
信元級(jí)FIFO的讀地址和寫地址在邏輯上分別分成兩部分高位地址和低位地址。高位地址指向存儲(chǔ)器內(nèi)部的某個(gè)存儲(chǔ)塊,即高位地址的一個(gè)地址值對(duì)應(yīng)一個(gè)ATM信元,低位地址指向存儲(chǔ)塊中的一個(gè)具體存儲(chǔ)單元。在接收一個(gè)ATM信元過程中,高位寫地址保持不變,只有低位寫地址變化;在完成接收一個(gè)ATM信元后,高位寫地址改變,低位寫地址被置為一個(gè)固定的初值,以保證寫下個(gè)信元的起始地址相同;同樣,在發(fā)送一個(gè)ATM信元過程中,高位讀地址保持不變,只有低位讀地址變化;在完成發(fā)送一個(gè)ATM信元后,高位讀地址改變,低位讀地址被置為一個(gè)固定的初值,以保證讀下個(gè)信元的起始地址相同。因而,信元級(jí)FIFO的讀地址計(jì)數(shù)器通常包含有高位讀地址計(jì)數(shù)器和低位讀地址計(jì)數(shù)器兩部分,信元級(jí)FIFO的寫地址計(jì)數(shù)器也同樣包括有高位寫地址計(jì)數(shù)器和低位寫地址計(jì)數(shù)器兩部分。
在信元級(jí)FIFO中數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值是信元級(jí)的,因此稱為信元計(jì)數(shù)器。每當(dāng)接收或發(fā)送一個(gè)信元時(shí),信元級(jí)FIFO中的信元計(jì)數(shù)器根據(jù)接收到的控制信號(hào)更新計(jì)數(shù)值,信元計(jì)數(shù)器的最大計(jì)數(shù)值對(duì)應(yīng)于該FIFO中存儲(chǔ)器能夠存儲(chǔ)的信元個(gè)數(shù)。
從信元級(jí)FIFO的控制總線發(fā)送來的控制信號(hào)一般包括讀開始信號(hào)、寫開始信號(hào)和用于控制低位地址計(jì)數(shù)器計(jì)數(shù)的讀寫使能信號(hào),或讀結(jié)束信號(hào)、寫結(jié)束信號(hào)和用于控制低位地址計(jì)數(shù)器計(jì)數(shù)的讀寫使能信號(hào)。這里的兩組控制信號(hào)可由FIFO設(shè)計(jì)人員任意進(jìn)行選擇,取決于設(shè)計(jì)時(shí)打算以讀寫操作的開始時(shí)刻作為計(jì)數(shù)起點(diǎn),還是以結(jié)束時(shí)刻作為計(jì)數(shù)起點(diǎn)。以讀寫操作的開始時(shí)刻作為計(jì)數(shù)起點(diǎn)為例,信元級(jí)FIFO中的讀地址計(jì)數(shù)器只接收讀開始信號(hào)和讀使能信號(hào),根據(jù)讀開始信號(hào)更新高位讀地址計(jì)數(shù)器的計(jì)數(shù)值,根據(jù)讀使能信號(hào)更新低位讀地址計(jì)數(shù)器的計(jì)數(shù)值;寫地址計(jì)數(shù)器只接收寫開始信號(hào)和寫使能信號(hào),根據(jù)寫開始信號(hào)更新高位寫地址計(jì)數(shù)器的計(jì)數(shù)值,根據(jù)寫使能信號(hào)更新低位寫地址計(jì)數(shù)器的計(jì)數(shù)值;信元計(jì)數(shù)器只接收讀開始信號(hào)和寫開始信號(hào),如果接收到一個(gè)讀開始信號(hào)則將信元計(jì)數(shù)值減1,如果接收到一個(gè)寫開始信號(hào)則將信元計(jì)數(shù)值加1。
信元級(jí)FIFO的空滿標(biāo)志產(chǎn)生邏輯包括兩個(gè)輸出端空標(biāo)志輸出端和滿標(biāo)志輸出端??諛?biāo)志輸出端將空標(biāo)志信號(hào)發(fā)送至外部對(duì)信元級(jí)FIFO讀出數(shù)據(jù)的讀模塊;滿標(biāo)志輸出端將滿標(biāo)志信號(hào)發(fā)送至外部對(duì)信元級(jí)FIFO進(jìn)行寫操作的寫模塊。空滿標(biāo)志的輸出端通過輸出高電平或低電平代表空滿標(biāo)志的有效或無效。比如當(dāng)輸出為高電平表示有效,低電平表示無效時(shí),如果FIFO為滿,則滿標(biāo)志輸出端置為高電平,否則為低電平;如果FIFO為空,則空標(biāo)志輸出端置為高電平,否則置為低電平??諠M標(biāo)志產(chǎn)生邏輯輸出端置于高電平表示有效還是低電平表示有效,可以由設(shè)計(jì)者自己決定??諠M標(biāo)志產(chǎn)生邏輯通過信元計(jì)數(shù)器輸出的當(dāng)前信元計(jì)數(shù)值,判斷存儲(chǔ)器當(dāng)前的空滿狀態(tài),并生成相應(yīng)的空標(biāo)志或滿標(biāo)志,空或滿標(biāo)志可以對(duì)FIFO的讀或?qū)懡涌诋a(chǎn)生反壓,阻止外部向FIFO的存儲(chǔ)器讀取或?qū)懭霐?shù)據(jù)。一般信元級(jí)FIFO輸出的空標(biāo)志和滿標(biāo)志是信元級(jí)的。
與信元級(jí)FIFO類似的還有數(shù)據(jù)幀級(jí)FIFO,它們的共同特點(diǎn)都是存儲(chǔ)器劃分為若干個(gè)存儲(chǔ)塊,每個(gè)存儲(chǔ)塊只能存放一個(gè)數(shù)據(jù)單元,計(jì)數(shù)器的高位地址指向存儲(chǔ)器內(nèi)部的存儲(chǔ)塊,低位地址指向存儲(chǔ)塊中的一個(gè)具體存儲(chǔ)單元。不同點(diǎn)是數(shù)據(jù)幀級(jí)FIFO讀寫操作的基本單位為數(shù)據(jù)幀,其內(nèi)部存儲(chǔ)器的每個(gè)存儲(chǔ)塊中可存放一個(gè)數(shù)據(jù)幀,高位讀或?qū)懙刂返囊粋€(gè)地址值對(duì)應(yīng)一個(gè)數(shù)據(jù)幀,并采用數(shù)據(jù)幀計(jì)數(shù)器記錄數(shù)據(jù)幀級(jí)FIFO中存儲(chǔ)數(shù)據(jù)幀的個(gè)數(shù)。
由于現(xiàn)有技術(shù)FIFO中的讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和數(shù)據(jù)單元計(jì)數(shù)器都是通過控制信號(hào)總線接收不同的控制信號(hào),獨(dú)立進(jìn)行計(jì)數(shù),各自的控制信號(hào)之間并沒有關(guān)聯(lián)。因此FIFO在實(shí)際使用過程會(huì)在可靠性上存在缺陷,即當(dāng)出現(xiàn)異常情況導(dǎo)致FIFO內(nèi)部的讀地址、寫地址或數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值出錯(cuò)時(shí),F(xiàn)IFO無法做到自動(dòng)糾錯(cuò),自動(dòng)恢復(fù)正常,導(dǎo)致數(shù)據(jù)讀寫順序發(fā)生錯(cuò)誤。
舉個(gè)例子來說假設(shè)某個(gè)信元級(jí)FIFO最大可以存儲(chǔ)的信元數(shù)為4個(gè),在受到異常干擾前高位寫地址、高位讀地址和信元計(jì)數(shù)值都為0,在受到異常干擾后高位讀地址發(fā)生跳變?yōu)?,高位寫地址和信元計(jì)數(shù)值保持不變,假設(shè)干擾消失以后,按照先寫入2個(gè)信元后再讀出2個(gè)信元作為一次訪問周期,對(duì)該信元級(jí)FIFO進(jìn)行5次這樣的讀寫訪問,信元在存儲(chǔ)器中的讀寫情況,參見表1所示
表 1從表1中可以看出,在讀寫訪問過程中,寫入信元的順序?yàn)镃0、C1、C2、C3、C4、C5、C6、C7、C8、C9;而讀出信元的順序則成為C1、X、C3、C0、C5、C2、C7、C4、C9、C6,其中,Cn表示信元n的值,X表示存儲(chǔ)器中未初始化的信元。可以看出,由于一次擾動(dòng)引起的高位讀地址變化,導(dǎo)致輸出信元的順序發(fā)生了錯(cuò)誤。雖然干擾很快消失,且該信元級(jí)FIFO以后的工作都處于正常狀態(tài),但是,其自身的讀寫錯(cuò)誤卻無法得到糾正,并且如果讀寫訪問繼續(xù)進(jìn)行下去的話,從該信元級(jí)FIFO中讀出信元的順序?qū)⑷匀皇清e(cuò)的。同樣,如果發(fā)生異常跳變的是高位寫地址值或信元計(jì)數(shù)值,信元級(jí)FIFO也不能自動(dòng)對(duì)其進(jìn)行糾正,并且也會(huì)導(dǎo)致對(duì)該信元級(jí)FIFO的讀寫錯(cuò)誤,對(duì)于信元計(jì)數(shù)器計(jì)數(shù)值的錯(cuò)誤還可能會(huì)引起空滿標(biāo)志產(chǎn)生邏輯產(chǎn)生空滿標(biāo)志時(shí)發(fā)生錯(cuò)誤。
從上面的例子可以看出,現(xiàn)有技術(shù)FIFO中的計(jì)數(shù)器一旦出錯(cuò)則無法自動(dòng)進(jìn)行糾正或恢復(fù),導(dǎo)致FIFO的數(shù)據(jù)輸入輸出順序發(fā)生錯(cuò)誤,并且數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)錯(cuò)誤還會(huì)引發(fā)空滿標(biāo)志產(chǎn)生邏輯產(chǎn)生錯(cuò)誤的空或滿標(biāo)志,使FIFO的讀寫錯(cuò)誤更加惡化,如果要想恢復(fù)則必須對(duì)FIFO中所有的計(jì)數(shù)器進(jìn)行復(fù)位,使所有計(jì)數(shù)器計(jì)數(shù)值復(fù)位成初始狀態(tài),這將給使用帶來了很大麻煩。特別是由于在FIFO的各計(jì)數(shù)器或空滿標(biāo)志產(chǎn)生邏輯發(fā)生出錯(cuò)的情況時(shí),很難被及時(shí)發(fā)現(xiàn),從而造成長(zhǎng)時(shí)間數(shù)據(jù)讀寫錯(cuò)誤的嚴(yán)重后果,使FIFO的可靠性難以得到保證。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種高可靠性的先入先出存儲(chǔ)器,能夠在工作中不需要重新復(fù)位,就可以自動(dòng)糾正計(jì)數(shù)器及空滿標(biāo)志產(chǎn)生邏輯的錯(cuò)誤,保證FIFO的正常讀寫順序,提高FIFO的可靠性。
本發(fā)明的另一主要目的在于提供一種高可靠性的先入先出存儲(chǔ)器實(shí)現(xiàn)方法,使FIFO具有自動(dòng)糾錯(cuò)功能,即使在計(jì)數(shù)器計(jì)數(shù)值或空滿標(biāo)志產(chǎn)生邏輯出現(xiàn)異常錯(cuò)誤后,也能夠在工作中自動(dòng)恢復(fù)正常,保證對(duì)FIFO的讀寫順序正確,繼續(xù)可靠的工作,從而提高FIFO的可靠性。
根據(jù)第一個(gè)發(fā)明目的本發(fā)明提供的一種高可靠性的先入先出存儲(chǔ)器,包括有存儲(chǔ)器、讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和空滿標(biāo)志產(chǎn)生邏輯;所述讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器還分別將各自的輸出信號(hào)輸入至所述空滿標(biāo)志產(chǎn)生邏輯;所述空滿標(biāo)志產(chǎn)生邏輯接收讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的輸出信號(hào),并根據(jù)該信號(hào)輸出相應(yīng)的空滿標(biāo)志。
該先入先出存儲(chǔ)器所述讀地址計(jì)數(shù)器包括高位讀地址計(jì)數(shù)器和低位讀地址計(jì)數(shù)器,所述寫地址計(jì)數(shù)器包括高位寫地址計(jì)數(shù)器和低位寫地址計(jì)數(shù)器;所述讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器輸入空滿標(biāo)志產(chǎn)生邏輯的輸出信號(hào)分別為高位讀地址值和高位寫地址值。
該先入先出存儲(chǔ)器所述先入先出存儲(chǔ)器為信元級(jí)先入先出存儲(chǔ)器或數(shù)據(jù)幀級(jí)先入先出存儲(chǔ)器。
該先入先出存儲(chǔ)器所述存儲(chǔ)器可存儲(chǔ)的數(shù)據(jù)單元數(shù)目比存儲(chǔ)器實(shí)際容量少至少一個(gè)。
該先入先出存儲(chǔ)器所述先入先出存儲(chǔ)器進(jìn)一步包括有數(shù)據(jù)單元計(jì)數(shù)器,所述數(shù)據(jù)單元計(jì)數(shù)器通過控制信號(hào)總線接收屬于自身的控制信號(hào)。
該先入先出存儲(chǔ)器所述空滿標(biāo)志產(chǎn)生邏輯為特定用途集成電路。
根據(jù)另一發(fā)明目的本發(fā)明提供了一種高可靠性的先入先出存儲(chǔ)器實(shí)現(xiàn)方法,所述先入先出存儲(chǔ)器包括有存儲(chǔ)器、讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和空滿標(biāo)志產(chǎn)生邏輯,該先入先出存儲(chǔ)器的讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別將各自的輸出信號(hào)輸入至空滿標(biāo)志產(chǎn)生邏輯,空滿標(biāo)志產(chǎn)生邏輯通過輸出空或滿標(biāo)志阻止對(duì)存儲(chǔ)器的讀或?qū)懖僮?;并包括以下步驟a)將屬于讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的控制信號(hào)分別輸入至讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別根據(jù)收到的控制信號(hào)更新自身的計(jì)數(shù)值;b)將讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器更新后的當(dāng)前計(jì)數(shù)值分別輸入至空滿標(biāo)志產(chǎn)生邏輯;c)在空滿標(biāo)志產(chǎn)生邏輯中通過比較當(dāng)前讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的計(jì)數(shù)值,判定先入先出存儲(chǔ)器中存儲(chǔ)器當(dāng)前的空滿狀態(tài),更新空滿標(biāo)志產(chǎn)生邏輯所輸出的空滿標(biāo)志。
該方法所述步驟c)具體包括c11)判斷當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值和寫地址計(jì)數(shù)器計(jì)數(shù)值是否相同,如果是,則進(jìn)入步驟c12);否則,判定所述存儲(chǔ)器當(dāng)前狀態(tài)既非空又非滿,更新自身的輸出為空滿標(biāo)志都無效;c12)判斷本次對(duì)所述先入先出存儲(chǔ)器進(jìn)行的是讀操作還是寫操作,如果是讀操作,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為空,更新輸出為空標(biāo)志有效;如果是寫操作,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為滿,更新輸出為滿標(biāo)志有效。
該方法預(yù)先設(shè)置所述先入先出存儲(chǔ)器中存儲(chǔ)器的可存儲(chǔ)數(shù)據(jù)單元數(shù)目比存儲(chǔ)器實(shí)際容量少n個(gè),n為小于存儲(chǔ)器實(shí)際容量,但大于等于1的整數(shù),則所述步驟c)具體包括c21)判斷當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值和寫地址計(jì)數(shù)器計(jì)數(shù)值是否相同,如果是,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為空,輸出空標(biāo)志,否則,進(jìn)入步驟c22);c22)判斷當(dāng)前寫地址計(jì)數(shù)器計(jì)數(shù)值加n后是否大于等于當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值,如果是,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為滿,輸出滿標(biāo)志,否則,判定所述存儲(chǔ)器當(dāng)前既非空又非滿,更新自身的輸出為空滿標(biāo)志都無效。
該方法所述讀地址計(jì)數(shù)器包括高位讀地址計(jì)數(shù)器和低位讀地址計(jì)數(shù)器,所述寫地址計(jì)數(shù)器包括高位寫地址計(jì)數(shù)器和低位寫地址計(jì)數(shù)器;所述寫地址計(jì)數(shù)器計(jì)數(shù)值為高位寫地址值,所述讀地址計(jì)數(shù)器計(jì)數(shù)值為高位讀地址值。
該方法所述先入先出存儲(chǔ)器為信元級(jí)先入先出存儲(chǔ)器或數(shù)據(jù)幀級(jí)先入先出存儲(chǔ)器。
從上述方案可以看出,本發(fā)明公開的高可靠性的先入先出存儲(chǔ)器及其實(shí)現(xiàn)方法,在寫地址計(jì)數(shù)器和讀地址計(jì)數(shù)器的輸出和空滿標(biāo)志產(chǎn)生邏輯的輸入之間建立聯(lián)系,利用FIFO寫地址計(jì)數(shù)器計(jì)數(shù)值、讀地址計(jì)數(shù)器計(jì)數(shù)值與存儲(chǔ)器的空滿狀態(tài)之間的內(nèi)在邏輯聯(lián)系,通過比較寫地址計(jì)數(shù)器和讀地址計(jì)數(shù)器的計(jì)數(shù)值來產(chǎn)生空滿標(biāo)志,使FIFO的計(jì)數(shù)器計(jì)數(shù)值即使出錯(cuò),也能夠迅速自動(dòng)恢復(fù)正常,避免數(shù)據(jù)的寫入和讀出順序發(fā)生錯(cuò)誤,從而有效解決了現(xiàn)有技術(shù)FIFO計(jì)數(shù)器計(jì)數(shù)值和讀寫順序發(fā)生錯(cuò)誤的情況下無法自動(dòng)恢復(fù)的問題,大大提高了FIFO的可靠性和容錯(cuò)能力,并且本發(fā)明方案具有技術(shù)靈活、實(shí)現(xiàn)簡(jiǎn)單、應(yīng)用廣泛等特點(diǎn)。
圖1為現(xiàn)有技術(shù)FIFO的結(jié)構(gòu)示意圖;圖2為本發(fā)明較佳實(shí)施例中FIFO的結(jié)構(gòu)示意圖;圖3為本發(fā)明第一個(gè)較佳實(shí)施例FIFO的工作流程示意圖;圖4為本發(fā)明第二個(gè)較佳實(shí)施例FIFO的工作流程示意圖。
具體實(shí)施例方式
下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說明。
現(xiàn)有技術(shù)方案中導(dǎo)致信元級(jí)或數(shù)據(jù)幀級(jí)FIFO的計(jì)數(shù)器無法進(jìn)行自動(dòng)糾錯(cuò)和自動(dòng)恢復(fù)的根本原因,在于FIFO的高位讀地址、高位寫地址和數(shù)據(jù)單元計(jì)數(shù)值都是根據(jù)FIFO的控制信號(hào)獨(dú)立進(jìn)行計(jì)數(shù)的,而空滿標(biāo)志產(chǎn)生邏輯又是通過判斷數(shù)據(jù)單元計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值來產(chǎn)生空滿標(biāo)志。由于各計(jì)數(shù)器的計(jì)數(shù)值之間沒有聯(lián)系,這樣一旦出現(xiàn)異常情況導(dǎo)致某個(gè)計(jì)數(shù)器的計(jì)數(shù)值出錯(cuò),則容易造成對(duì)FIFO的數(shù)據(jù)讀寫順序出錯(cuò),特別是數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值出錯(cuò)后,引發(fā)空滿標(biāo)志產(chǎn)生邏輯產(chǎn)生錯(cuò)誤的空滿標(biāo)志,使數(shù)據(jù)的讀寫錯(cuò)誤更加惡化,并且FIFO本身無法實(shí)現(xiàn)自動(dòng)恢復(fù)。
現(xiàn)有技術(shù)中,空滿標(biāo)志產(chǎn)生邏輯是根據(jù)數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值來決定其產(chǎn)生的空滿標(biāo)志的。通常,如果數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值為0,則判斷FIFO為空,空滿標(biāo)志產(chǎn)生邏輯產(chǎn)生空標(biāo)志,如果數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值等于其最大計(jì)數(shù)值,則判斷FIFO為滿,產(chǎn)生滿標(biāo)志。
而實(shí)際上由于空滿標(biāo)志產(chǎn)生邏輯與信元級(jí)或數(shù)據(jù)幀級(jí)FIFO的高位讀地址值和高位寫地址值之間是存在一定的邏輯關(guān)系,空滿標(biāo)志產(chǎn)生邏輯可以通過比較計(jì)數(shù)器所記錄的高位讀地址和高位寫地址的值來判斷當(dāng)前FIFO中存儲(chǔ)器的空滿狀態(tài),并產(chǎn)生空滿標(biāo)志。比如當(dāng)信元級(jí)或數(shù)據(jù)幀級(jí)FIFO的高位讀地址值與高位寫地址值相等時(shí),如果對(duì)FIFO所進(jìn)行的本次操作是讀操作,則可以判斷該FIFO當(dāng)前的狀態(tài)為空;如果對(duì)FIFO所進(jìn)行的本次操作是寫操作,則可以判斷該FIFO當(dāng)前的狀態(tài)為滿。這樣由于在FIFO的高位讀地址值、高位寫地址值和空滿標(biāo)志之間引入了邏輯聯(lián)系,可以實(shí)現(xiàn)在FIFO的計(jì)數(shù)器計(jì)數(shù)值出錯(cuò)時(shí),也能夠使FIFO自動(dòng)恢復(fù)其輸入信元順序和輸出信元順序。
下面以信元級(jí)FIFO為例,對(duì)本發(fā)明高可靠性的先入先出存儲(chǔ)器的結(jié)構(gòu)和實(shí)現(xiàn)方法的較佳實(shí)施方案進(jìn)行詳細(xì)說明。
本實(shí)施例的高可靠性信元級(jí)FIFO的結(jié)構(gòu),參見圖2所示,包括存儲(chǔ)器101、讀地址計(jì)數(shù)器102、寫地址計(jì)數(shù)器103和空滿標(biāo)志產(chǎn)生邏輯105。其中,讀地址計(jì)數(shù)器102和寫地址計(jì)數(shù)器103中包含有高位讀地址計(jì)數(shù)器102a、低位讀地址計(jì)數(shù)器102b兩部分,以及高位寫地址計(jì)數(shù)器103a和低位寫地址計(jì)數(shù)器103b兩部分,低位的讀和寫計(jì)數(shù)器根據(jù)各自的低位使能信號(hào)獨(dú)立計(jì)數(shù)??諠M標(biāo)志產(chǎn)生邏輯105可以采用特定用途集成電路(Asic)。
該信元級(jí)FIFO中的讀地址計(jì)數(shù)器102和寫地址計(jì)數(shù)器103的輸入端都與控制信號(hào)總線連接,與現(xiàn)有技術(shù)不同的是它們的高位讀地址計(jì)數(shù)器102a和高位寫地址計(jì)數(shù)器103a輸出信號(hào)還輸入至空滿標(biāo)志產(chǎn)生邏輯105。由于信元級(jí)FIFO的信元計(jì)數(shù)器對(duì)空滿標(biāo)志產(chǎn)生邏輯105判斷FIFO的空滿狀態(tài)不起作用,因此在本實(shí)施例的信元級(jí)FIFO中無需設(shè)置信元級(jí)計(jì)數(shù)器。
該FIFO的讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器根據(jù)各自的控制信號(hào)獨(dú)立計(jì)數(shù),而空滿標(biāo)志產(chǎn)生邏輯根據(jù)該兩個(gè)計(jì)數(shù)器記錄的高位讀地址值和高位寫地址值判斷FIFO當(dāng)前的空滿狀態(tài),如果當(dāng)前高位讀地址值和高位寫地址值相等,且本次對(duì)FIFO的操作是讀操作,則判定FIFO當(dāng)前的狀態(tài)為空,設(shè)置空滿標(biāo)志產(chǎn)生邏輯為空標(biāo)準(zhǔn)有效;如果當(dāng)前高位讀地址值和高位寫地址值相等,且本次對(duì)FIFO的操作是寫操作,則判定FIFO當(dāng)前的狀態(tài)為滿,設(shè)置空滿標(biāo)志產(chǎn)生邏輯為滿標(biāo)志有效。
該信元級(jí)FIFO的工作流程參見圖3所示步驟301,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別從控制信號(hào)總線中接收屬于自身的控制信號(hào),并更新自身的計(jì)數(shù)值。
步驟302,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別將更新后的高位讀地址值和高位寫地址值發(fā)送至空滿標(biāo)志產(chǎn)生邏輯。
步驟303,空滿標(biāo)志產(chǎn)生邏輯判斷接收到的高位讀地址值和高位寫地址值是否相同,如果相同,則進(jìn)入步驟304;否則,判定所述存儲(chǔ)器當(dāng)前狀態(tài)既非空又非滿,空滿標(biāo)志都置為無效。
步驟304,空滿標(biāo)志產(chǎn)生邏輯判斷本次對(duì)信元級(jí)FIFO的操作是讀操作還是寫操作,如果是讀操作,則判定當(dāng)前該信元級(jí)FIFO的狀態(tài)為空,將空標(biāo)志置為有效;如果是寫操作,則判定當(dāng)前該信元級(jí)FIFO的狀態(tài)為滿,將滿標(biāo)志置為有效。
其中,由于邏輯上空標(biāo)志和滿標(biāo)志只能單獨(dú)存在,因此,空滿標(biāo)志產(chǎn)生邏輯在將一個(gè)標(biāo)志輸出端置為有效的同時(shí)會(huì)將另一端置為無效。
通過上述方案即使信元級(jí)FIFO由于讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器或空滿標(biāo)志產(chǎn)生邏輯的原因發(fā)生信元讀寫錯(cuò)誤,也能夠?qū)崿F(xiàn)自動(dòng)糾錯(cuò)和自動(dòng)恢復(fù)。
仍以表1的例子來說明,假設(shè)信元級(jí)FIFO的存儲(chǔ)器最大可存儲(chǔ)4個(gè)信元。
在該信元級(jí)FIFO工作時(shí),假設(shè)受異常干擾前高位寫地址和高位讀地址都為0,信元級(jí)FIFO的空滿標(biāo)志產(chǎn)生邏輯為空標(biāo)志有效。在受到異常干擾后高位讀地址跳變?yōu)?,空滿標(biāo)志產(chǎn)生邏輯通過判斷信元級(jí)FIFO的高位寫地址與高位讀地址不同,從而將空標(biāo)志置無效。如果下一次是寫操作,則在寫入一個(gè)信元后,高位寫地址也變?yōu)?,空滿標(biāo)志產(chǎn)生邏輯判斷高位寫地址與高位讀地址相同,又判斷本次操作為寫操作,從而認(rèn)為信元級(jí)FIFO存儲(chǔ)器的狀態(tài)為滿,將滿標(biāo)志置有效,從而對(duì)信元級(jí)FIFO的寫接口產(chǎn)生反壓,阻止外部數(shù)據(jù)寫入信元級(jí)FIFO,這樣下一次只能對(duì)信元級(jí)FIFO執(zhí)行讀操作,使寫操作無法繼續(xù),從而調(diào)整對(duì)該信元級(jí)FIFO的讀寫順序,使其重新恢復(fù)正常。
如上面所述,按照寫入2個(gè)信元后再讀出2個(gè)信元的周期順序,則對(duì)該信元級(jí)FIFO進(jìn)行5次這樣的讀寫訪問后的結(jié)果,參見表2所示
表 2表2中,Cn表示信元n的值,X表示存儲(chǔ)器中未初始化的信元。從表2中可以看出,由于在寫入00位置的信元C0后,空滿標(biāo)志產(chǎn)生邏輯產(chǎn)生滿標(biāo)志,使寫入操作停止了一次,從而使得寫入信元的順序?yàn)镃0、C1、C2、C3、C4、C5、C6、C7、C8……;讀出信元的順序仍為C0、C1、C2、C3、C4、C5、C6、C7、C8……??梢?,信元級(jí)FIFO中存儲(chǔ)器的讀出信元的順序和寫入信元的順序相比沒有發(fā)生改變。
由于本實(shí)施例中在信元級(jí)FIFO出現(xiàn)高位讀地址值和高位寫地址值相等的情況時(shí),還需要空滿標(biāo)志產(chǎn)生邏輯通過判斷本次操作是讀操作還是寫操作來確定當(dāng)前存儲(chǔ)器的空滿狀態(tài),因此較為較復(fù)雜,為了簡(jiǎn)化空滿標(biāo)志產(chǎn)生邏輯的這一判斷步驟,還可以采取下面所述更簡(jiǎn)單的方案實(shí)現(xiàn)。
在本實(shí)施方案中預(yù)先設(shè)置信元級(jí)FIFO中存儲(chǔ)塊的可用數(shù)目比實(shí)際少一塊或多塊,比如假設(shè)所少的塊數(shù)為n,信元級(jí)FIFO中存儲(chǔ)塊實(shí)際個(gè)數(shù)為m,1≤n<m,其中n和m都為整數(shù),則存儲(chǔ)器的可用存儲(chǔ)塊數(shù)為m-n。該信元級(jí)FIFO的空標(biāo)志和滿標(biāo)志按照如下的邏輯關(guān)系產(chǎn)生如果高位寫地址等于高位讀地址,則空標(biāo)志有效,否則空標(biāo)志無效;如果高位寫地址加n后等于高位讀地址,則滿標(biāo)志有效,否則滿標(biāo)志無效。另外,如果出現(xiàn)了高位寫地址加n后大于高位讀地址的情況,本實(shí)施例也同樣置滿標(biāo)志為有效,直至高位寫地址加n后小于高位讀地址以后,無需進(jìn)行特殊操作,F(xiàn)IFO會(huì)自動(dòng)恢復(fù)正常的。本發(fā)明較佳的實(shí)施方案通常是取n=1。
該信元級(jí)FIFO的工作流程參見圖4所示步驟401,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別從控制信號(hào)總線中接收屬于自身的控制信號(hào),并更新自身的計(jì)數(shù)值。
步驟402,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別將更新后的高位讀地址值和高位寫地址值發(fā)送至空滿標(biāo)志產(chǎn)生邏輯。
步驟403,空滿標(biāo)志產(chǎn)生邏輯判斷接收到的高位讀地址值和高位寫地址值是否相同,如果相同,則判定當(dāng)前該信元級(jí)FIFO的狀態(tài)為空,置空標(biāo)志有效;否則,進(jìn)入步驟404。
步驟404,空滿標(biāo)志產(chǎn)生邏輯判斷當(dāng)前高位寫地址值加n后是否大于等于當(dāng)前的高位讀地址值,如果是,則判定當(dāng)前該信元級(jí)FIFO的狀態(tài)為滿,置滿標(biāo)志有效,否則,判定所述存儲(chǔ)器當(dāng)前狀態(tài)既非空又非滿,將空滿標(biāo)志都置為無效。
如此,同樣可以達(dá)到信元級(jí)FIFO自動(dòng)糾錯(cuò)并恢復(fù)信元計(jì)數(shù)值和信元讀寫順序的效果。
舉個(gè)例子來說,假設(shè)一個(gè)信元級(jí)FIFO存儲(chǔ)器m=8,n=3,當(dāng)前高位讀地址為5,則當(dāng)高位寫地址為5時(shí),空滿標(biāo)志產(chǎn)生邏輯判斷高位讀地址與高位寫地址相同,認(rèn)為信元級(jí)FIFO的存儲(chǔ)器為空,置空標(biāo)志有效,阻止外部從信元級(jí)FIFO讀數(shù)據(jù);當(dāng)高位寫地址為2時(shí),空滿標(biāo)志產(chǎn)生邏輯判斷當(dāng)前高位寫地址值2加n的值3后得5,認(rèn)為信元級(jí)FIFO為滿,置滿標(biāo)志有效,阻止外部數(shù)據(jù)的寫入,使寫操作無法繼續(xù),從而調(diào)整對(duì)該信元級(jí)FIFO的讀寫順序,使其重新恢復(fù)正常。不難看出,該方案仍可以實(shí)現(xiàn)本發(fā)明的技術(shù)效果。
如果出現(xiàn)的異常情況使高讀地址值與高寫地址值相差小于n,例如高位寫地址跳變?yōu)?,則當(dāng)前得高位寫地址值3加n的值3后得6,大于當(dāng)前的高位寫地址值5,雖然這時(shí)高位寫地址值與高位讀地址值之間的關(guān)系不符合邏輯,但空滿標(biāo)志產(chǎn)生邏輯仍會(huì)按存儲(chǔ)器滿時(shí)處理,置滿標(biāo)志為有效,并阻止外部的數(shù)據(jù)寫入存儲(chǔ)器,直到執(zhí)行兩次以上讀操作,使存儲(chǔ)器狀態(tài)判定為非滿后,才允許寫入操作。不難看出通過這樣的調(diào)整,外部對(duì)FIFO的讀寫順序很快會(huì)恢復(fù)正常。
另外,如果需要,本發(fā)明的FIFO中也可以設(shè)置數(shù)據(jù)單元計(jì)數(shù)器,與現(xiàn)有技術(shù)的區(qū)別是空滿標(biāo)志產(chǎn)生邏輯只是根據(jù)讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的計(jì)數(shù)值工作,數(shù)據(jù)單元計(jì)數(shù)器的計(jì)數(shù)值不對(duì)空滿標(biāo)志的生成產(chǎn)生影響。
本發(fā)明上面所述所有方案也可以同樣適用于數(shù)據(jù)幀級(jí)FIFO等讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器的計(jì)數(shù)值和空滿標(biāo)志的產(chǎn)生之間有邏輯關(guān)系的先入先出存儲(chǔ)器。另外,對(duì)于以字節(jié)為基本單位進(jìn)行讀寫操作的FIFO,其數(shù)據(jù)單元計(jì)數(shù)器的每個(gè)計(jì)數(shù)值代表一個(gè)字節(jié),在該類FIFO的讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器不作高位地址和低位地址的區(qū)分,每個(gè)地址位只代表一個(gè)字節(jié),讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的輸出也只有讀地址值和寫地址值兩種。本發(fā)明方案可同樣適用于這類FIFO,只是相應(yīng)的將高位讀地址值和高位寫地址值之間的比較關(guān)系改為讀地址值和寫地址值之間的比較。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種高可靠性的先入先出存儲(chǔ)器,包括有存儲(chǔ)器、讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和空滿標(biāo)志產(chǎn)生邏輯;其特征在于所述讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器還分別將各自的輸出信號(hào)輸入至所述空滿標(biāo)志產(chǎn)生邏輯;所述空滿標(biāo)志產(chǎn)生邏輯接收讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的輸出信號(hào),并根據(jù)該信號(hào)輸出相應(yīng)的空滿標(biāo)志。
2.根據(jù)權(quán)利要求1所述先入先出存儲(chǔ)器,其特征在于,所述讀地址計(jì)數(shù)器包括高位讀地址計(jì)數(shù)器和低位讀地址計(jì)數(shù)器,所述寫地址計(jì)數(shù)器包括高位寫地址計(jì)數(shù)器和低位寫地址計(jì)數(shù)器;所述讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器輸入空滿標(biāo)志產(chǎn)生邏輯的輸出信號(hào)分別為高位讀地址值和高位寫地址值。
3.根據(jù)權(quán)利要求2所述先入先出存儲(chǔ)器,其特征在于,所述先入先出存儲(chǔ)器為信元級(jí)先入先出存儲(chǔ)器或數(shù)據(jù)幀級(jí)先入先出存儲(chǔ)器。
4.根據(jù)權(quán)利要求1所述先入先出存儲(chǔ)器,其特征在于,所述存儲(chǔ)器可存儲(chǔ)的數(shù)據(jù)單元數(shù)目比存儲(chǔ)器實(shí)際容量少至少一個(gè)。
5.根據(jù)權(quán)利要求1所述先入先出存儲(chǔ)器,其特征在于,所述先入先出存儲(chǔ)器進(jìn)一步包括有數(shù)據(jù)單元計(jì)數(shù)器,所述數(shù)據(jù)單元計(jì)數(shù)器通過控制信號(hào)總線接收屬于自身的控制信號(hào)。
6.根據(jù)權(quán)利要求1所述先入先出存儲(chǔ)器,其特征在于,所述空滿標(biāo)志產(chǎn)生邏輯為特定用途集成電路。
7.一種高可靠性的先入先出存儲(chǔ)器實(shí)現(xiàn)方法,其特征在于,所述先入先出存儲(chǔ)器包括有存儲(chǔ)器、讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和空滿標(biāo)志產(chǎn)生邏輯,該先入先出存儲(chǔ)器的讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別將各自的輸出信號(hào)輸入至空滿標(biāo)志產(chǎn)生邏輯,空滿標(biāo)志產(chǎn)生邏輯通過輸出空或滿標(biāo)志阻止對(duì)存儲(chǔ)器的讀或?qū)懖僮?;并包括以下步驟a)將屬于讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的控制信號(hào)分別輸入至讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器,讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別根據(jù)收到的控制信號(hào)更新自身的計(jì)數(shù)值;b)將讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器更新后的當(dāng)前計(jì)數(shù)值分別輸入至空滿標(biāo)志產(chǎn)生邏輯;c)在空滿標(biāo)志產(chǎn)生邏輯中通過比較當(dāng)前讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器的計(jì)數(shù)值,判定先入先出存儲(chǔ)器中存儲(chǔ)器當(dāng)前的空滿狀態(tài),更新空滿標(biāo)志產(chǎn)生邏輯所輸出的空滿標(biāo)志。
8.根據(jù)權(quán)利要求7所述方法,其特征在于,所述步驟c)具體包括c11)判斷當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值和寫地址計(jì)數(shù)器計(jì)數(shù)值是否相同,如果是,則進(jìn)入步驟c12);否則,判定所述存儲(chǔ)器當(dāng)前狀態(tài)既非空又非滿,更新自身的輸出為空滿標(biāo)志都無效;c12)判斷本次對(duì)所述先入先出存儲(chǔ)器進(jìn)行的是讀操作還是寫操作,如果是讀操作,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為空,更新輸出為空標(biāo)志有效;如果是寫操作,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為滿,更新輸出為滿標(biāo)志有效。
9.根據(jù)權(quán)利要求7所述方法,其特征在于,預(yù)先設(shè)置所述先入先出存儲(chǔ)器中存儲(chǔ)器的可存儲(chǔ)數(shù)據(jù)單元數(shù)目比存儲(chǔ)器實(shí)際容量少n個(gè),n為小于存儲(chǔ)器實(shí)際容量,但大于等于1的整數(shù),則所述步驟c)具體包括c21)判斷當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值和寫地址計(jì)數(shù)器計(jì)數(shù)值是否相同,如果是,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為空,輸出空標(biāo)志,否則,進(jìn)入步驟c22);c22)判斷當(dāng)前寫地址計(jì)數(shù)器計(jì)數(shù)值加n后是否大于等于當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值,如果是,則判定當(dāng)前所述存儲(chǔ)器的狀態(tài)為滿,輸出滿標(biāo)志,否則,判定所述存儲(chǔ)器當(dāng)前既非空又非滿,更新自身的輸出為空滿標(biāo)志都無效。
10.根據(jù)權(quán)利要求7、8或9所述方法,其特征在于,所述讀地址計(jì)數(shù)器包括高位讀地址計(jì)數(shù)器和低位讀地址計(jì)數(shù)器,所述寫地址計(jì)數(shù)器包括高位寫地址計(jì)數(shù)器和低位寫地址計(jì)數(shù)器;所述寫地址計(jì)數(shù)器計(jì)數(shù)值為高位寫地址值,所述讀地址計(jì)數(shù)器計(jì)數(shù)值為高位讀地址值。
11.根據(jù)權(quán)利要求10所述方法,其特征在于,所述先入先出存儲(chǔ)器為信元級(jí)先入先出存儲(chǔ)器或數(shù)據(jù)幀級(jí)先入先出存儲(chǔ)器。
全文摘要
本發(fā)明公開了一種高可靠性的先入先出存儲(chǔ)器,包括有存儲(chǔ)器、讀地址計(jì)數(shù)器、寫地址計(jì)數(shù)器和空滿標(biāo)志產(chǎn)生邏輯;所述讀地址計(jì)數(shù)器和寫地址計(jì)數(shù)器分別通過控制信號(hào)總線接收屬于自身的控制信號(hào),并分別將輸出信號(hào)輸入至所述存儲(chǔ)器;同時(shí)該兩個(gè)計(jì)數(shù)器還分別將各自的輸出信號(hào)輸入至所述空滿標(biāo)志產(chǎn)生邏輯。同時(shí)公開了一種高可靠性的先入先出存儲(chǔ)器的實(shí)現(xiàn)方法,在空滿標(biāo)志產(chǎn)生邏輯中通過比較當(dāng)前讀地址計(jì)數(shù)器計(jì)數(shù)值和寫地址計(jì)數(shù)器計(jì)數(shù)值,判定先入先出存儲(chǔ)器中所述存儲(chǔ)器當(dāng)前的空滿狀態(tài),并更新自身輸出的空滿標(biāo)志。本發(fā)明使先入先出存儲(chǔ)器在出現(xiàn)異常錯(cuò)誤后,能夠在工作中自動(dòng)恢復(fù)正常,保證對(duì)FIFO讀寫順序的正確性,使其繼續(xù)可靠的工作。
文檔編號(hào)H04L12/54GK1668021SQ200410008819
公開日2005年9月14日 申請(qǐng)日期2004年3月12日 優(yōu)先權(quán)日2004年3月12日
發(fā)明者涂君, 柳精偉, 潘劍鋒, 雷春 申請(qǐng)人:華為技術(shù)有限公司