本發(fā)明涉及電子技術(shù)領(lǐng)域,尤其涉及一種先入先出FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫方法及數(shù)據(jù)緩存器。
背景技術(shù):
目前,在當(dāng)下的ASIC(英文:Application Specific Integrated Circuit,中文:專用集成電路)設(shè)計中,通常通過設(shè)置適量級數(shù)的FIFO(英文:First Input First Output,中文:先入先出)數(shù)據(jù)緩存器來進行數(shù)據(jù)緩存,來防止數(shù)據(jù)丟失或處理數(shù)據(jù)故障。FIFO數(shù)據(jù)緩存器是一種先進先出的數(shù)據(jù)緩存器,先進入的數(shù)據(jù)先從FIFO數(shù)據(jù)緩存器中讀出。具體的,現(xiàn)有的FIFO數(shù)據(jù)緩存器包含多個存儲單元,每個存儲單元存儲的數(shù)據(jù)位寬相等且為該FIFO數(shù)據(jù)緩存器的最小單元,因此,現(xiàn)有的FIFO數(shù)據(jù)緩存器在進行數(shù)據(jù)寫入和讀出時,會按照M(M為每個存儲單元所能存儲的數(shù)據(jù)的數(shù)據(jù)位寬)進M出的讀寫方式進行實現(xiàn),即現(xiàn)有的FIFO數(shù)據(jù)緩存器每次只能將數(shù)據(jù)位寬與其包含的存儲單元所能存儲的數(shù)據(jù)位寬M相等的數(shù)據(jù)寫入一個存儲單元中,同時每次也只能將一個存儲單元中存儲的數(shù)據(jù)位寬為M的數(shù)據(jù)讀出。
但是,隨著數(shù)據(jù)量的不斷增大,實際需求的不斷增多,現(xiàn)有FIFO數(shù)據(jù)緩存器的存取方式的設(shè)計就無法滿足實際的不同存取需求。具體的,現(xiàn)有的FIFO數(shù)據(jù)緩存器現(xiàn)有的FIFO數(shù)據(jù)緩存器只能實現(xiàn)M進M出的數(shù)據(jù)讀寫方式,而無法實現(xiàn)M進N(N不等于M)出的數(shù)據(jù)讀寫方式。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施例提供一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫方法及數(shù)據(jù)緩存器,解決了現(xiàn)有的FIFO數(shù)據(jù)緩存器不能實現(xiàn)M進N出的數(shù)據(jù)讀取方式問題。
為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
第一方面,提供一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)寫入方法,應(yīng)用于數(shù)據(jù)緩存器,所述FIFO數(shù)據(jù)緩存器包括數(shù)據(jù)位寬為1-bit的存儲單元,所述方法包括:
當(dāng)所述FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,獲取數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù);
將所述第一待寫入數(shù)據(jù)緩存在所述FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;
在所述數(shù)據(jù)緩存區(qū)中將所述待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊;將所述M個1-bit數(shù)據(jù)塊依次存儲至所述FIFO數(shù)據(jù)緩存器的前M個存儲單元中。
第二方面,提供一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)緩存器,所述FIFO數(shù)據(jù)緩存器包括數(shù)據(jù)位寬為1-bit的存儲單元,所述方法包括:
當(dāng)所述FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從所述FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至所述FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;
將所述數(shù)據(jù)緩存區(qū)中的所述N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù),并將N-bit位寬的數(shù)據(jù)輸出。
第三方面,提供一種FIFO數(shù)據(jù)緩存器,包括數(shù)據(jù)位寬為1-bit的存儲單元與處理單元,其中:
所述處理單元,用于當(dāng)所述FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,獲取數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù);將所述第一待寫入數(shù)據(jù)緩存在所述FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;在所述數(shù)據(jù)緩存區(qū)中將所述第一待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊;將所述M個1-bit數(shù)據(jù)塊依次存儲至所述FIFO數(shù)據(jù)緩存器的前M個存儲單元中。
第四方面,提供一種FIFO數(shù)據(jù)緩存器,包括數(shù)據(jù)位寬為1-bit的存儲單元和處理單元,其中:
所述處理單元用于當(dāng)所述FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從所述FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至所述FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;將所述數(shù)據(jù)緩存區(qū)中的所述N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù),并將N-bit位寬的數(shù)據(jù)輸出。
本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫方法及數(shù)據(jù)緩存器,該FIFO數(shù)據(jù)緩存器包括數(shù)據(jù)位寬為1-bit的存儲單元,當(dāng)FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,將數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中,并拆分為M個1-bit數(shù)據(jù)塊,之后依次存儲至FIFO數(shù)據(jù)緩存器的前M個的存儲單元中。當(dāng)FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中后,將數(shù)據(jù)緩存區(qū)中的N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù),并將N-bit位寬的數(shù)據(jù)輸出。由于該FIFO數(shù)據(jù)緩存器的所有存儲單元能存儲的數(shù)據(jù)的數(shù)據(jù)位寬都為1-bit,在寫入數(shù)據(jù)的時,會按照FIFO數(shù)據(jù)緩存器預(yù)先設(shè)置的規(guī)則,即設(shè)置M進N的讀寫方式,將寫入的M-bit數(shù)據(jù)進行拆分后存儲至存儲單元,以便讀取的N個存儲單元的數(shù)據(jù)均是寫入FIFO數(shù)據(jù)緩存器的數(shù)據(jù),沒有冗余項,對讀取出的數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行拼接,就可以實現(xiàn)M進N出。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種FIFO數(shù)據(jù)緩存器的寄存器存儲格式及地址示意圖;
圖2為本發(fā)明實施例提供的一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)寫入方法示意圖;
圖3為本發(fā)明實施例提供的一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀取方法示意圖;
圖4為本發(fā)明實施例提供的一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫存儲示意圖;
圖5為本發(fā)明實施例提供的另一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫存儲示意圖;
圖6為本發(fā)明實施例提供的一種FIFO數(shù)據(jù)緩存器結(jié)構(gòu)示意圖;
圖7為本發(fā)明實施例提供的另一種FIFO數(shù)據(jù)緩存器結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
下面對本申請中所涉及的部分術(shù)語進行解釋,以方便讀者理解:
“FIFO數(shù)據(jù)緩存器的數(shù)據(jù)位寬”,也就是英文資料里??吹降腡HE WIDTH,它指的是FIFO數(shù)據(jù)緩存器一次讀寫操作的數(shù)據(jù)位,就像MCU(英文:Microcontroller Uni,中文:微控制單元)有8位和16位,ARM32位等等,F(xiàn)IFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA(英文:Field-Programmable Gate Array,中文:現(xiàn)場可編程門陣列)自己實現(xiàn)一個FIFO,其數(shù)據(jù)位,也就是寬度是可以自己定義的。
“FIFO數(shù)據(jù)緩存器的深度”,也就是英文資料里??吹降腡HE DEEPTH,它指的是FIFO數(shù)據(jù)緩存器包括的存儲單元個數(shù)。如一個8位的FIFO數(shù)據(jù)緩存器,若深度為8,它可以存儲8個8位的數(shù)據(jù),深度為12,就可以存儲12個8位的數(shù)據(jù)。
為了使本領(lǐng)域的技術(shù)人員更好的理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖和具體實施例對本發(fā)明作進一步的詳細說明。
圖1為本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器的存儲單元存儲格式及地址結(jié)構(gòu)示意圖,參照圖1所示,該FIFO數(shù)據(jù)緩存器深度為X,即包括X個存儲單元,每個存儲單元能夠存儲1-bit的數(shù)據(jù)塊,其中,X>=(M+N)。其中,該FIFO數(shù)據(jù)緩存器中的X個存儲單元對應(yīng)的地址為0~X-1,同時,為了統(tǒng)一編碼,該FIFO數(shù)據(jù)緩存器中的X個存儲單元對應(yīng)的編號分別為 1~X,其中,存儲單元X為MSB(英文:Most Significant Bit,中文:最高有效位),存儲單元1為LSB(英文:Least Significant Bit,中文:最低有效位)。需要說明的是,上述的編號僅僅是一種實例,實際應(yīng)用時,可以按需設(shè)置。此外,本發(fā)明提供的FIFO數(shù)據(jù)緩存器還包括數(shù)據(jù)緩存區(qū),該數(shù)據(jù)緩存區(qū)可以為一個也可以是多個,當(dāng)該在數(shù)據(jù)緩存區(qū)為一個時,則該數(shù)據(jù)緩存區(qū)即可以對寫入至該數(shù)據(jù)緩存區(qū)的數(shù)據(jù)進行拆分處理,還可以對從該FIFO數(shù)據(jù)緩存器中讀取出的數(shù)據(jù)進行拼接處理;當(dāng)該數(shù)據(jù)緩存區(qū)為至少兩個時,則其中至少一個數(shù)據(jù)緩存區(qū)用于對寫入至該數(shù)據(jù)緩存區(qū)的數(shù)據(jù)進行拆分處理,剩余數(shù)據(jù)緩存區(qū)用于對從該FIFO數(shù)據(jù)緩存器中讀取出的數(shù)據(jù)進行拼接處理,即將數(shù)據(jù)的拆分處理與拼接處理分為不同數(shù)據(jù)緩存區(qū)進行處理。
需要說明的是,本文中的“第一”、“第二”等字樣對功能和作用基本相同的相同項或相似項進行區(qū)分,本領(lǐng)域技術(shù)人員可以理解“第一”、“第二”等字樣并不對數(shù)量和執(zhí)行次序進行限定。
需要說明的是,本發(fā)明實施例中,“示例性的”或者“例如”等詞用于表示作例子、例證或說明。本發(fā)明實施例中被描述為“示例性的”或者“例如”的任何實施例或設(shè)計方案不應(yīng)被解釋為比其它實施例或設(shè)計方案更優(yōu)選或更具優(yōu)勢。確切而言,使用“示例性的”或者“例如”等詞旨在以具體方式呈現(xiàn)相關(guān)概念。
需要說明的是,本發(fā)明實施例中,除非另有說明,“多個”的含義是指兩個或兩個以上。例如,多個數(shù)據(jù)包是指兩個或兩個以上的數(shù)據(jù)包。
需要說明的是,本發(fā)明實施例中,“的(英文:of)”,“相應(yīng)的(英文:corresponding,relevant)”和“對應(yīng)的(英文:corresponding)”有時可以混用,應(yīng)當(dāng)指出的是,在不強調(diào)其區(qū)別時,其所要表達的含義是一致的。
下面將結(jié)合本發(fā)明實施例的說明書附圖,對本發(fā)明實施例提供的技術(shù)方案進行說明。顯然,所描述的是本發(fā)明的一部分實施例,而不是全部的實施例。需要說明的是,下文所提供的任意多個技術(shù)方案中的部分或全部技術(shù)特征在不沖突的情況下,可以結(jié)合使用,形成新的技術(shù)方案。
基于上述內(nèi)容,本發(fā)明實施例提供一種數(shù)據(jù)緩存器的數(shù)據(jù)寫入方法,應(yīng)用于數(shù)據(jù)緩存器,F(xiàn)IFO數(shù)據(jù)緩存器包括數(shù)據(jù)位寬為1-bit的存儲單元,如圖2所示,該方法包括如下步驟:
101、當(dāng)FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,獲取數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù)。
示例性的,對于FIFO數(shù)據(jù)緩存器來說,其輸入的待寫入數(shù)據(jù)的數(shù)據(jù)位寬是預(yù)先設(shè)定的,當(dāng)待寫入數(shù)據(jù)的數(shù)據(jù)位寬為M-bit時,該FIFO數(shù)據(jù)緩存器的寫入方式是M進。
具體的,在獲取數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù)之前,上述步驟101具體包括:
101a、判斷FIFO數(shù)據(jù)緩存器當(dāng)前的工作狀態(tài),工作狀態(tài)包括寫狀態(tài)和讀狀態(tài)。
示例性的,F(xiàn)IFO數(shù)據(jù)緩存器一個寫狀態(tài),一個讀狀態(tài),當(dāng)寫狀態(tài)ready時,可以寫入數(shù)據(jù),當(dāng)寫狀態(tài)為unready時,不能寫入數(shù)據(jù),當(dāng)讀狀態(tài)ready時,可以讀取數(shù)據(jù),當(dāng)讀狀態(tài)為unready時,不能讀出數(shù)據(jù),并且讀寫狀態(tài)對于各自端來講獨立操作。
具體的,當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),即FIFO數(shù)據(jù)緩存器能夠?qū)懭隡-bit的待寫入的數(shù)據(jù)塊;當(dāng)FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài),即FIFO數(shù)據(jù)緩存器能夠讀出N-bit的數(shù)據(jù)塊;當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時且FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時即處于讀狀態(tài)的同時又處于寫狀態(tài)。
102、將第一待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中。
103、在數(shù)據(jù)緩存區(qū)中將第一待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊。
104、將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中。
可選的,當(dāng)N大于M,且FIFO數(shù)據(jù)緩存器的深度X大于2M時,將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中具體包括:
104a、將FIFO數(shù)據(jù)緩存器的前M個存儲單元中存儲的數(shù)據(jù)塊整體移位至FIFO數(shù)據(jù)緩存器的第M+1至第2M個存儲單元中。
104b、獲取數(shù)據(jù)位寬為M-bit的第二待寫入數(shù)據(jù)。
104c、將第二待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中。
104d、在數(shù)據(jù)緩存區(qū)中將第二待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊。
104e、將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中。
示例性的,當(dāng)X>TM(T大于等于2)時,重復(fù)上述移位與存儲過程,需要說明的是,上述FIFO數(shù)據(jù)緩存器的深度X大于2M,只是一種示例,均在本發(fā)明的保護范圍之內(nèi)。
本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器的數(shù)據(jù)寫入方法,當(dāng)FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,將數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中,并拆分為M個1-bit數(shù)據(jù)塊,之后依次存儲至FIFO數(shù)據(jù)緩存器的前M個的存儲單元中。由于該FIFO數(shù)據(jù)緩存器的所有存儲單元能存儲的數(shù)據(jù)的數(shù)據(jù)位寬都為1-bit,在寫入數(shù)據(jù)的時,會按照FIFO數(shù)據(jù)緩存器預(yù)先設(shè)置的規(guī)則,即設(shè)置M進N的讀寫方式,將寫入的M-bit數(shù)據(jù)進行拆分后存儲至存儲單元,以便讀取的N個存儲單元的數(shù)據(jù)均是寫入FIFO數(shù)據(jù)緩存器的數(shù)據(jù),沒有冗余項,對讀取出的數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行拼接,就可以實現(xiàn)M進N出。
本發(fā)明實施例提供一種數(shù)據(jù)緩存器的數(shù)據(jù)讀取方法,應(yīng)用于數(shù)據(jù)緩存器,F(xiàn)IFO數(shù)據(jù)緩存器包括數(shù)據(jù)位寬為1-bit的存儲單元,如圖3所示,該方法包括如下步驟:
201、當(dāng)FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中。
具體的,步驟201之前還包括如下步驟:
201a、判斷FIFO數(shù)據(jù)緩存器當(dāng)前的工作狀態(tài),工作狀態(tài)包括寫狀態(tài)和讀狀態(tài)。
具體的,當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),即FIFO數(shù)據(jù)緩存器能夠?qū)懭隡-bit的待寫入的數(shù)據(jù)塊;當(dāng)FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài),即FIFO數(shù)據(jù)緩存器能夠讀出N-bit的數(shù)據(jù)塊;當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時且FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時即處于讀狀態(tài)的同時又處于寫狀態(tài)。
202、將數(shù)據(jù)緩存區(qū)中的N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù),并將N-bit位寬的數(shù)據(jù)輸出。
示例性的,上述的數(shù)據(jù)緩存區(qū)還用于將N個1-bit的數(shù)據(jù)塊拼接為1個N-bit的數(shù)據(jù)塊。
示例性的,對于FIFO數(shù)據(jù)緩存器來說,其輸出的待讀出數(shù)據(jù)的數(shù)據(jù)位寬是預(yù)先設(shè)定的,當(dāng)待讀出數(shù)據(jù)的數(shù)據(jù)位寬為N-bit時,該FIFO數(shù)據(jù)緩存器的讀出方式是N出的。
示例性的,如圖4所示的一種FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀寫存儲示意圖,當(dāng)M-bit的待寫入數(shù)據(jù)在FIFO數(shù)據(jù)緩存器中數(shù)據(jù)緩存區(qū)進行拆分后,存儲在如圖4所示的區(qū)域1中,當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時且FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)小于N時,F(xiàn)IFO數(shù)據(jù)緩存器的寫狀態(tài)=ready,讀狀態(tài)=unready,將FIFO數(shù)據(jù)緩存器的前M個存儲單元中存儲的數(shù)據(jù)塊整體移位至FIFO數(shù)據(jù)緩存器的第M+1至第2M個存儲單元中,如圖4所示的區(qū)域2中。當(dāng)TM>N時,第T次寫入M-bit的待寫入數(shù)據(jù)時,F(xiàn)IFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器讀狀態(tài)=ready,將如圖4所示的區(qū)域3中的數(shù)據(jù)塊讀出,剩余的數(shù)據(jù)塊為如圖4所示的區(qū)域4。
本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器的數(shù)據(jù)讀取方法,當(dāng)FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中后,將數(shù)據(jù)緩存區(qū)中的N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù)塊,并將N-bit位寬的數(shù)據(jù)輸出。由于該FIFO數(shù)據(jù)緩存器的所有存儲單元能存儲的數(shù)據(jù)的數(shù)據(jù)位寬都為1-bit,在讀取時,會按照FIFO數(shù)據(jù)緩存器預(yù)先設(shè)置的規(guī)則,即設(shè)置M進N的讀寫方式,讀取N個存儲單元的數(shù)據(jù),且這N個數(shù)據(jù)均是寫入FIFO數(shù)據(jù)緩存器的數(shù)據(jù),沒有冗余項,對讀取出的數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行拼接,就可以實現(xiàn)M進N出。
示例性的,參照圖5所示的另一種FIFO數(shù)據(jù)緩存器的讀寫存儲示意圖,若FIFO數(shù)據(jù)緩存器的深度為X,X=M+N,假設(shè)N>M,且2M>N,在初始化t0狀態(tài)(即該FIFO數(shù)據(jù)緩存器未存儲數(shù)據(jù)塊)時,F(xiàn)IFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)等X,大于M,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),寫狀態(tài)=ready,該FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)等于0,小于N,F(xiàn)IFO數(shù)據(jù)緩存器讀狀態(tài)=unready,即不進行讀出操作,此時,F(xiàn)IFO指針為Index=0,寫狀態(tài)=ready,讀狀態(tài)=unready。
t1狀態(tài)(寫入第一待寫入數(shù)據(jù)),第一待寫入M-bit數(shù)據(jù)塊寫入FIFO數(shù)據(jù)緩存器,并在數(shù)據(jù)緩存區(qū)進行拆分,并存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中,如圖5所示的區(qū)域1中,此時,F(xiàn)IFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)等N,大于M,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),寫狀態(tài)=ready,該FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)等于M,小于N,F(xiàn)IFO數(shù)據(jù)緩存器讀狀態(tài)=unready,即不進行讀出操作,此時,F(xiàn)IFO指針為Index=M,寫狀態(tài)=ready,讀狀態(tài)=unready。
t2狀態(tài)(寫入第二待寫入數(shù)據(jù)),將FIFO數(shù)據(jù)緩存器的前M個存儲單元中存儲的數(shù)據(jù)塊整體移位至FIFO數(shù)據(jù)緩存器的第M+1至第2M個存儲單元中,如圖5所示的t2狀態(tài)的區(qū)域2中,將第二待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中,在數(shù)據(jù)緩存區(qū)中將第二待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊,將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中,如圖5所示的t2狀態(tài)的區(qū)域1中。此時,F(xiàn)IFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)等N-M,小于M,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài)=unready,即不進行讀寫入操作,該FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)等于2M,大于N,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài),讀狀態(tài)=ready,即進行讀出操作,此時,將N個1-bit的數(shù)據(jù)塊讀出至從FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊(即將如圖5所示的t2狀態(tài)的區(qū)域3中)存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū),并在數(shù)據(jù)緩存區(qū)將N個1-bit拼接為1個N-bit的數(shù)據(jù)后輸出。此時,F(xiàn)IFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)等2N-M,大于M,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),寫狀態(tài)=ready,該FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)等于2M-N(即如圖5所示的t2狀態(tài)的區(qū)域4中),小于N,F(xiàn)IFO數(shù)據(jù)緩存器讀狀態(tài)=unready,即不能進行讀出操作,此時,Index=2M-N,寫狀態(tài)=ready,讀狀態(tài)=unready。
t3狀態(tài)(寫入第三待寫入數(shù)據(jù)),將FIFO數(shù)據(jù)緩存器的前2M-N個存儲單元中存儲的數(shù)據(jù)塊整體移位至FIFO數(shù)據(jù)緩存器的第M+1至第3M-N個存儲單元中,如圖5所示的t3狀態(tài)的區(qū)域2中,將第三待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中,在數(shù)據(jù)緩存區(qū)中將第二待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊,將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元中,如圖5所示的t3狀態(tài)的區(qū)域1中,此時,F(xiàn)IFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)等2(N-M),當(dāng)2(N-M)大于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),寫狀態(tài)=ready,當(dāng)2(N-M)小于M時,F(xiàn)IFO數(shù)據(jù)緩存器寫狀態(tài)=unready,該FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)等于3M-N,當(dāng)3M-N大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài),讀狀態(tài)=ready,當(dāng)3M-N小于N時,F(xiàn)IFO數(shù)據(jù)緩存器讀狀態(tài)=unready。
示例性的,t4以及之后的狀態(tài),會重復(fù)t2的過程,并根據(jù)當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài),即FIFO數(shù)據(jù)緩存器能夠?qū)懭隡-bit的待寫入的數(shù)據(jù)塊。當(dāng)FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài),即FIFO數(shù)據(jù)緩存器能夠讀出N-bit的數(shù)據(jù)塊。
本發(fā)明提供一種FIFO數(shù)據(jù)緩存器,包括多個數(shù)據(jù)位寬為1-bit的存儲單元31與處理單元32,其中:
處理單元32,用于當(dāng)FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,獲取數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù);將第一待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;在數(shù)據(jù)緩存區(qū)中將第一待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊;將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元31中。
可選的,處理單元32還用于判斷FIFO數(shù)據(jù)緩存器當(dāng)前的工作狀態(tài),工作狀態(tài)包括寫狀態(tài)和讀狀態(tài),當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元31的個數(shù)大于等于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài);當(dāng)FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元31的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài)。
可選的,當(dāng)N大于M,且FIFO數(shù)據(jù)緩存器的深度X大于2M時,處理單元32還用于:
將FIFO數(shù)據(jù)緩存器的前M個存儲單元31中存儲的數(shù)據(jù)塊整體移位至FIFO數(shù)據(jù)緩存器的第M+1至第2M個存儲單元31中;獲取數(shù)據(jù)位寬為M-bit的第二待寫入數(shù)據(jù);將第二待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;在數(shù)據(jù)緩存區(qū)中將第二待寫入數(shù)據(jù)拆分為M個1-bit數(shù)據(jù)塊;將M個1-bit數(shù)據(jù)塊依次存儲至FIFO數(shù)據(jù)緩存器的前M個存儲單元31中。
本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器,當(dāng)FIFO數(shù)據(jù)緩存器處于寫狀態(tài)時,將數(shù)據(jù)位寬為M-bit的第一待寫入數(shù)據(jù)緩存在FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中,并拆分為M個1-bit數(shù)據(jù)塊,之后依次存儲至FIFO數(shù)據(jù)緩存器的前M個的存儲單元中。由于該FIFO數(shù)據(jù)緩存器的所有存儲單元能存儲的數(shù)據(jù)的數(shù)據(jù)位寬都為1-bit,在寫入數(shù)據(jù)的時,會按照FIFO數(shù)據(jù)緩存器預(yù)先設(shè)置的規(guī)則,即設(shè)置M進N的讀寫方式,將寫入的M-bit數(shù)據(jù)進行拆分后存儲至存儲單元,以便讀取的N個存儲單元的數(shù)據(jù)均是寫入FIFO數(shù)據(jù)緩存器的數(shù)據(jù),沒有冗余項,對讀取出的數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行拼接,就可以實現(xiàn)M進N出。
本發(fā)明提供一種FIFO數(shù)據(jù)緩存器,包括多個數(shù)據(jù)位寬為1-bit的存儲單元41與處理單元42,其中:
處理單元42用于當(dāng)FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從FIFO數(shù)據(jù)緩存器的存儲單元中41讀取N個1-bit數(shù)據(jù)塊存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中;將數(shù)據(jù)緩存區(qū)中的N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù),并將N-bit位寬的數(shù)據(jù)輸出。
可選的,處理單元42還用于判斷FIFO數(shù)據(jù)緩存器當(dāng)前的工作狀態(tài),工作狀態(tài)包括寫狀態(tài)和讀狀態(tài),當(dāng)FIFO數(shù)據(jù)緩存器中未存儲數(shù)據(jù)的存儲單元41的個數(shù)大于等于M時,F(xiàn)IFO數(shù)據(jù)緩存器處于寫狀態(tài);當(dāng)FIFO數(shù)據(jù)緩存器中存儲數(shù)據(jù)的存儲單元41的個數(shù)大于等于N時,F(xiàn)IFO數(shù)據(jù)緩存器處于讀狀態(tài)。
本發(fā)明實施例提供的FIFO數(shù)據(jù)緩存器,當(dāng)FIFO數(shù)據(jù)緩存器處于讀狀態(tài)時,從FIFO數(shù)據(jù)緩存器的存儲單元中讀取N個1-bit數(shù)據(jù)塊存儲至FIFO數(shù)據(jù)緩存器的數(shù)據(jù)緩存區(qū)中后,將數(shù)據(jù)緩存區(qū)中的N個1-bit數(shù)據(jù)塊拼接為1個N-bit位寬的數(shù)據(jù)塊。由于該FIFO數(shù)據(jù)緩存器的所有存儲單元能存儲的數(shù)據(jù)的數(shù)據(jù)位寬都為1-bit,在讀取時,會按照FIFO數(shù)據(jù)緩存器預(yù)先設(shè)置的規(guī)則,即設(shè)置M進N的讀寫方式,讀取N個存儲單元的數(shù)據(jù),且這N個數(shù)據(jù)均是寫入FIFO數(shù)據(jù)緩存器的數(shù)據(jù),沒有冗余項,對讀取出的數(shù)據(jù)按照預(yù)設(shè)規(guī)則進行拼接,就可以實現(xiàn)M進N出。
需要說明的是,在具體實現(xiàn)過程中,上述如圖2、3所示的方法流程中FIFO數(shù)據(jù)緩存器所執(zhí)行的各步驟均可以通過硬件形式的處理器執(zhí)行存儲器中存儲的軟件形式的計算機執(zhí)行指令實現(xiàn),為避免重復(fù),此處不再贅述。而上述FIFO數(shù)據(jù)緩存器所執(zhí)行的動作所對應(yīng)的程序均可以以軟件形式FIFO數(shù)據(jù)緩存器的存儲器中,以便于處理器調(diào)用執(zhí)行以上各個單元對應(yīng)的操作。
上文中的存儲器可以包括易失性存儲器(volatile memory),例如隨機存取存儲器(random-access memory,RAM);也可以包括非易失性存儲器(non-volatile memory),例如只讀存儲器(read-only memory,ROM),快閃存儲器(flash memory),硬盤(hard disk drive,HDD)或固態(tài)硬盤(solid-state drive,SSD);還可以包括上述種類的存儲器的組合。
上文所提供的設(shè)備中的處理器可以是一個處理器,也可以是多個處理元件的統(tǒng)稱。例如,處理器可以為中央處理器(central processing unit,CPU;也可以為其他通用處理器、數(shù)字信號處理器(digital signal processing,DSP)、專用集成電路(application specific integrated circuit,ASIC)、現(xiàn)場可編程門陣列(field-programmable gate array,F(xiàn)PGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件等。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等;還可以為專用處理器,該專用處理器可以包括基帶處理芯片、射頻處理芯片等中的至少一個。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理包括,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
最后應(yīng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。