專利名稱:先入先出數(shù)據(jù)緩存的方法及全滿空間訪問先入先出存儲器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及先入先出存儲方法及裝置,尤其涉及全滿空間先入先出存儲器。
背景技術(shù):
在數(shù)字電路中,存儲器有著非常廣泛的用途,其中最主要的是用來保存數(shù)據(jù),根據(jù)存取數(shù)據(jù)操作順序的不同,存儲器可以分為隨機(jī)讀寫存儲器(RAM)、先入先出存儲器(FIFO)、堆棧式存儲器(FILO)。隨機(jī)讀寫存儲器可以在一個(gè)操作周期內(nèi)讀寫尋址范圍內(nèi)的任何一個(gè)存儲空間,這種存儲器用于讀寫非常頻繁,并且對操作順序不做要求的場合。堆棧存儲器又可以稱為先入后出存儲器,其操作順序是最初寫入的數(shù)據(jù)只能最后讀出來,比如將0x11,0x22,0x33三個(gè)數(shù)寫入堆棧存儲器,首先寫入的是0x11,然后是0x22,最后是0x33,而讀出的時(shí)候首先讀出0x33,然后才能讀出0x22,最后才能讀到0x11,堆棧式存儲器可以用于在PC的中斷向量的保存。
先入先出存儲器(first in first out),簡稱為FIFO,通常有兩個(gè)處理器來控制一個(gè)FIFO,即在一個(gè)讀寫周期內(nèi),處理器A對FIFO進(jìn)行寫,同時(shí)處理器B可以讀出數(shù)據(jù)。而數(shù)據(jù)的讀寫順序是一樣的,也就是說,處理器A依次寫入0x1,0x2,0x3三個(gè)數(shù),處理器B讀到的數(shù)據(jù)的順序也必須是0x1,0x2,0x3。FIFO主要用于處理器之間交換數(shù)據(jù)。FIFO可以是雙向FIFO,即處理器A,B既可以讀又可以寫FIFO,F(xiàn)IFO也可以是單向FIFO,即處理器A,B只能執(zhí)行讀或者寫操作。對于特定的一種應(yīng)用場合,F(xiàn)IFO往往是單向操作的。這里處理器是能夠產(chǎn)生讀寫時(shí)序的電路,可以是一個(gè)CPU,也可以是一個(gè)時(shí)序電路。
圖1是一個(gè)單向FIFO的引腳說明,其中n表示數(shù)據(jù)線的寬度,Dinw和Dinr分別為寫、讀輸入數(shù)據(jù)線,Doutw和Doutr分別為寫、讀輸出數(shù)據(jù)線,CLKW和CLKR分別是寫、讀時(shí)鐘,write是寫操作有效信號、read是讀操作有效信號,wen和ren分別為讀、寫使能信號。圖2是由圖1所示的單向FIFO實(shí)現(xiàn)雙向FIFO的原理圖。雙向FIFO通常是通過在一個(gè)單向FIFO的外面增加一些控制邏輯,比如二選開關(guān)來實(shí)現(xiàn)的。二選開關(guān)的原理框圖如圖3所示,其包括兩個(gè)輸入端0端和1端,以及一個(gè)輸出端。
如圖2所示,雙向FIFO具有兩個(gè)端口Porta,Portb,其中porta比portb多一個(gè)方向控制端信號direction,在實(shí)際應(yīng)用的時(shí)候,porta和portb的信號分別連接兩個(gè)控制設(shè)備MCUA和MCUB,direction信號控制數(shù)據(jù)傳輸?shù)姆较?,圖2中的雙向FIFO的作用就是實(shí)現(xiàn)數(shù)據(jù)從MCUA傳輸?shù)組CUB或者從MCUB傳輸?shù)組CUA。Direction信號來源于porta,說明雙向FIFO的方向控制權(quán)屬于MCUA,當(dāng)然,方向控制端也可以根據(jù)情況設(shè)置于portb,或者單獨(dú)設(shè)置一個(gè)方向控制裝置。
當(dāng)方向控制端信號direction為高時(shí),二選開關(guān)的1端連接到其輸出端,單向FIFO的寫入端與porta連接,單向FIFO的讀出端與portb連接。此時(shí)porta寫portb讀,數(shù)據(jù)從MCUA傳輸?shù)組CUB。當(dāng)方向控制端信號direction為低時(shí),二選開關(guān)的0端連接到其輸出端,單向FIFO的寫入端與portb連接,單向FIFO的讀出端與porta連接。此時(shí)portb寫porta讀,數(shù)據(jù)從MCUB傳輸?shù)組CUA。
FIFO的另外一個(gè)重要參數(shù)是內(nèi)部ram地址寬度m,這個(gè)參數(shù)決定了FIFO的存儲容量為2m·nbits。
目前通用的FIFO是采用m位的計(jì)數(shù)器,計(jì)數(shù)器的輸出產(chǎn)生雙口SRAM的m位地址總線(包括讀地址總線和寫地址總線),初始狀態(tài)下,寫地址計(jì)數(shù)器和讀地址計(jì)數(shù)器都是0,此后每寫一次,寫地址計(jì)數(shù)器加1,每讀一次讀地址計(jì)數(shù)器加1。在某一時(shí)刻假設(shè)讀地址為A1,寫地址為A2=A1-1,即寫地址計(jì)數(shù)器比讀地址計(jì)數(shù)器少一,如果再寫一次,則A2=A1,那么系統(tǒng)無法判斷出是寫地址更新了一輪之后與讀地址相等還是寫地址根本沒有移動,二者一直相等。因此,在軟件操作的過程中,當(dāng)A2=A1-1的時(shí)候,不允許再進(jìn)行寫操作,這樣就有一個(gè)地址沒有被寫入有效數(shù)據(jù),從而無法實(shí)現(xiàn)全滿空間的寫入。讀的情況是一樣的,假設(shè)讀地址A1=A2-1,同樣有一個(gè)有效數(shù)據(jù)無法讀出。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種先入先出數(shù)據(jù)緩存方法以及一種全滿空間先入先出存儲器,當(dāng)寫允許信號無效時(shí)FIFO的全部存儲空間都存儲了有效信號,當(dāng)讀允許信號無效時(shí),F(xiàn)IFO的全部存儲空間中的有效數(shù)據(jù)能全部被讀出,以充分利用雙口存儲器的存儲空間。
根據(jù)本發(fā)明的一個(gè)方面,提供一種先入先出數(shù)據(jù)緩存的方法,其包括對于地址寬度為m的雙口存儲器,采用兩個(gè)m+1位計(jì)數(shù)器分別作為讀、寫計(jì)數(shù)器;將該兩個(gè)m+1位計(jì)數(shù)器的低m位輸出分別連接于雙口存儲器的讀、寫兩側(cè)的地址總線,同時(shí)將該兩個(gè)m+1位計(jì)數(shù)器的m+1位輸出均分別與讀、寫使能產(chǎn)生電路連接;所述寫使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生寫使能信號wen當(dāng)wa[m-1:0]=ra[m-1:0]同時(shí)wa[m]≠ra[m]的時(shí)候wen為低,表示FIFO已被寫滿,否則wen為高,表示FIFO中有空間可供寫入;所述讀使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生讀使能信號ren當(dāng)wa[m:0]=ra[m:0]的時(shí)候ren為低,表示FIFO已被讀空,否則ren為高,表示FIFO中存在數(shù)據(jù)等待讀出;其中,wa、ra分別表示寫計(jì)數(shù)器、讀計(jì)數(shù)器輸出的地址信號。
根據(jù)本發(fā)明的另一方面,提供一種全滿空間訪問先入先出存儲器,其包括地址寬度為m的雙口存儲器、第一計(jì)數(shù)器、第二計(jì)數(shù)器、讀使能產(chǎn)生電路、寫使能產(chǎn)生電路,其特征在于,所述第一、第二計(jì)數(shù)器均為m+1位計(jì)數(shù)器,,其中第一、第二計(jì)數(shù)器的低m位輸出分別連接到雙口存儲器A側(cè)的地址總線AA[m-1:0]、B側(cè)的地址總線BA[m-1:0];同時(shí),第一、第二計(jì)數(shù)器輸出的m+1位輸出均分別輸入到讀使能產(chǎn)生電路、寫使能產(chǎn)生電路;其中,所述寫使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生寫使能信號wen當(dāng)wa[m-1:0]=ra[m-1:0]同時(shí)wa[m]≠ra[m]的時(shí)候wen為低,表示FIFO已被寫滿,否則wen為高,表示FIFO中有空間可供寫入;所述讀使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生讀使能信號ren當(dāng)wa[m:0]=ra[m:0]的時(shí)候ren為低,表示FIFO已被讀空,否則ren為高,表示FIFO中存在數(shù)據(jù)等待讀出;其中,wa、ra分別表示第一計(jì)數(shù)器、第二計(jì)數(shù)器的輸出的地址信號。
本發(fā)明由于采用了m+1位的計(jì)數(shù)器進(jìn)行計(jì)數(shù)并將兩個(gè)計(jì)數(shù)器的輸出進(jìn)行比較產(chǎn)生讀寫允許信號,充分利用了FIFO的讀寫空間,使得FIFO的寫允許信號為低的時(shí)候,F(xiàn)IFO的所有存儲空間里面都存儲了有效的數(shù)據(jù)。同樣,當(dāng)FIFO的讀允許信號為低的時(shí)候,保證了存儲空間內(nèi)所有的有效數(shù)據(jù)都被讀出了,從而克服了采用m位計(jì)數(shù)器的現(xiàn)有技術(shù)無法實(shí)現(xiàn)寫允許信號為低時(shí)全部空間都存儲了有效數(shù)據(jù)、在讀允許信號為低時(shí)存儲于存儲空間中的所有有效數(shù)據(jù)全部讀出的缺點(diǎn)。
圖1是通常的單向FIFO的端口信號說明;圖2是由圖1所示的單向FIFO制作成的雙向FIFO的原理框圖;圖3是圖2中所用的二選開關(guān)的原理圖;圖4是本發(fā)明的原理框圖;圖5是本發(fā)明的一個(gè)實(shí)施例的示意圖;圖6是本發(fā)明中的讀使能產(chǎn)生電路示意圖;圖7是本發(fā)明中的寫使能產(chǎn)生電路示意圖;圖8是本發(fā)明中的8位計(jì)數(shù)器的電路示意圖。
具體實(shí)施例方式
下面參照附圖對本發(fā)明進(jìn)行詳細(xì)說明,值得強(qiáng)調(diào)的是,下面所述的實(shí)施例只是為了使本發(fā)明的描述更清楚、易于理解,并不是對本發(fā)明的限制。
圖4給出了根據(jù)本發(fā)明的存儲容量為2m·n比特的全滿空間先入先出存儲器(FIFO)的原理框圖。下面以128*32全滿空間讀寫FIFO的設(shè)計(jì)為例對本發(fā)明進(jìn)行說明。如圖5所示,128*32全滿空間訪問先入先出存儲器包括雙口RAM、8位計(jì)數(shù)器A和計(jì)數(shù)器B、以及讀使能產(chǎn)生電路、寫使能產(chǎn)生電路。在本實(shí)施例中,所述雙口RAM 1的數(shù)據(jù)總線寬度為32位;地址總線寬度為7位,即存在128個(gè)地址。其中雙口RAM可以用Xilinx公司的軟件ISWE6.2產(chǎn)生,并用XC2V8000來實(shí)現(xiàn)。
計(jì)數(shù)器A、B用邏輯電路設(shè)計(jì),如,可以用兩片741s161來實(shí)現(xiàn),其中計(jì)數(shù)器A作為寫地址計(jì)數(shù)器,其輸入為寫操作有效信號write和CLKW,其輸出的低7位wa[6:0]連接到雙口RAM的A端的地址總線AA[6:0],同時(shí)計(jì)數(shù)器A輸出的8位wa[7:0]分別連接到讀使能產(chǎn)生電路、寫使能產(chǎn)生電路。上電之后計(jì)數(shù)器A的輸出為全0,而后每進(jìn)行一次寫操作,計(jì)數(shù)器A加1。計(jì)數(shù)器B作為讀地址計(jì)數(shù)器,其輸入為讀操作有效信號read和CLKR,其輸出的低7位ra[6:0]連接到雙口RAM的B端的地址總線BA[6:0],同時(shí)計(jì)數(shù)器B輸出的ra[7:0]分別連接到讀使能產(chǎn)生電路、寫使能產(chǎn)生電路,上電之后計(jì)數(shù)器的輸出為全0,而后每進(jìn)行一次讀操作,計(jì)數(shù)器B加1。如圖8所示,其給出了一種8位計(jì)數(shù)器的邏輯電路示意圖。
讀使能產(chǎn)生電路、寫使能產(chǎn)生電路根據(jù)接收的來自計(jì)數(shù)器A、B的地址信號,根據(jù)下列邏輯關(guān)系分別產(chǎn)生wen、ren信號。
wen信號產(chǎn)生邏輯關(guān)系為當(dāng)wa[7]≠ra[7]同時(shí)wa[6:0]=ra[6:0]時(shí)wen為低,表示FIFO已被寫滿,不能再寫入數(shù)據(jù),否則為高,表示FIFO中有空間可供寫入;ren信號產(chǎn)生邏輯關(guān)系為當(dāng)wa[7:0]=ra[7:0]時(shí)ren為低,表示FIFO已被讀空,不允許讀數(shù),否則為高,表示FIFO中存在數(shù)據(jù)等待讀出。
根據(jù)上述邏輯形成的讀使能產(chǎn)生電路、寫使能產(chǎn)生電路可以用普通的邏輯門形成的電路來實(shí)現(xiàn)。如圖6、圖7所示,圖6給出了一種讀使能產(chǎn)生電路示意圖,圖7給出了一種寫使能產(chǎn)生電路示意圖。
本發(fā)明的上述FIFO可以用兩個(gè)單片機(jī)來控制,一個(gè)單片機(jī)A用于寫,另一個(gè)單片機(jī)B用于讀。wen,ren信號連接到單片機(jī)A的p1[2:1],wen、ren信號連接到單片機(jī)B的p1[2:1]。單片機(jī)A通過讀p1口獲得wen信號的電平,如果wen=1,則單片機(jī)A向FIFO寫入,其產(chǎn)生寫操作有效信號write;單片機(jī)B通過讀p1口獲得ren信號的電平,如果ren=1,則單片機(jī)B從FIFO讀數(shù),其產(chǎn)生寫操作有效信號read,這樣就可以實(shí)現(xiàn)從單片機(jī)A向單片機(jī)B的數(shù)據(jù)傳輸。
另外,利用與圖2中所示相同的方式,通過增加若干二選開關(guān)以及一個(gè)方向控制端可以將圖5所示的本發(fā)明的單向FIFO制作成雙向FIFO。
在本發(fā)明中,雙口存儲器可以為實(shí)現(xiàn)本發(fā)明功能的具有雙端口的存儲器,如RAM、SRAM等。
本發(fā)明的上述實(shí)施例中的計(jì)數(shù)器、寫、讀使能產(chǎn)生電路都可以用Verilog-hdl編寫的FPGA或ASIC、或邏輯電路來實(shí)現(xiàn)。
權(quán)利要求
1.一種先入先出數(shù)據(jù)緩存的方法,其特征在于,包括對于地址寬度為m的雙口存儲器,采用兩個(gè)m+1位計(jì)數(shù)器分別作為讀、寫計(jì)數(shù)器;將該兩個(gè)m+1位計(jì)數(shù)器的低m位輸出分別連接于雙口存儲器的讀、寫兩側(cè)的地址總線,同時(shí)將該兩個(gè)m+1位計(jì)數(shù)器的m+1位輸出均分別與讀、寫使能產(chǎn)生電路連接;所述寫使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生寫使能信號wen當(dāng)wa[m-1:0]=ra[m-1:0]同時(shí)wa[m]≠ra[m]的時(shí)候wen為低,表示FIFO已被寫滿,否則wen為高,表示FIFO中有空間可供寫入;所述讀使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生讀使能信號ren當(dāng)wa[m:0]=ra[m:0]的時(shí)候ren為低,表示FIFO已被讀空,否則ren為高,表示FIFO中存在數(shù)據(jù)等待讀出;其中,wa、ra分別表示寫計(jì)數(shù)器、讀計(jì)數(shù)器輸出的地址信號。
2.一種全滿空間訪問先入先出存儲器,包括地址寬度為m的雙口存儲器、第一計(jì)數(shù)器、第二計(jì)數(shù)器、讀使能產(chǎn)生電路、寫使能產(chǎn)生電路,其特征在于,所述第一、第二計(jì)數(shù)器均為m+1位計(jì)數(shù)器,其中第一、第二計(jì)數(shù)器的低m位輸出分別連接到雙口存儲器A側(cè)的地址總線AA[m-1:0]、B側(cè)的地址總線BA[m-1:0];同時(shí),第一、第二計(jì)數(shù)器輸出的m+1位輸出均分別輸入到讀使能產(chǎn)生電路、寫使能產(chǎn)生電路;其中,所述寫使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生寫使能信號wen當(dāng)wa[m-1:0]=ra[m-1:0]同時(shí)wa[m]≠ra[m]的時(shí)候wen為低,表示FIFO已被寫滿,否則wen為高,表示FIFO中有空間可供寫入;所述讀使能產(chǎn)生電路根據(jù)如下邏輯產(chǎn)生讀使能信號ren當(dāng)wa[m:0]=ra[m:0]的時(shí)候ren為低,表示FIFO已被讀空,否則ren為高,表示FIFO中存在數(shù)據(jù)等待讀出;其中,wa、ra分別表示第一計(jì)數(shù)器、第二計(jì)數(shù)器的輸出的地址信號。
3.根據(jù)權(quán)利要求2所述的全滿空間訪問先入先出存儲器,其特征在于,所述雙口存儲器是具有雙端口的SRAM。
4.根據(jù)權(quán)利要求2或3所述的全滿空間訪問先入先出存儲器,其特征在于,用FPGA或ASIC或邏輯電路來實(shí)現(xiàn)。
全文摘要
本發(fā)明涉及一種先入先出數(shù)據(jù)緩存的方法以及一種全滿空間訪問先入先出存儲器,其采用兩個(gè)m+1位計(jì)數(shù)器,且使計(jì)數(shù)器的低m位連接到雙口存儲器的地址總線;通過比較兩個(gè)m+1位讀/寫計(jì)數(shù)器的m+1位輸出分別產(chǎn)生寫、讀使能信號,當(dāng)寫使能信號無效時(shí)全部空間都存儲了有效信號,當(dāng)讀使能信號無效時(shí),全部存儲空間中的有效數(shù)據(jù)都被讀出,從而充分利用雙口存儲器的存儲空間,克服了現(xiàn)有技術(shù)中寫使能信號無效時(shí)全部空間不能全部都存儲有效數(shù)據(jù)、讀使能信號無效時(shí)存儲于存儲空間中的所有有效數(shù)據(jù)不能全部讀出的缺陷。
文檔編號G06F12/00GK1731529SQ20051008315
公開日2006年2月8日 申請日期2005年7月13日 優(yōu)先權(quán)日2005年7月13日
發(fā)明者楊柱, 劉健 申請人:北京中星微電子有限公司