專利名稱:用于寫入任意字節(jié)數(shù)據(jù)的fifo的寫入數(shù)據(jù)處理裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù),尤其涉及一種用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出 (First Input First Output, FIFO)的寫入數(shù)據(jù)處理裝置、用于寫入任意字節(jié)數(shù)據(jù)的FIFO 的寫入數(shù)據(jù)處理方法、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法。
背景技術(shù):
先入先出(First Input First Output, FIFO)是一種先進(jìn)先出的數(shù)據(jù)緩存器,主要接口有寫數(shù)據(jù)(wr_data),寫使能(Wr_en),讀數(shù)據(jù)(rd_data),讀使能(rd_en),F(xiàn)IFO的存儲(chǔ)狀況(data_Cnt)即空滿標(biāo)志。FIFO與普通存儲(chǔ)器的區(qū)別是沒有外部讀寫地址線。數(shù)據(jù)都是順序?qū)懭隖IFO,從FIFO順序地讀出數(shù)據(jù)。
進(jìn)出FIFO的數(shù)據(jù)位寬可變,如A時(shí)刻,一個(gè)時(shí)鐘可以向FIFO寫入8個(gè)字節(jié),B時(shí)刻可以向FIFO中寫入1個(gè)字節(jié)。同樣,在輸出接口,C時(shí)刻一個(gè)時(shí)鐘可以讀2個(gè)字節(jié),D時(shí)刻可以讀8個(gè)字節(jié)等。
對于某些應(yīng)用領(lǐng)域,如在FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)操作PCIE中,由于跨4K邊界和非4字節(jié)對齊,及外設(shè)部件互連標(biāo)準(zhǔn)擴(kuò)展(Peripheral Component Interconnect Express,PCIE)上事務(wù)層包(Transaction Lay Packet,TLP)中頁的幀長限制,會(huì)出現(xiàn)一個(gè)整幀數(shù)據(jù)由很多完成幀組成,且非最后的完成幀也會(huì)出現(xiàn)長度非8 字節(jié)對齊,這樣如果采用一個(gè)標(biāo)準(zhǔn)的FIFO(即8字節(jié)同時(shí)存,8字節(jié)同時(shí)取),就會(huì)導(dǎo)致幀中間有氣泡。同樣,F(xiàn)PGA向PCIE送數(shù)據(jù),由于地址的跨4k邊界,地址的非4字節(jié)對齊等,會(huì)導(dǎo)致每次從FIFO中取出的數(shù)據(jù)為非8字節(jié)整數(shù)長度數(shù)據(jù),若采用標(biāo)準(zhǔn)FIFO,會(huì)多讀數(shù)據(jù), 只有做一系列復(fù)雜的處理,才能保證數(shù)據(jù)的不丟失。其中,F(xiàn)PGA是一種集成度很高的新型高性能可編程芯片,其內(nèi)部電路功能是可編程的(Programmable),可以通過硬件描述語言 (HardwareDescription Language,HDL)和專用設(shè)計(jì)工具,在其內(nèi)部靈活地實(shí)現(xiàn)極其復(fù)雜的電路功能,適用于高速、高密度的高端數(shù)字邏輯電路設(shè)計(jì)領(lǐng)域。
現(xiàn)有針對PCIE上幀中間有氣泡或是取任意字節(jié)長度的問題,采用的解決方法是采用多個(gè)標(biāo)準(zhǔn)9位寬FIFO,每個(gè)FIFO存儲(chǔ)64位總線的一個(gè)字節(jié),根據(jù)數(shù)據(jù)的有效狀況和需要讀取的字節(jié)數(shù),將輸入總線和輸出總線在FIFO間靈活的映射。但是,這種方法導(dǎo)致FPGA 內(nèi)部RAM資源的損耗較大。發(fā)明內(nèi)容
本發(fā)明提出一種用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置、用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理方法、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法,以在避免FIFO存儲(chǔ)的數(shù)據(jù)幀中有氣泡的同時(shí),降低內(nèi)部RAM資源的損耗。
本發(fā)明提供了一種用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出FIFO的寫入數(shù)據(jù)處理裝置,包括
寫入數(shù)據(jù)引腳,用于接收待寫入數(shù)據(jù);
數(shù)據(jù)有效標(biāo)識(shí)引腳,用于接收用于標(biāo)識(shí)所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)有效的有效標(biāo)識(shí);
有效字節(jié)數(shù)引腳,用于接收所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù);
加法器,第一輸入端與所述有效字節(jié)數(shù)引腳相連;
第一延遲寄存器,輸入端與所述加法器的輸出端相連;
殘余字節(jié)數(shù)存儲(chǔ)器,輸入端與所述第一延遲寄存器輸出端的低P位相連,輸出端與所述加法器的第二輸入端相連,P為自然數(shù);
移位模塊,控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連,輸入端與所述寫入數(shù)據(jù)引腳相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,將當(dāng)前時(shí)鐘下所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)中從最低位開始的η個(gè)有效字節(jié)移位到殘余寄存器中,η等于q減去在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù),q = 2P;
所述殘余寄存器,輸入端與所述移位模塊的輸出端相連;
拼接模塊,第一輸入端與所述寫入數(shù)據(jù)引腳相連,第二輸入端與所述殘余寄存器的輸出端相連,控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,將所述寫入數(shù)據(jù)引腳接收的當(dāng)前數(shù)據(jù)的最高位開始的有效字節(jié)移位到所述殘余寄存器存儲(chǔ)的上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)至少q字節(jié)的數(shù)據(jù),并將所述拼接得到的數(shù)據(jù)與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO ;
與門,第一輸入端與所述數(shù)據(jù)有效標(biāo)識(shí)引腳反相相連,第二輸入端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連;
或門,第一輸入端與所述與門的輸出端相連,第二輸入端與所述第一延遲寄存器輸出端的最高位相連,輸出端與所述FIFO相連,輸出寫使能信號(hào)給所述FIFO。
本發(fā)明還提供了一種用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出FIFO的寫入數(shù)據(jù)處理方法,包括
接收待寫入數(shù)據(jù)及所述待寫入數(shù)據(jù)的有效字節(jié)數(shù);
將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加,當(dāng)相加的結(jié)果大于q時(shí),則當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于相加的結(jié)果減去q得到的差值;否則,當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于0,并保存當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù),其中q為自然數(shù);
當(dāng)所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加的結(jié)果大于q時(shí),則將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的最高位開始的有效字節(jié)移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)連續(xù)q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO,并暫存所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)中殘余的有效字節(jié);當(dāng)相加的結(jié)果等于q時(shí),將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO;當(dāng)相加的結(jié)果小于q 時(shí),將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,暫存。
本發(fā)明還提供了一種從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置,包括
讀請求引腳;用于接收讀數(shù)據(jù)請求;
讀請求長度引腳,用于接收請求讀出的數(shù)據(jù)的數(shù)據(jù)長度;
鎖存器有效字節(jié)統(tǒng)計(jì)模塊,與鎖存器相連,用于統(tǒng)計(jì)所述鎖存器中鎖存的數(shù)據(jù)的有效字節(jié)數(shù);
讀接口控制模塊,第一輸入端與所述讀請求引腳相連,第二輸入端與所述讀請求長度引腳相連,用于根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到時(shí)鐘數(shù), 并根據(jù)所述時(shí)鐘數(shù)向所述FIFO輸出讀使能信號(hào);還用于當(dāng)所述數(shù)據(jù)長度大于q減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1, 則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出;q為自然數(shù);
添數(shù)據(jù)模塊,輸入端與所述鎖存器相連,用于將所述FIFO輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后;
扣數(shù)據(jù)模塊,輸入端與所述添數(shù)據(jù)模塊的輸出端相連,控制端與所述讀接口控制模塊輸出有效字節(jié)數(shù)的輸出端相連,用于將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中從最高位開始的m個(gè)字節(jié)去除后輸出到頂移位模塊,m等于所述讀接口控制模塊輸出有效字節(jié)數(shù)的輸出端輸出的有效字節(jié)數(shù);
所述頂移位模塊,輸入端與所述扣數(shù)據(jù)模塊的輸出端相連,用于接收所述扣數(shù)據(jù)模塊輸出的去除m個(gè)字節(jié)后的數(shù)據(jù),并將所述去除m個(gè)字節(jié)后的數(shù)據(jù)中剩余的有效字節(jié)置頂,得到置頂后的數(shù)據(jù);
所述鎖存器,與所述頂移位模塊的輸出端相連,用于鎖存所述置頂后的數(shù)據(jù)的高r 位,r = (q-1) X8。
本發(fā)明還提供了一種從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的方法,包括
接收讀數(shù)據(jù)請求及所述讀數(shù)據(jù)請求所請求讀出的數(shù)據(jù)的數(shù)據(jù)長度;
根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到向FIFO發(fā)出讀使能的時(shí)鐘數(shù),向所述FIFO輸出讀使能信號(hào);
當(dāng)所述數(shù)據(jù)長度大于q減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出;q為自然數(shù);
將所述FIFO在所述讀使能信號(hào)觸發(fā)下輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后,當(dāng)所述數(shù)據(jù)長度大于q減1,則將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中其余的有效字節(jié)鎖存;當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述添加得到的數(shù)據(jù)中的有效字節(jié)作為讀出的數(shù)據(jù)輸出。
本發(fā)明還提供了一種先進(jìn)先出FIFO存儲(chǔ)器,包括FIFO,其中,還包括上述用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置,及上述從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置,所述寫入數(shù)據(jù)處理裝置和所述讀數(shù)據(jù)處理裝置分別與所述FIFO相連。
本發(fā)明提供的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置、用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理方法、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法中,寫入數(shù)據(jù)處理通過對待寫入數(shù)據(jù)進(jìn)行移位、拼接處理,將所有待寫入數(shù)據(jù)中的有效字節(jié)按順序放置在一起寫入FIFO,避免了 FIFO存儲(chǔ)的數(shù)據(jù)幀中產(chǎn)生氣泡,使得任意長度的數(shù)據(jù)可都寫入一塊FIFO ;讀數(shù)據(jù)處理通過添數(shù)據(jù)、扣數(shù)據(jù)、頂移位及鎖存處理,能夠根據(jù)讀數(shù)據(jù)的長度要求,讀出任意字節(jié)長度的數(shù)據(jù),實(shí)現(xiàn)了采用一塊FIFO進(jìn)行任意長度的數(shù)據(jù)的存儲(chǔ),同時(shí),避免了大量消耗FPGA內(nèi)部的RAM資源。
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖2為本發(fā)明實(shí)施例提供的從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖3為本發(fā)明實(shí)施例提供的一種FIFO存儲(chǔ)器的結(jié)構(gòu)示意圖4為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器的端口結(jié)構(gòu)示意圖5為本發(fā)明實(shí)施例提供的另一種FIFO存儲(chǔ)器的結(jié)構(gòu)示意圖6為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法中計(jì)算讀使能個(gè)數(shù)的流程圖7為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法中計(jì)算下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)的流程圖8為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器、用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置及方法向FIFO寫入數(shù)據(jù)實(shí)施例的時(shí)序圖9為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法從FIFO讀出數(shù)據(jù)實(shí)施例的時(shí)序圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖,如圖1所示,寫入數(shù)據(jù)處理裝置包括寫入數(shù)據(jù)引腳11、數(shù)據(jù)有效標(biāo)識(shí)引腳 12、有效字節(jié)數(shù)引腳13、加法器14、第一延遲寄存器15、殘余字節(jié)數(shù)存儲(chǔ)器16、移位模塊17、 殘余寄存器18、拼接模塊19、與門110及或門111。
寫入數(shù)據(jù)引腳11用于接收待寫入數(shù)據(jù)。
數(shù)據(jù)有效標(biāo)識(shí)引腳12用于接收用于標(biāo)識(shí)所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)有效的有效標(biāo)識(shí)。
有效字節(jié)數(shù)引腳13用于接收所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)。
加法器14的第一輸入端與所述有效字節(jié)數(shù)引腳13相連。
第一延遲寄存器15的輸入端與所述加法器14的輸出端相連。
殘余字節(jié)數(shù)存儲(chǔ)器16的輸入端與所述第一延遲寄存器15輸出端的低P位相連, 輸出端與所述加法器14的第二輸入端相連,ρ為自然數(shù)。
移位模塊17的控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器16的輸出端相連,輸入端與所述寫入數(shù)據(jù)引腳11相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器16中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,當(dāng)數(shù)據(jù)有效標(biāo)識(shí)引腳12接收數(shù)據(jù)有效標(biāo)識(shí)信號(hào)時(shí),說明寫入數(shù)據(jù)引腳11接收的待寫入數(shù)據(jù)有效,也即在待寫入數(shù)據(jù)有效時(shí),將當(dāng)前時(shí)鐘下所述寫入數(shù)據(jù)引腳11接收的待寫入數(shù)據(jù)中從最低位開始的η個(gè)有效字節(jié)數(shù)移位到殘余寄存器18中,η等于q減去在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù),q = 2P,單位為字節(jié),為寫入FIFO的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元為q個(gè)字節(jié),下述q同。
所述殘余寄存器18的輸入端與所述移位模塊17的輸出端相連。
拼接模塊19的第一輸入端與所述寫入數(shù)據(jù)引腳11相連,第二輸入端與所述殘余寄存器18的輸出端相連,控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器16的輸出端相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器16中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,將所述寫入數(shù)據(jù)引腳11接收的當(dāng)前數(shù)據(jù)的最高位開始的有效字節(jié)移位到所述殘余寄存器18存儲(chǔ)的上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)至少q字節(jié)的數(shù)據(jù),并將所述拼接得到的數(shù)據(jù)與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO,即將每個(gè)拼接得到的數(shù)據(jù)與其有效字節(jié)數(shù)放在一起寫入FIFO中。
與門110的第一輸入端與所述數(shù)據(jù)有效標(biāo)識(shí)引腳12反相相連,第二輸入端與所述殘余字節(jié)數(shù)存儲(chǔ)器16的輸出端相連。
或門111的第一輸入端與所述與門110的輸出端相連,第二輸入端與所述第一延遲寄存器15輸出端的最高位相連,輸出端與所述FIFO相連,輸出寫使能信號(hào)給所述FIFO。
可選地,本發(fā)明實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置還包括幀結(jié)束引腳及第二延遲寄存器,以保證殘余寄存器中殘留的數(shù)據(jù)幀的最后幾個(gè)字節(jié)都能夠?qū)懭隖IFO中。
其中,幀結(jié)束引腳用于接收所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)所屬幀的幀結(jié)束信號(hào);第二延遲寄存器的輸入端與所述幀結(jié)束引腳相連,輸出端與所述與門的第三輸入端及所述殘余字節(jié)數(shù)存儲(chǔ)器的控制端相連,以使所述殘余字節(jié)數(shù)存儲(chǔ)器在接收到所述幀結(jié)束信號(hào)后清零。
本發(fā)明實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的出FIFO的寫入數(shù)據(jù)處理方法,包括
接收待寫入數(shù)據(jù)及所述待寫入數(shù)據(jù)的有效字節(jié)數(shù);
將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加,當(dāng)相加的結(jié)果大于q時(shí),則當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于相加的結(jié)果減去q得到的差值;否則,當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于0,并保存當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù),其中q為自然數(shù);
當(dāng)所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加的結(jié)果大于q時(shí),則將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的最高位開始的有效字節(jié)移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)連續(xù)q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO,并暫存所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)中殘余的有效字節(jié);當(dāng)相加的結(jié)果等于q時(shí),則將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO ;當(dāng)相加的結(jié)果小于q時(shí),將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,暫存。
可選地,本發(fā)明實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的出FIFO的寫入數(shù)據(jù)處理方法,還包括
接收當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)所屬幀的幀結(jié)束信號(hào),并在接收到所述幀結(jié)束信號(hào)后延遲一個(gè)時(shí)鐘,判斷是否還暫存有殘余的有效字節(jié),若是,則將殘余的有效字節(jié)寫入所述FIFO,結(jié)束寫入操作;否則,結(jié)束寫入操作。
相應(yīng)地,圖2為本發(fā)明實(shí)施例提供的從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。如圖2所示,從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置包括讀請求引腳21、讀請求長度引腳22、鎖存器有效字節(jié)統(tǒng)計(jì)模塊23、讀接口控制模塊M、添數(shù)據(jù)模塊 25、扣數(shù)據(jù)模塊沈、頂移位模塊27及鎖存器觀。
讀請求引腳21用于接收讀數(shù)據(jù)請求。
讀請求長度引腳22用于接收請求讀出的數(shù)據(jù)的數(shù)據(jù)長度。
鎖存器有效字節(jié)統(tǒng)計(jì)模塊23與鎖存器觀相連,用于統(tǒng)計(jì)所述鎖存器觀中鎖存的數(shù)據(jù)的有效字節(jié)數(shù)。
讀接口控制模塊M的第一輸入端與所述讀請求引腳21相連,第二輸入端與所述讀請求長度引腳22相連,用于根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到時(shí)鐘數(shù),并根據(jù)所述時(shí)鐘數(shù)向所述FIFO輸出讀使能信號(hào);還用于當(dāng)所述數(shù)據(jù)長度大于q 減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去 q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出。q為自然數(shù)。
添數(shù)據(jù)模塊25的輸入端與所述鎖存器觀相連,用于將所述FIFO輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后。
扣數(shù)據(jù)模塊沈的輸入端與所述添數(shù)據(jù)模塊25的輸出端相連,控制端與所述讀接口控制模塊對輸出有效字節(jié)數(shù)的輸出端相連,用于當(dāng)所述數(shù)據(jù)長度大于q減1,則將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中從最高位開始的m個(gè)字節(jié)去除后輸出到頂移位模塊,m等于所述讀接口控制模塊輸出有效字節(jié)數(shù)的輸出端輸出的有效字節(jié)數(shù);
頂移位模塊27的輸入端與所述扣數(shù)據(jù)模塊沈的輸出端相連,用于接收所述扣數(shù)據(jù)模塊輸出的去除m個(gè)字節(jié)后的數(shù)據(jù),并將所述去除m個(gè)字節(jié)后的數(shù)據(jù)中剩余的有效字節(jié)置頂,得到置頂后的數(shù)據(jù)。
鎖存器28與所述頂移位模塊27的輸出端相連,用于鎖存所述置頂后的數(shù)據(jù)的高r 位,r = (q-1) X8。
本發(fā)明實(shí)施例提供的從FIFO讀出任意字節(jié)數(shù)據(jù)的方法包括
接收讀數(shù)據(jù)請求及所述讀數(shù)據(jù)請求所請求讀出的數(shù)據(jù)的數(shù)據(jù)長度;
根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到向FIFO發(fā)出讀使能的時(shí)鐘數(shù),向所述FIFO輸出讀使能信號(hào);
當(dāng)所述數(shù)據(jù)長度大于q減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出;q為自然數(shù);
將所述FIFO在所述讀使能信號(hào)觸發(fā)下輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后,當(dāng)所述數(shù)據(jù)長度大于q減1,則將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中其余的有效字節(jié)鎖存;當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述添加得到的數(shù)據(jù)中的有效字節(jié)作為讀出的數(shù)據(jù)輸出。
圖3為本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器的結(jié)構(gòu)示意圖。如圖3所示,F(xiàn)IFO存儲(chǔ)器包括FIFO 31、寫入數(shù)據(jù)處理裝置32及讀數(shù)據(jù)處理裝置33。
寫入數(shù)據(jù)處理裝置32及讀數(shù)據(jù)處理裝置33分別與FIFO 31相連,寫入數(shù)據(jù)處理裝置32用來對寫入FIFO 31的數(shù)據(jù)中的有效字節(jié)拼接在一起,然后寫入FIFO 31。FIFO 31 為標(biāo)準(zhǔn)的通用FIFO。讀數(shù)據(jù)處理裝置33根據(jù)讀請求將FIFO 31輸出的數(shù)據(jù)進(jìn)行拆分,以滿足讀請求的長度要求。具體地,寫入數(shù)據(jù)處理裝置32可為上述實(shí)施例提供的任一種用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置,讀數(shù)據(jù)處理裝置33可為上述實(shí)施例提供的從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置。
下面以q = 8為例給出具體的例子對上述FIFO存儲(chǔ)器及FIFO存儲(chǔ)器中寫入數(shù)據(jù)處理裝置、讀數(shù)據(jù)處理裝置以及寫入數(shù)據(jù)處理方法、讀數(shù)據(jù)處理方法作進(jìn)一步說明。
當(dāng)q = 8時(shí),允許每個(gè)時(shí)鐘寫入FIFO的數(shù)據(jù)長度為1到8個(gè)字節(jié),同時(shí)允許每個(gè)時(shí)鐘從FIFO中讀出的長度為1到8個(gè)字節(jié)。根據(jù)輸入數(shù)據(jù)的有效字節(jié)數(shù),將輸入的數(shù)據(jù)移位,當(dāng)數(shù)據(jù)移滿8個(gè)字節(jié),或是一幀的結(jié)尾,則將數(shù)據(jù)寫入標(biāo)準(zhǔn)普通FIFO。同時(shí)在讀出端,根據(jù)請求的讀長度和以前讀殘留的字節(jié),計(jì)算向標(biāo)準(zhǔn)普通FIFO要取的數(shù)據(jù)個(gè)數(shù),最后根據(jù)用戶的請求長度,將數(shù)據(jù)輸出。
具體地,本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器的端口結(jié)構(gòu)如圖4所示,主要包括端口 wr_data[63:0]、wr_mod[3:0]、w_dval、eop、rd_len[η :0]、rd_req、rd_gnt、data_cnt[m:0]、 rd_dval、rd_data[63:0]及 rd_mod[3:0]。
其中,wr_data[63:0]為64位即8個(gè)字節(jié)寬的寫數(shù)據(jù),可能其中只有幾個(gè)字節(jié)有效,有效字節(jié)按從最高位字節(jié)向低位字節(jié)的順序排布,即如果一個(gè)數(shù)據(jù)中只有一個(gè)字節(jié)有效,則63-56位有效;如果是兩個(gè)字節(jié)有效,則是63-48位有效;如果是7個(gè)字節(jié)有效,則為 63-8位有效,等等。
wr_mod[3:0]用于表征wr_dataW3:0]中有效字節(jié)的個(gè)數(shù),也即本次總線上的有效字節(jié)數(shù)。
w_dval 為 wr_data 禾口 wr_mod 的有效標(biāo)識(shí)。
eop為幀結(jié)束標(biāo)識(shí)。當(dāng)一幀數(shù)據(jù)傳輸結(jié)束,必須給出eop,以告知FIFO —幀數(shù)據(jù)傳11輸結(jié)束,否則可能最后一個(gè)幀的部分字節(jié)無法讀出。
rd_len[n:0]為本次需要讀出的長度,應(yīng)與rd_req同時(shí)給出
rd_req用于申請讀數(shù)據(jù),收到rd_gnt后應(yīng)撤銷。
rd_gnt用于收到請求后,隨后一個(gè)時(shí)鐘即釋放出讀應(yīng)答,一直持續(xù)到數(shù)據(jù)傳輸完畢。
data_cnt[m:0]為FIFO中存有的有效字節(jié)個(gè)數(shù)。
rd_dval為讀出的數(shù)據(jù)有效標(biāo)識(shí)。
rd_data [63 0]為讀出的數(shù)據(jù)。讀出的數(shù)據(jù)中可能只有幾個(gè)字節(jié)有效,有效字節(jié)按從最高位字節(jié)向低位字節(jié)的順序排布,即如果一個(gè)數(shù)據(jù)中只有一個(gè)字節(jié)有效,則63-56位有效;如果是兩個(gè)字節(jié)有效,則是63-48位有效,等等。
rd_mod[3:0]為讀出的數(shù)據(jù)中的有效字節(jié)個(gè)數(shù),即表示同一時(shí)鐘下rd_ data[63:0]中有效字節(jié)的個(gè)數(shù)。當(dāng)需要讀出的字節(jié)數(shù)大于8,則除了最后一個(gè)時(shí)鐘外,其它的時(shí)鐘下讀出的rd_dataW3:0]的有效字節(jié)個(gè)數(shù)即rd_mod[3:0]均為8。
本發(fā)明實(shí)施例提供的FIFO存儲(chǔ)器的內(nèi)部總體結(jié)構(gòu)如圖5所示,寫入數(shù)據(jù)處理模塊、標(biāo)準(zhǔn)FIFO及讀數(shù)據(jù)處理模塊。
其中,標(biāo)準(zhǔn)FIFO即FPGA中標(biāo)準(zhǔn)例化的FIFO,也即傳統(tǒng)的FIFO。
寫入數(shù)據(jù)處理模塊為在現(xiàn)有的標(biāo)準(zhǔn)FIFO的基礎(chǔ)上增加的FIFO的輸入接口邏輯, 可為上述實(shí)施例提供的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置。讀數(shù)據(jù)處理模塊為在現(xiàn)有的標(biāo)準(zhǔn)FIFO的基礎(chǔ)上增加的FIFO的輸出接口邏輯,可為上述實(shí)施例提供的從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置。
具體地,寫入數(shù)據(jù)處理模塊51中,包括殘余字節(jié)數(shù)模塊511、移位模塊512、殘余寄存器513、拼接模塊514、加法器515、與門516、或門517及兩個(gè)用于延遲一個(gè)時(shí)鐘的寄存器 D0
殘余字節(jié)數(shù)模塊511用于存儲(chǔ)上一個(gè)時(shí)鐘下待寫入的數(shù)據(jù)Wr_datd63:0]中未被寫入標(biāo)準(zhǔn)FIFO中的殘余字節(jié)數(shù)left_num[2:0]。殘余字節(jié)數(shù)left_num[2:0]也即殘余寄存器513中存儲(chǔ)的數(shù)據(jù)d_leftW3:0]的有效字節(jié)數(shù)。
加法器515用于將當(dāng)前時(shí)鐘下Wr_dataW3:0]的有效字節(jié)數(shù)Wr_mod[3:0]與殘余字節(jié)數(shù)模塊511中存儲(chǔ)的殘余字節(jié)數(shù)left_nUm[2:0]相加,通過延遲寄存器D延遲后,得到下一個(gè)時(shí)鐘的殘余字節(jié)數(shù)left_num[2:0]。
移位模塊512用于根據(jù)殘余字節(jié)數(shù)模塊511中的存儲(chǔ)的殘余字節(jié)數(shù)left_ num[2:0]將wr_datd63:0]中的有效字節(jié)暫存到殘余寄存器513中,以用于下一次拼接。
拼接模塊514用于將Wr_datd63:0]中剩余的有效字節(jié)與殘余寄存器513中上一個(gè)時(shí)鐘存儲(chǔ)的字節(jié)進(jìn)行拼接,得到d_COn[63:0],并將d_COn[63:0]及其有效字節(jié)數(shù) mod [3:0] 一起寫入 FIFO 中。
與門516及或門517用于計(jì)算下一個(gè)時(shí)鐘的寫使能信號(hào)Wr_en。
寫入數(shù)據(jù)處理模塊51工作時(shí),在輸入數(shù)據(jù)有效即Wr_dval為高的情況下,wr_ mod [3:0]與本地殘余字節(jié)數(shù)left_num[2:0](本地殘余字節(jié)數(shù)left_num[2 0]初始化后的值為0)進(jìn)行相加,將相加的結(jié)果mod_Sum[3:0]延遲一個(gè)時(shí)鐘后,將第3位mod_Sum[3]與 eop運(yùn)算得到下一個(gè)時(shí)鐘的Wr_en,mod_sum[2:0]即成為下一個(gè)時(shí)鐘的待拼接的殘余字節(jié)數(shù) left_num[2:0]。
在殘余字節(jié)數(shù)left_num[2:0]的控制下,控制寫入的數(shù)據(jù)Wr_dataW3:0]中的從低位開始的相應(yīng)個(gè)有效字節(jié)向殘余寄存器513中的移位,暫存該部分有效字節(jié),以與下一個(gè)時(shí)鐘的數(shù)據(jù)中的高位有效字節(jié)拼接成8個(gè)字節(jié),且該部分有效字節(jié)作為該8個(gè)字節(jié)的高位字節(jié),而下一個(gè)時(shí)鐘的數(shù)據(jù)的有效字節(jié)作為該8個(gè)字節(jié)的低位字節(jié)。同時(shí),當(dāng)前時(shí)鐘下寫入的數(shù)據(jù)wr_dataW3:0]中未被寫入殘余寄存器513的數(shù)據(jù)d_left W3 0]的有效字節(jié)被送入拼接模塊,以與上一個(gè)時(shí)鐘移位到殘余寄存器513的數(shù)據(jù)d_left [63 0]中的有效字節(jié)拼接為8個(gè)字節(jié)。該8個(gè)字節(jié)中,上一個(gè)時(shí)鐘移位到殘余寄存器513的數(shù)據(jù)d_leftW3:0] 中的有效字節(jié)為高位,當(dāng)前時(shí)鐘下從寫入的數(shù)據(jù)wr_dataW3:0]中送入到拼接模塊514的有效字節(jié)為低位。拼接模塊514將拼接得到的數(shù)據(jù)d_COn[63:0]及拼接得到的數(shù)據(jù)d_ con[63:0]的有效字節(jié)數(shù)mod[3:0]綁定在一起,作為標(biāo)準(zhǔn)FIFO的寫入數(shù)據(jù)寫入標(biāo)準(zhǔn)FIFO 中。其中,有效字節(jié)數(shù) mod[3:0],imod_sum[3:0]大于 8 則 mod[3:0]為 8,否則 mod[3:0] 等于 mod_sum[3 0]。
其中,殘余寄存器513的數(shù)據(jù)d_leftW3:0]中的有效字節(jié)數(shù)等于left_num[2 0]。 left_num[2:0]、殘余寄存器513的數(shù)據(jù)d_left [630]與d_COn[63:0]之間的對應(yīng)關(guān)系如表1所示。
表1輸入移位拼接表
權(quán)利要求
1.一種用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出FIFO的寫入數(shù)據(jù)處理裝置,其特征在于,包括寫入數(shù)據(jù)引腳,用于接收待寫入數(shù)據(jù);數(shù)據(jù)有效標(biāo)識(shí)引腳,用于接收用于標(biāo)識(shí)所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)有效的有效標(biāo)識(shí);有效字節(jié)數(shù)引腳,用于接收所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù); 加法器,第一輸入端與所述有效字節(jié)數(shù)引腳相連; 第一延遲寄存器,輸入端與所述加法器的輸出端相連;殘余字節(jié)數(shù)存儲(chǔ)器,輸入端與所述第一延遲寄存器輸出端的低P位相連,輸出端與所述加法器的第二輸入端相連,P為自然數(shù);移位模塊,控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連,輸入端與所述寫入數(shù)據(jù)引腳相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,將當(dāng)前時(shí)鐘下所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)中從最低位開始的η個(gè)有效字節(jié)移位到殘余寄存器中,η 等于q減去在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù),q = 2p; 所述殘余寄存器,輸入端與所述移位模塊的輸出端相連;拼接模塊,第一輸入端與所述寫入數(shù)據(jù)引腳相連,第二輸入端與所述殘余寄存器的輸出端相連,控制端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連,用于在所述殘余字節(jié)數(shù)存儲(chǔ)器中存儲(chǔ)的殘余字節(jié)數(shù)的控制下,將所述寫入數(shù)據(jù)引腳接收的當(dāng)前數(shù)據(jù)的最高位開始的有效字節(jié)移位到所述殘余寄存器存儲(chǔ)的上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分, 拼接為一個(gè)至少q字節(jié)的數(shù)據(jù),并將所述拼接得到的數(shù)據(jù)與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO ;與門,第一輸入端與所述數(shù)據(jù)有效標(biāo)識(shí)引腳反相相連,第二輸入端與所述殘余字節(jié)數(shù)存儲(chǔ)器的輸出端相連;或門,第一輸入端與所述與門的輸出端相連,第二輸入端與所述第一延遲寄存器輸出端的最高位相連,輸出端與所述FIFO相連,輸出寫使能信號(hào)給所述FIFO。
2.根據(jù)權(quán)利要求1所述的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置,其特征在于,還包括幀結(jié)束引腳,用于接收所述寫入數(shù)據(jù)引腳接收的待寫入數(shù)據(jù)所屬幀的幀結(jié)束信號(hào); 第二延遲寄存器,輸入端與所述幀結(jié)束引腳相連,輸出端與所述與門的第三輸入端及所述殘余字節(jié)數(shù)存儲(chǔ)器的控制端相連,以使所述殘余字節(jié)數(shù)存儲(chǔ)器在接收到所述幀結(jié)束信號(hào)后清零。
3.一種用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出FIFO的寫入數(shù)據(jù)處理方法,其特征在于,包括接收待寫入數(shù)據(jù)及所述待寫入數(shù)據(jù)的有效字節(jié)數(shù);將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加,當(dāng)相加的結(jié)果大于q時(shí),則當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于相加的結(jié)果減去q得到的差值;否則,當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)等于0,并保存當(dāng)前時(shí)鐘下數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù),其中q為自然數(shù);當(dāng)所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的有效字節(jié)數(shù)與上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)數(shù)相加的結(jié)果大于q時(shí),則將當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)的最高位開始的有效字節(jié)移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè)連續(xù)q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO,并暫存所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)中殘余的有效字節(jié);當(dāng)相加的結(jié)果等于q時(shí),將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,拼接為一個(gè) q字節(jié)的數(shù)據(jù),并與拼接得到的數(shù)據(jù)的有效字節(jié)數(shù)綁定寫入FIFO ;當(dāng)相加的結(jié)果小于q時(shí), 將所述當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)從最高位開始移位到上一時(shí)鐘數(shù)據(jù)拼接后殘余的有效字節(jié)后續(xù)的低位部分,暫存。
4.根據(jù)權(quán)利要求3所述的用于寫入任意字節(jié)數(shù)據(jù)的先進(jìn)先出FIFO的寫入數(shù)據(jù)處理方法,其特征在于,還包括接收當(dāng)前時(shí)鐘下接收的待寫入數(shù)據(jù)所屬幀的幀結(jié)束信號(hào),并在接收到所述幀結(jié)束信號(hào)后延遲一個(gè)時(shí)鐘,判斷是否還暫存有殘余的有效字節(jié),若是,則將殘余的有效字節(jié)寫入所述 FIFO,結(jié)束寫入操作;否則,結(jié)束寫入操作。
5.一種從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置,其特征在于,包括讀請求引腳;用于接收讀數(shù)據(jù)請求;讀請求長度引腳,用于接收請求讀出的數(shù)據(jù)的數(shù)據(jù)長度;鎖存器有效字節(jié)統(tǒng)計(jì)模塊,與鎖存器相連,用于統(tǒng)計(jì)所述鎖存器中鎖存的數(shù)據(jù)的有效字節(jié)數(shù);讀接口控制模塊,第一輸入端與所述讀請求引腳相連,第二輸入端與所述讀請求長度引腳相連,用于根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到時(shí)鐘數(shù),并根據(jù)所述時(shí)鐘數(shù)向所述FIFO輸出讀使能信號(hào);還用于當(dāng)所述數(shù)據(jù)長度大于q減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出;q為自然數(shù);添數(shù)據(jù)模塊,輸入端與所述鎖存器相連,用于將所述FIFO輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后;扣數(shù)據(jù)模塊,輸入端與所述添數(shù)據(jù)模塊的輸出端相連,控制端與所述讀接口控制模塊輸出有效字節(jié)數(shù)的輸出端相連,用于將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中從最高位開始的m個(gè)字節(jié)去除后輸出到頂移位模塊,m等于所述讀接口控制模塊輸出有效字節(jié)數(shù)的輸出端輸出的有效字節(jié)數(shù);所述頂移位模塊,輸入端與所述扣數(shù)據(jù)模塊的輸出端相連,用于接收所述扣數(shù)據(jù)模塊輸出的去除m個(gè)字節(jié)后的數(shù)據(jù),并將所述去除m個(gè)字節(jié)后的數(shù)據(jù)中剩余的有效字節(jié)置頂,得到置頂后的數(shù)據(jù);所述鎖存器,與所述頂移位模塊的輸出端相連,用于鎖存所述置頂后的數(shù)據(jù)的高r位, r = (q-1) X8。
6.一種從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的方法,其特征在于,包括接收讀數(shù)據(jù)請求及所述讀數(shù)據(jù)請求所請求讀出的數(shù)據(jù)的數(shù)據(jù)長度;根據(jù)上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)數(shù)及所述數(shù)據(jù)長度得到向FIFO發(fā)出讀使能的時(shí)鐘數(shù),向所述FIFO輸出讀使能信號(hào);當(dāng)所述數(shù)據(jù)長度大于q減1個(gè)字節(jié),則將q作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出,并且將所述數(shù)據(jù)長度減去q后的差值作為下一時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)暫存,當(dāng)所述數(shù)據(jù)長度不為0且小于等于q減1,則將所述數(shù)據(jù)長度作為當(dāng)前時(shí)鐘輸出的數(shù)據(jù)的有效字節(jié)數(shù)輸出;q為自然數(shù);將所述FIFO在所述讀使能信號(hào)觸發(fā)下輸出的數(shù)據(jù)添加到上一時(shí)鐘鎖存的數(shù)據(jù)的有效字節(jié)后,當(dāng)所述數(shù)據(jù)長度大于q減1,則將添加得到的數(shù)據(jù)中從最高位開始的q個(gè)字節(jié)作為讀出的數(shù)據(jù)輸出,并將所述添加得到的數(shù)據(jù)中其余的有效字節(jié)鎖存;當(dāng)所述數(shù)據(jù)長度不為 0且小于等于q減1,則將所述添加得到的數(shù)據(jù)中的有效字節(jié)作為讀出的數(shù)據(jù)輸出。
7. 一種先進(jìn)先出FIFO存儲(chǔ)器,包括FIFO,其特征在于,還包括上述權(quán)利要求1或2所述的用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置,及上述權(quán)利要求5所述的從先進(jìn)先出FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置,所述寫入數(shù)據(jù)處理裝置和所述讀數(shù)據(jù)處理裝置分別與所述FIFO相連。
全文摘要
本發(fā)明涉及一種用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理裝置、用于寫入任意字節(jié)數(shù)據(jù)的FIFO的寫入數(shù)據(jù)處理方法、從FIFO讀出任意字節(jié)數(shù)據(jù)的讀數(shù)據(jù)處理裝置及方法中,寫入數(shù)據(jù)處理通過對待寫入數(shù)據(jù)進(jìn)行移位、拼接處理,將所有待寫入數(shù)據(jù)中的有效字節(jié)按順序放置在一起寫入FIFO,避免了FIFO存儲(chǔ)的數(shù)據(jù)幀中產(chǎn)生氣泡,使得任意長度的數(shù)據(jù)可都寫入一塊FIFO;讀數(shù)據(jù)處理通過添數(shù)據(jù)、扣數(shù)據(jù)、頂移位及鎖存處理,能夠根據(jù)讀數(shù)據(jù)的長度要求,讀出任意字節(jié)長度的數(shù)據(jù),實(shí)現(xiàn)了采用一塊FIFO進(jìn)行任意長度的數(shù)據(jù)的存儲(chǔ),同時(shí),避免了大量消耗FPGA內(nèi)部的RAM資源。
文檔編號(hào)G06F5/01GK102508631SQ201110288030
公開日2012年6月20日 申請日期2011年9月26日 優(yōu)先權(quán)日2011年9月26日
發(fā)明者王瑤寶 申請人:福建星網(wǎng)銳捷網(wǎng)絡(luò)有限公司