本發(fā)明涉及數(shù)據(jù)流的不間斷處理,更具體的是一種數(shù)據(jù)流除法的FPGA實(shí)現(xiàn)裝置。
背景技術(shù):
由于目前現(xiàn)場(chǎng)可編程陣列(FPGA)具有工藝成熟、實(shí)現(xiàn)簡(jiǎn)單、性價(jià)比高等優(yōu)點(diǎn),所以在很多產(chǎn)品設(shè)計(jì)中被用于實(shí)現(xiàn)算法處理。
數(shù)據(jù)流的處理一般難點(diǎn)在于數(shù)據(jù)在源源不斷的流入,不管是用于加減乘除,都對(duì)建立保持時(shí)間有較高的要求,其中用于除法計(jì)算時(shí),對(duì)時(shí)間更是有嚴(yán)格要求,因?yàn)槭褂贸ㄆ饔?jì)算過(guò)程耗時(shí)太長(zhǎng),而且會(huì)占用過(guò)多資源。流水線太長(zhǎng)會(huì)導(dǎo)致版本編譯時(shí)間過(guò)長(zhǎng),性能不會(huì)達(dá)到最優(yōu)。
圖1表示的是現(xiàn)有技術(shù)中數(shù)據(jù)流的算法處理流程,包括取絕對(duì)值、擴(kuò)展位寬、統(tǒng)計(jì)第一個(gè)數(shù)值1之前數(shù)值0的個(gè)數(shù)、統(tǒng)計(jì)的個(gè)數(shù)進(jìn)行減法運(yùn)算、減法運(yùn)算后的值進(jìn)行2的冪次方乘法、冪次方乘法的結(jié)果作為除數(shù)進(jìn)行除法運(yùn)算。其中統(tǒng)計(jì)數(shù)據(jù)流的每一個(gè)數(shù)據(jù)第一個(gè)數(shù)值1之前數(shù)值0的個(gè)數(shù),在硬件語(yǔ)言中,傳統(tǒng)做法一般是用for語(yǔ)句實(shí)現(xiàn)。硬件語(yǔ)言中的for循環(huán)和C語(yǔ)言中的for循環(huán)不一樣,它表示的是硬件行為,循環(huán)幾次就是將相同的電路復(fù)制幾次。因此,循環(huán)次數(shù)越多,占用面積越大,編譯時(shí)間就會(huì)越長(zhǎng)。所以,在數(shù)據(jù)位寬較大的情況下,基于FPGA實(shí)現(xiàn)時(shí),使用for語(yǔ)句統(tǒng)計(jì)每個(gè)數(shù)據(jù)數(shù)值1之前數(shù)值0的個(gè)數(shù)并沒(méi)有優(yōu)勢(shì)。
基于for語(yǔ)句實(shí)現(xiàn),得到數(shù)值0的個(gè)數(shù)之后進(jìn)行減法運(yùn)算,并且減法運(yùn)算之后的結(jié)果再進(jìn)行2的冪次方運(yùn)算。2的冪次方運(yùn)算基于FPGA實(shí)現(xiàn),即是對(duì)數(shù)據(jù)進(jìn)行移位,但需要根據(jù)減法運(yùn)算后的結(jié)果進(jìn)行移位。減法運(yùn)算后的結(jié)果有正有負(fù),移位時(shí),一般做法是利用case語(yǔ)句實(shí)現(xiàn)。case語(yǔ)句是一種多分支選擇語(yǔ)句,但是如果分支過(guò)長(zhǎng),時(shí)鐘較快的情況下,會(huì)導(dǎo)致時(shí)序不滿足。所以減法運(yùn)算后的結(jié)果取值范圍較廣時(shí),此種實(shí)現(xiàn)方案不能體現(xiàn)優(yōu)勢(shì)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出了一種數(shù)據(jù)流除法的FPGA實(shí)現(xiàn)裝置,可以降低硬件資源消耗、縮短版本編譯時(shí)間,提高性能。
本發(fā)明技術(shù)方案提供一種基于FPGA的數(shù)據(jù)流除法運(yùn)行裝置,數(shù)據(jù)流a0,a1,…,ai-1作為輸入,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是A;數(shù)據(jù)流b0,b1,…,bi-1作為輸入,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是B;數(shù)據(jù)流c0,c1,…,ci-1作為輸出,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是C,其特征在于:包括以下模塊,
取絕對(duì)值模塊,用于求取數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)的絕對(duì)值,得到新的數(shù)據(jù)流,即為|b0|,|b1|,…,|bi-1|;
擴(kuò)展位寬模塊,用于擴(kuò)展數(shù)據(jù)流|b0|,|b1|,…,|bi-1|的位寬,得到新的數(shù)據(jù)流b′0,b′1,…,b′i-1,使數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k的位寬長(zhǎng)度與數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度相等;
比特位分組模塊,用于根據(jù)數(shù)據(jù)流a0,a1,…,ai-1當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度A和預(yù)設(shè)的分組值s,將數(shù)據(jù)流b′0,b′1,…,b′i-1當(dāng)前數(shù)據(jù)b′k按照比特位分組,以s個(gè)比特位為一組,分成A/s組;
比特位判斷模塊,用于從每組的高位開(kāi)始,判斷數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k對(duì)應(yīng)的比特位的值是否為1,
如果對(duì)應(yīng)值為1,則結(jié)合此比特位的位置信息對(duì)數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理,并將此組對(duì)應(yīng)的標(biāo)識(shí)設(shè)置為有效,同時(shí)輸出此組此比特位對(duì)應(yīng)的移位索引號(hào);
如果對(duì)應(yīng)值為0,則跳轉(zhuǎn)到此組的下一比特位進(jìn)行判斷,直到此組的最后一個(gè)比特位判斷完畢;如果此組所有比特位對(duì)應(yīng)值都為0,則此組對(duì)應(yīng)的有效標(biāo)識(shí)設(shè)置為無(wú)效,并且此組輸出的數(shù)據(jù)為0,此組比特位對(duì)應(yīng)的移位索引號(hào)也為0;
有效輸出模塊,用于按照先后順序,從第一組開(kāi)始,根據(jù)每組對(duì)應(yīng)的有效標(biāo)志是否有效,得到數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)ck;根據(jù)數(shù)據(jù)流a0,a1,…,ai-1和數(shù)據(jù)流b0,b1,…,bi-1的完整輸入,得到最終的數(shù)據(jù)流c0,c1,…,ci-1。
而且,比特位判斷模塊中,判斷當(dāng)前數(shù)據(jù)b′k對(duì)應(yīng)的比特位的值是否為1,如果對(duì)應(yīng)值為1,則結(jié)合比特位的位置信息對(duì)數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理,實(shí)現(xiàn)如下,
設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度是A,當(dāng)前數(shù)據(jù)b′k統(tǒng)計(jì)的第一個(gè)非0值之前數(shù)值0的個(gè)數(shù)為y,數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)對(duì)應(yīng)的數(shù)值0的個(gè)數(shù)y取值范圍是y大于等于0小于等于A-1,再經(jīng)過(guò)減法運(yùn)算,得到y(tǒng)的取值范圍是大于等于x-A+1小于等于x,其中x是被減數(shù),x-A+1的值是負(fù)數(shù);
假設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前第k個(gè)數(shù)據(jù)的當(dāng)前第t個(gè)比特位b′k[t的值為1,并且其屬于分組中的第j組,
如果t的值等于A-x-2,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-1位到第0位;
如果t的值大于A-x-2,t等于A-x+m,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x+m+1到第m+2位,其中m為小于等于x-2的任意正數(shù);
如果t的值小于A-x-2,比如t的值等于A-x-n,則輸出的第j組數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-n+1位到第0位,并在右側(cè)拼接n-2個(gè)數(shù)值0。
而且,數(shù)據(jù)流a0,a1,…,ai-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;數(shù)據(jù)流c0,c1,…,ci-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;
若輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)也為0;若輸入的數(shù)據(jù)流b0,b1,…,bi-1的當(dāng)前數(shù)據(jù)為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)的值等于輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)的值。
而且,數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度B小于或等于數(shù)據(jù)流a0,a1,…,ai-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度A。
本發(fā)明相應(yīng)提供一種基于FPGA的數(shù)據(jù)流除法運(yùn)行方法,數(shù)據(jù)流a0,a1,…,ai-1作為輸入,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是A;數(shù)據(jù)流b0,b1,…,bi-1作為輸入,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是B;數(shù)據(jù)流c0,c1,…,ci-1作為輸出,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)對(duì)應(yīng)的位寬長(zhǎng)度是C,包括以下步驟,
取絕對(duì)值步驟,用于求取數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)的絕對(duì)值,得到新的數(shù)據(jù)流,即為|b0|,|b1|,…,|bi-1|;
擴(kuò)展位寬步驟,用于擴(kuò)展數(shù)據(jù)流|b0|,|b1|,…,|bi-1|的位寬,得到新的數(shù)據(jù)流b′0,b′1,…,bi′-1,使數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k的位寬長(zhǎng)度與數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度相等;
比特位分組步驟,用于根據(jù)數(shù)據(jù)流a0,a1,…,ai-1當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度A和預(yù)設(shè)的分組值s,將數(shù)據(jù)流b′0,b′1,…,b′i-1當(dāng)前數(shù)據(jù)b′k按照比特位分組,以s個(gè)比特位為一組,分成A/s組;
比特位判斷步驟,用于從每組的高位開(kāi)始,判斷數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k對(duì)應(yīng)的比特位的值是否為1,
如果對(duì)應(yīng)值為1,則結(jié)合此比特位的位置信息對(duì)數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理,并將此組對(duì)應(yīng)的標(biāo)識(shí)設(shè)置為有效,同時(shí)輸出此組此比特位對(duì)應(yīng)的移位索引號(hào);
如果對(duì)應(yīng)值為0,則跳轉(zhuǎn)到此組的下一比特位進(jìn)行判斷,直到此組的最后一個(gè)比特位判斷完畢;如果此組所有比特位對(duì)應(yīng)值都為0,則此組對(duì)應(yīng)的有效標(biāo)識(shí)設(shè)置為無(wú)效,并且此組輸出的數(shù)據(jù)為0,此組比特位對(duì)應(yīng)的移位索引號(hào)也為0;
有效輸出步驟,用于按照先后順序,從第一組開(kāi)始,根據(jù)每組對(duì)應(yīng)的有效標(biāo)志是否有效,得到數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)ck;根據(jù)數(shù)據(jù)流a0,a1,…,ai-1和數(shù)據(jù)流b0,b1,…,bi-1的完整輸入,得到最終的數(shù)據(jù)流c0,c1,…,ci-1。
而且,比特位判斷模塊中,判斷當(dāng)前數(shù)據(jù)b′k對(duì)應(yīng)的比特位的值是否為1,如果對(duì)應(yīng)值為1,則結(jié)合比特位的位置信息對(duì)數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理,實(shí)現(xiàn)如下,
設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度是A,當(dāng)前數(shù)據(jù)b′k統(tǒng)計(jì)的第一個(gè)非0值之前數(shù)值0的個(gè)數(shù)為y,數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)對(duì)應(yīng)的數(shù)值0的個(gè)數(shù)y取值范圍是y大于等于0小于等于A-1,再經(jīng)過(guò)減法運(yùn)算,得到y(tǒng)的取值范圍是大于等于x-A+1小于等于x,其中x是被減數(shù),x-A+1的值是負(fù)數(shù);
假設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前第k個(gè)數(shù)據(jù)的當(dāng)前第t個(gè)比特位b′k[t的值為1,并且其屬于分組中的第j組,
如果t的值等于A-x-2,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-1位到第0位;
如果t的值大于A-x-2,t等于A-x+m,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x+m+1到第m+2位,其中m為小于等于x-2的任意正數(shù);
如果t的值小于A-x-2,比如t的值等于A-x-n,則輸出的第j組數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-n+1位到第0位,并在右側(cè)拼接n-2個(gè)數(shù)值0。
而且,數(shù)據(jù)流a0,a1,…,ai-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;數(shù)據(jù)流c0,c1,…,ci-1的每個(gè)數(shù)據(jù)為正或負(fù)或0;
若輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)也為0;若輸入的數(shù)據(jù)流b0,b1,…,bi-1的當(dāng)前數(shù)據(jù)為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)的值等于輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)的值。
而且,數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度B小于或等于數(shù)據(jù)流a0,a1,…,ai-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度A。
本發(fā)明提出的一種數(shù)據(jù)流除法的FPGA實(shí)現(xiàn)技術(shù)方案,沒(méi)有采用傳統(tǒng)算法的for語(yǔ)句和case語(yǔ)句實(shí)現(xiàn),而是采用簡(jiǎn)單步驟實(shí)現(xiàn)相同的功能。兩者相比,本發(fā)明實(shí)現(xiàn)簡(jiǎn)單,耗時(shí)短,占用硬件資源少,通用性強(qiáng),具有重要的市場(chǎng)價(jià)值。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)中數(shù)據(jù)流的算法原理圖;
圖2為本發(fā)明實(shí)施例中FPGA實(shí)現(xiàn)過(guò)程框圖;
圖3為本發(fā)明中數(shù)據(jù)流b′0,b′1,…,b′i-1當(dāng)前數(shù)據(jù)b′k比特位分組示意圖;
圖4為本發(fā)明中第t組數(shù)據(jù)的FPGA實(shí)現(xiàn)流程圖。其中t是數(shù)據(jù)分組中的第t組。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。
本發(fā)明的實(shí)施例,提出一種數(shù)據(jù)流除法的FPGA實(shí)現(xiàn)裝置。本發(fā)明跳出傳統(tǒng)for語(yǔ)句和case語(yǔ)句的實(shí)現(xiàn)方式,采用分組檢測(cè)比特位的方法,保證整個(gè)處理流程占用時(shí)間短、硬件資源少,性能達(dá)到最優(yōu)。
圖2為本發(fā)明實(shí)施例中FPGA實(shí)現(xiàn)的框圖,具體的流程說(shuō)明如下:
輸入數(shù)據(jù)流a0,a1,…,ai-1,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)的位寬長(zhǎng)度為A,對(duì)應(yīng)的值可正可負(fù)可為0。
輸入數(shù)據(jù)流b0,b1,…,bi-1,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)的位寬長(zhǎng)度為B,對(duì)應(yīng)的值可正可負(fù)可為0。
輸出數(shù)據(jù)流c0,c1,…,ci-1,其長(zhǎng)度為i,每個(gè)數(shù)據(jù)的位寬長(zhǎng)度為C,對(duì)應(yīng)的值可正可負(fù)可為0。
并且,若輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的值為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)ck的值也為0;若輸入的數(shù)據(jù)流b0,b1,…,bi-1的當(dāng)前數(shù)據(jù)bk的值為0,則輸出的數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)ck的值等于輸入的數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的值。其中,k的取值為0,1,…i-1。
數(shù)據(jù)流b0,b1,…,bi-1的當(dāng)前數(shù)據(jù)bk的值可以等于數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的值,也可以為其他值。
數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度B要小于等于數(shù)據(jù)流a0,a1,…,ai-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度A。
數(shù)據(jù)流c0,c1,…,ci-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度C的值等于A減去x。其中,x是一個(gè)小于A的任意正數(shù)。
具體實(shí)施步驟如下:
步驟(1)取絕對(duì)值:求取數(shù)據(jù)流b0,b1,…,bi-1的每個(gè)數(shù)據(jù)的絕對(duì)值,得到新的數(shù)據(jù)流,即為|b0|,|b1|,…,|bi-1|。
步驟(2)擴(kuò)展位寬:擴(kuò)展數(shù)據(jù)流|b0|,|b1|,…,|bi-1|的位寬,得到新的數(shù)據(jù)流,即為b′0,b′1,…,b′i-1,使數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k的位寬長(zhǎng)度與數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度相等。
步驟(3)比特位分組:根據(jù)數(shù)據(jù)流a0,a1,…,ai-1當(dāng)前數(shù)據(jù)ak的位寬長(zhǎng)度A和預(yù)設(shè)的分組值s,將數(shù)據(jù)流b′0,b′1,…,b′i-1當(dāng)前數(shù)據(jù)b′k按照比特位分組,實(shí)施例中s=6,以預(yù)定數(shù)值6個(gè)比特位為一組,分成A/6組。所以,若A是6的整數(shù)倍,則最后一組有6個(gè)比特位;否則,最后一組少于6個(gè)比特位。
步驟(4)比特位判斷:從每組的高位開(kāi)始,判斷數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k對(duì)應(yīng)的比特位的值是否為1。
如果對(duì)應(yīng)值為1,則結(jié)合此比特位的位置信息對(duì)數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理,并將此組對(duì)應(yīng)的標(biāo)識(shí)設(shè)置為有效,同時(shí)輸出此組此比特位對(duì)應(yīng)的移位索引號(hào),也就是數(shù)據(jù)流b′0,b′1,…,b′i-1當(dāng)前數(shù)據(jù)b′k的第一個(gè)非0值之前數(shù)值0的個(gè)數(shù)進(jìn)行減法運(yùn)算后的結(jié)果,并結(jié)束判斷;
如果對(duì)應(yīng)值為0,則跳轉(zhuǎn)到此組的下一比特位進(jìn)行判斷,直到此組的最后一個(gè)比特位判斷完畢;如果此組所有比特位對(duì)應(yīng)值都為0,則此組對(duì)應(yīng)的有效標(biāo)識(shí)設(shè)置為無(wú)效,并且此組輸出的數(shù)據(jù)為0,此組比特位對(duì)應(yīng)的移位索引號(hào)也為0;
針對(duì)上述數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理的具體實(shí)現(xiàn)方式,舉例說(shuō)明:假設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)位寬長(zhǎng)度是A,當(dāng)前數(shù)據(jù)b′k統(tǒng)計(jì)的第一個(gè)非0值之前數(shù)值0的個(gè)數(shù)為y,從整個(gè)數(shù)據(jù)流的方向考慮,根據(jù)算法原理,數(shù)據(jù)流b′0,b′1,…,b′i-1的每個(gè)數(shù)據(jù)對(duì)應(yīng)的數(shù)值0的個(gè)數(shù)y取值范圍是y大于等于0小于等于A-1,再經(jīng)過(guò)減法運(yùn)算,得到y(tǒng)的取值范圍是大于等于x-A+1小于等于x,其中x是被減數(shù),x-A+1的值是負(fù)數(shù)。假設(shè)數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前第k個(gè)數(shù)據(jù)的當(dāng)前第t個(gè)比特位b′k[t的值為1,并且其屬于分組中的第j組,以數(shù)值A(chǔ)-x-2為分界線,如果t的值等于A-x-2,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-1位到第0位;如果t的值大于A-x-2,比如t的值等于A-x+m,則輸出的第j組的數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x+m+1到第m+2位,其中m為小于等于x-2的任意正數(shù);如果t的值小于A-x-2,比如t的值等于A-x-n,則輸出的第j組數(shù)據(jù)為截取數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前第k個(gè)數(shù)據(jù)ak的第A-x-n+1位到第0位,并在右側(cè)拼接n-2個(gè)數(shù)值0,其中第A-x-n+1位到第0位作為輸出數(shù)據(jù)的高位,右側(cè)拼接的n-2個(gè)數(shù)值0作為輸出數(shù)據(jù)的低位,n為大于等于A-x的任意正數(shù)。
針對(duì)上述數(shù)據(jù)流a0,a1,…,ai-1的當(dāng)前數(shù)據(jù)ak進(jìn)行截位和拼接處理的舉例說(shuō)明,當(dāng)t的值等于A-x-2時(shí),此組此比特位對(duì)應(yīng)的索引號(hào)為0;當(dāng)t的值大于A-x-2,比如t的值等于A-x+m時(shí),此組此比特位對(duì)應(yīng)的索引號(hào)為m+2,此值為正數(shù);當(dāng)t的值小于A-x-2,比如t的值等于A-x-n時(shí),此組此比特位對(duì)應(yīng)的索引號(hào)為2-n,此值為負(fù)數(shù)。具體實(shí)施時(shí),上述的t、A、x、m、n的值均為已知固定值,所以此組輸出的有效數(shù)據(jù)以及此組此比特位對(duì)應(yīng)的索引號(hào)也均為固定值。
步驟(5)有效輸出:每組完成判斷時(shí)間相同。判斷完成后,按照先后順序,從第一組開(kāi)始,根據(jù)每組對(duì)應(yīng)的有效標(biāo)志是否有效,得到數(shù)據(jù)流c0,c1,…,ci-1的當(dāng)前數(shù)據(jù)ck。根據(jù)數(shù)據(jù)流a0,a1,…,ai-1和數(shù)據(jù)流b0,b1,…,bi-1的完整輸入,得到最終的數(shù)據(jù)流c0,c1,…,ci-1。
上述步驟(3)中描述的是按照6個(gè)比特位分為一組,可以是5個(gè)比特位、也可以是7個(gè)、8個(gè)比特位、甚至是其他值。具體實(shí)施時(shí),主要是在滿足時(shí)序設(shè)計(jì)的前提下,根據(jù)數(shù)據(jù)的位寬長(zhǎng)度制定分組值。
圖3為本發(fā)明中數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k比特位分組示意圖。數(shù)據(jù)流b′0,b′1,…,b′i-1的當(dāng)前數(shù)據(jù)b′k,其位寬長(zhǎng)度是A,按6個(gè)比特位分為一組,可以分成A/6組,分別為b′k[A-2],…,b′k[A-6]…..b′k[t],…,b′k[t-5]………b′k[1],b′k[0],b′k[A-1]無(wú)需處理。舉例說(shuō)明:
假設(shè)A的值為40,按照6個(gè)比特為一組,則可以分成7組,并且第7組只有4個(gè)比特位。即b′k[38]、b′k[37]、b′k[36]、b′k[35]、b′k[34]5個(gè)比特位作為第一組,因?yàn)樽罡呶粺o(wú)需判斷;b′k[33]、b′k[32]、b′k[31]、b′k[30]、b′k[29]、b′k[28]6個(gè)比特位作為第二組;以此類推,b′k[3]、b′k[2]、b′k[1]、b′k[0]4個(gè)比特位作為第七組。
圖3以及舉例說(shuō)明都是按照6個(gè)比特位作為一組分配,實(shí)施時(shí)也可以按照5個(gè)、7個(gè)、8個(gè)比特位作為一組分配,具體可以視情況而定。比如上面的舉例說(shuō)明中,數(shù)據(jù)位寬長(zhǎng)度是40,在滿足時(shí)序要求的情況下,可以按照8個(gè)比特位作為一組,分成5組。
圖4為本發(fā)明中第t組數(shù)據(jù)的FPGA實(shí)現(xiàn)流程圖。其中t是數(shù)據(jù)分組中的第t組。判斷流程如下:
(1)判斷b′k[t是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,否則跳轉(zhuǎn)到步驟(2);
(2)判斷b′k[t-1]是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,否則跳轉(zhuǎn)到步驟(3);
(3)判斷b′k[t-2]是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,否則跳轉(zhuǎn)到步驟(4);
(4)判斷b′k[t-3]是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,否則跳轉(zhuǎn)到步驟(5);
(5)判斷b′k[t-4]是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,否則跳轉(zhuǎn)到步驟(6);
(6)判斷b′k[t-5]是否為1,若為1,則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的有效值,結(jié)束判斷;否則輸出參數(shù)t_valid_flag、t_shift_index、t_shift_data的無(wú)效值,結(jié)束判斷。
其中,t_valid_flag、t_shift_index、t_shift_data三個(gè)參數(shù)的第一個(gè)字母t代表對(duì)應(yīng)的組號(hào),比如第一組是first_valid_flag、第二組是second_valid_flag。t_valid_flag指的是第t組數(shù)據(jù)輸出是否有效,如果值為1,則表示有效;反之,則表示無(wú)效。t_shift_index指的是第t組某個(gè)比特位對(duì)應(yīng)的移位索引號(hào),即當(dāng)前數(shù)據(jù)的第一個(gè)非0值之前數(shù)值0的個(gè)數(shù)。t_shift_data指的是第t組某個(gè)比特位對(duì)應(yīng)的經(jīng)過(guò)截位和拼接處理后的輸出數(shù)據(jù)。
每組完成判斷時(shí)間相同。判斷完成后,按照先后順序,從第一組開(kāi)始,根據(jù)每組對(duì)應(yīng)的參數(shù)t_valid_flag是否有效,決定最終輸出的有效數(shù)據(jù)以及移位索引號(hào)。整個(gè)功能FPGA實(shí)現(xiàn)只需2個(gè)時(shí)鐘周期即可完成。
本發(fā)明的實(shí)施例,提出一種數(shù)據(jù)流除法的FPGA實(shí)現(xiàn)裝置。在數(shù)據(jù)流b0,b1,…,bi-1的位寬小于等于數(shù)據(jù)流a0,a1,…,ai-1的位寬的前提下,數(shù)據(jù)位寬可以任意配置,并且數(shù)據(jù)流b0,b1,…,bi-1的內(nèi)容可以為一固定值,也可以等于數(shù)據(jù)流a0,a1,…,ai-1的值,具有可配性。此發(fā)明輸入數(shù)據(jù)靈活,整個(gè)功能實(shí)現(xiàn)過(guò)程只占用2個(gè)時(shí)鐘周期,大大減少了寄存器、存儲(chǔ)器等存儲(chǔ)資源,提高了數(shù)據(jù)處理速率。
本發(fā)明中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明進(jìn)行舉例說(shuō)明。任何熟悉該技術(shù)的技術(shù)人員在本發(fā)明做揭露的技術(shù)范圍內(nèi),都可輕易得到其變化或替換,因此本發(fā)明保護(hù)范圍都應(yīng)涵蓋在由權(quán)利要求書(shū)所限定的保護(hù)范圍之內(nèi)。