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