本發(fā)明涉及一種針對矩陣與向量乘運算的低密度奇偶校驗碼(Low Density Parity Check Code,LDPC)編碼器及其方法,特別地,涉及用于優(yōu)化LDPC編碼過程的矩陣與向量乘法單元
背景技術(shù):
LDPC碼廣泛應(yīng)用于高速無線通信系統(tǒng)的信道編碼,并將在高性能固態(tài)存儲系統(tǒng)中應(yīng)用。在《Efficient encoding of low-density parity-check codes》([J].IEEE Trans Information Theory,2001,47(2):638–656)中提出了RU編碼算法,將校驗矩陣變換為準(zhǔn)下三角矩陣,利用Gauss法求解方程以完成編碼。而在《在線可編程QC-LDPC碼高速編碼器結(jié)構(gòu)》(清華大學(xué)學(xué)報(自然科學(xué)版)2009年第49卷第7期1025-1018頁)提出了支持可變參數(shù)的準(zhǔn)循環(huán)低密度奇偶校驗碼編碼器結(jié)構(gòu)。
技術(shù)實現(xiàn)要素:
現(xiàn)有的LDPC編碼技術(shù)從結(jié)構(gòu)上看,功能模塊和控制單元較多,較為復(fù)雜,軟硬件功能模塊定義不清,各個功能模塊的利用率不高,編碼的吞吐率不高。而且不夠靈活,不能適用于結(jié)構(gòu)不同的準(zhǔn)循環(huán)校驗矩陣。
本發(fā)明簡化了LDPC編碼器的結(jié)構(gòu),將繁瑣的控制流簡化為指令的控制,將矩陣求逆等復(fù)雜運算改為線下軟件工作,提高了各個功能部件的運行效率,提高吞吐率,可以適用于不同結(jié)構(gòu)和碼率的準(zhǔn)循環(huán)校驗矩陣的編碼。
本發(fā)明的一個目的在于高效地實現(xiàn)用于LDPC編碼的矩陣與向量乘計算單元。將計算過程在硬件與可編程微碼指令之前合理分配。
根據(jù)本發(fā)明的一個方面,提供了一種矩陣與向量乘運算單元,包括:移位單元、異或單元和通用寄存器,其中,移位單元,用于將向 量移位指定位數(shù),以得到移位結(jié)果;異或單元,與所述移位單元和所述通用寄存器相連接,用于接收來自所述移位單元的所述移位結(jié)果,并將所述移位結(jié)果與所述通用寄存器中的存儲值相異或,以得到異或結(jié)果;通用寄存器,用于保存來自所述異或單元的所述異或結(jié)果。
根據(jù)本發(fā)明的一個實施方式,進一步包括:指令存儲器,用于存儲指令,所述指令包括第一指令,其中,所述第一指令指示所述移位單元將向量移位指定位數(shù)和指示所述異或單元將所述移位結(jié)果與所述存儲值相異或。
根據(jù)本發(fā)明的一個實施方式,所述移位單元,響應(yīng)于執(zhí)行所述指令存儲器中的第一指令,對所述第一指令所指定的向量移位,并將移位結(jié)果提供給所述異或單元,其中移位的位數(shù)由所述第一指令指定;所述異或單元,響應(yīng)于執(zhí)行所述指令存儲器中的第一指令,將所述移位結(jié)果與所述通用寄存器的值進行異或操作,并將異或結(jié)果存儲到通用寄存器中。
根據(jù)本發(fā)明的一個實施方式,進一步包括:數(shù)據(jù)存儲器,與所述移位單元和所述通用寄存器相連接,用于存儲向量。
根據(jù)本發(fā)明的一個實施方式,所述指令包括第二指令,響應(yīng)于執(zhí)行所述指令存儲器中的所述第二指令,將所述第二指令所指定的所述數(shù)據(jù)存儲器中的向量加載到所述通用寄存器。
根據(jù)本發(fā)明的一個實施方式,所述指令包括第三指令,響應(yīng)于執(zhí)行所述指令存儲器中的所述第三指令,存儲所述通用寄存器中的值。
根據(jù)本發(fā)明的一個實施方式,進一步包括源寄存器,與所述數(shù)據(jù)存儲器和所述移位單元相連接,用于接收來自所述數(shù)據(jù)存儲器的向量并將向量提供給所述移位單元。
根據(jù)本發(fā)明的一個實施方式,所述第一指令通過尋址方式在所述源寄存器或所述數(shù)據(jù)存儲器中尋找到將要加載的向量,將所述向量傳送給所述移位單元。
根據(jù)本發(fā)明的一個實施方式,響應(yīng)于執(zhí)行所述指令存儲器中的所述第二指令,將所述第二指令所指定的向量加載到所述源寄存器。
根據(jù)本發(fā)明的一個實施方式,進一步包括控制單元,與所述指令存儲器相連接,用于從所述指令存儲器中讀取指令,并依據(jù)所述指令控制所述數(shù)據(jù)存儲器、所述移位單元、所述異或單元、通用寄存器和/或源寄存器。
根據(jù)本發(fā)明的一個實施方式,其中所述第一指令為Shift_XOR指令。
根據(jù)本發(fā)明的一個實施方式,其中所述第二指令為LOAD指令。
根據(jù)本發(fā)明的一個實施方式,其中所述第三指令為STORE指令。
根據(jù)本發(fā)明的第二方面,提供了一種矩陣與向量乘運算方法,包括以下步驟:初始化通用寄存器;通過連續(xù)執(zhí)行多條第一指令來重復(fù)執(zhí)行將向量移位指定位數(shù)并與通用寄存器的內(nèi)容相異或并將異或結(jié)果存儲在所述通用寄存器中的操作,其中所述第一指令的每一條指示所述指定位數(shù);存儲通用寄存器中的值。
根據(jù)本發(fā)明的第二方面的一個實施方式,進一步包括:從數(shù)據(jù)存儲器取得向量。
根據(jù)本發(fā)明的第二方面的一個實施方式,進一步包括:將向量加載到源寄存器。
根據(jù)本發(fā)明的第二方面的一個實施方式,進一步包括:將通用寄存器中的值存儲到數(shù)據(jù)存儲器。
根據(jù)本發(fā)明的第三方面,提供了一種矩陣與向量乘運算設(shè)備,包括:用于初始化通用寄存器的裝置;用于通過連續(xù)執(zhí)行多條第一指令來重復(fù)執(zhí)行將向量移位指定位數(shù)并與通用寄存器的內(nèi)容相異或并將異或結(jié)果存儲在所述通用寄存器中的操作的裝置,其中所述第一指令的每一條指示所述指定位數(shù);用于存儲通用寄存器中的值的裝置。
根據(jù)本發(fā)明的第四方面,提供了一種用于LDPC編碼的矩陣與向量乘運算方法,包括以下步驟:指示加載向量;指示將向量移位指定位數(shù)以得到移位結(jié)果,并將移位結(jié)果與存儲值相異或以得到異或結(jié)果;指示存儲異或結(jié)果。
根據(jù)本發(fā)明的第五方面,提供了一種用于LDPC編碼的矩陣與向量乘運算設(shè)備,包括:用于指示加載向量的裝置;用于指示將向量移位指定位數(shù)以得到移位結(jié)果以及將移位結(jié)果與存儲值相異或以得到異或結(jié)果的裝置;用于指示存儲異或結(jié)果的裝置。
根據(jù)本發(fā)明的第六方面,提供一種包含計算機程序代碼的計算機程序,當(dāng)被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行根據(jù)本發(fā)明第二方面提供的矩陣與向量乘運算方法或者根據(jù)本發(fā)明第四方面提供的用于LDPC編碼的矩陣與向量乘運算方法。
根據(jù)本發(fā)明的第七方面,提供一種包括程序代碼的程序,當(dāng)被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述計程序代碼使所述存儲設(shè)備執(zhí)行根據(jù)本發(fā)明第二方面提供的矩陣與向量乘運算方法或者根據(jù)本發(fā)明第四方面提供的用于LDPC編碼的矩陣與向量乘運算方法。
本發(fā)明所述用于LDPC編碼的矩陣與向量乘運算單元及其方法簡化了LDPC編碼器的結(jié)構(gòu),將繁瑣的控制流簡化為指令的控制,提高了各個功能部件的運行效率,提高吞吐率。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。其中在附圖中,參考數(shù)字之后的字母標(biāo)記指示多個相同的部件,當(dāng)泛指這些部件時,將省略其最后的字母標(biāo)記。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖;
圖2示出了根據(jù)本發(fā)明一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖;
圖3示出了根據(jù)本發(fā)明另一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖;
圖4示出了根據(jù)本發(fā)明另一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖;
圖5示出了根據(jù)本發(fā)明另一個方面的用于LDPC編碼的矩陣與向量乘運算方法的流程圖;
圖6示出了根據(jù)本發(fā)明另一個方面的用于LDPC編碼的矩陣與向量乘運算設(shè)備的結(jié)構(gòu)示意圖。
在附圖中,使用相同或類似的標(biāo)號來指代相同或類似的元素。
具體實施方式
下面結(jié)合附圖和具體的實施方式對本發(fā)明作進一步的描述。
在LDPC編碼過程中,矩陣M與向量S的乘法操作是重要操作。矩陣M是n個循環(huán)移位單位矩陣的和矩陣。矩陣M與向量S的乘法操作可分解為對向量S的移位操作,以及對移位結(jié)果的模2和。根據(jù)本發(fā)明LDPC編碼器中,通過執(zhí)行指令序列來實現(xiàn)矩陣與向量S的乘法。進一步地,在進行LDPC編碼過程中,涉及多次矩陣與向量乘法操作。提供分別對應(yīng)于多個矩陣與向量乘法操作的多段指令序列,以及提供對應(yīng)于多個矩陣與向量乘法的矩陣M與向量S,并通過執(zhí)行多段指令序列得到中間和/或最終LDPC編碼計算結(jié)果。在多段指令序列的控制下,根據(jù)本發(fā)明實施例的矩陣與向量乘運算單元實現(xiàn)了多個矩陣與向量乘法運算,并實現(xiàn)LDPC編碼。因而根據(jù)本發(fā)明實施例的矩陣與向量乘運算單元也是一種LDPC編碼器。
圖1示出了根據(jù)本發(fā)明一個方面的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖。如圖1所示,矩陣與向量乘運算單元,包括:移位單元140、異或單元160和通用寄存器150,其中,移位單元140用于將向量移位指定位數(shù),以得到移位結(jié)果,在這里需要說明的是,移位單元140能夠移位的目標(biāo)對象可以是任意類型的數(shù)據(jù),例如可以為二進制數(shù)據(jù)、標(biāo)量、向量等。在根據(jù)本發(fā)明的實施例中,移位單元140移位的目標(biāo)對象為向量,通過對向量進行移位得到移位結(jié)果。
異或單元160分別與移位單元140和通用寄存器150相連接,用于接收來自移位單元140中的移位結(jié)果,并將移位結(jié)果與通用寄存器150 中的存儲值相異或,以得到異或結(jié)果。異或單元160接收來自移位單元140中的移位結(jié)果,在這里需要說明的是,移位結(jié)果為移位單元140對任意數(shù)據(jù)進行移位后得到的移位結(jié)果,任意數(shù)據(jù)例如可以為二進制數(shù)據(jù),可以為向量,可以為標(biāo)量等。本發(fā)明中移位結(jié)果為移位單元140對向量進行移位后得到的移位結(jié)果,異或單元160將移位結(jié)果與通用寄存器150中的存儲值相異或,以得到異或結(jié)果。本發(fā)明中通用寄存器150中的存儲值為根據(jù)矩陣與向量乘運算的原理所得到的異或數(shù)值,在下文中將詳細描述。
通用寄存器150用于保存來自異或單元160中的異或結(jié)果,并傳送異或結(jié)果。異或運算相當(dāng)于比特的模2和,向量的循環(huán)移位操作相當(dāng)于循環(huán)移位單位矩陣與向量的乘法。因而通過控制移位與異或操作的操作數(shù)與操作過程,在通用寄存器150中將得到矩陣與向量乘運算的最終結(jié)果。通用寄存器150中的計算結(jié)果可以存儲在存儲器中,并用于進一步的計算。
圖2示出了根據(jù)本發(fā)明一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖。
根據(jù)本發(fā)明的一個實施方式,如圖2所示,用于LDPC編碼的矩陣與向量乘運算單元進一步包括指令存儲器120,指令存儲器120用于存儲指令,指令的數(shù)量可以有多條,指令的種類可以有多種。
根據(jù)本發(fā)明的矩陣與向量乘運算單元通過執(zhí)行指令序列完成LDPC編碼或者LDPC編碼中的矩陣與向量乘法操作。在執(zhí)行指令時,移位單元140可對向量執(zhí)行指定位數(shù)的移位操作,移位結(jié)果被發(fā)送給異或單元160,其中移位的位數(shù)由指令指定。在執(zhí)行指令時,可將數(shù)據(jù)加載到通用寄存器150,或存儲通用寄存器150的數(shù)據(jù)。在執(zhí)行指令時,異或單元160可對通用寄存器150的數(shù)據(jù)與移位單元140的輸出數(shù)據(jù)進行異或操作,并將結(jié)果存儲在通用寄存器150中。通過執(zhí)行指令存儲器120中的多條指令,完成LDPC編碼過程中的矩陣與向量乘運算。
圖3示出了根據(jù)本發(fā)明另一個實施方式的用于LDPC編碼的矩陣 與向量乘運算單元的結(jié)構(gòu)示意圖。
根據(jù)本發(fā)明的一個實施方式,如圖3所示,用于LDPC編碼的矩陣與向量乘運算單元進一步包括數(shù)據(jù)存儲器110,與移位單元140和通用寄存器150(又稱為Rd寄存器)相連接。響應(yīng)于執(zhí)行指令,可將數(shù)據(jù)存儲器110的指定位置的數(shù)據(jù)加載到通用寄存器150,或者將通用寄存器150的內(nèi)容存儲到數(shù)據(jù)存儲器110的指定位置。響應(yīng)于執(zhí)行指令,移位單元140對數(shù)據(jù)存儲器110的指定位置的數(shù)據(jù)進行移位,以及將移位單元140的移位結(jié)果與通用寄存器150的內(nèi)容求異或,并將異或結(jié)果存儲在通用寄存器150中。
根據(jù)本發(fā)明的一個實施方式,響應(yīng)于執(zhí)行指令存儲器120中的指令,將指令所指定的數(shù)據(jù)存儲器110中的向量加載到通用寄存器150。在一個例子中,為了將通用寄存器150初始狀態(tài)設(shè)置為0,通過執(zhí)行指令,將數(shù)字“零”或數(shù)據(jù)存儲器110中存儲了數(shù)字“零”的存儲空間的內(nèi)容加載到通用寄存器150。
根據(jù)本發(fā)明的一個實施方式,響應(yīng)于執(zhí)行指令,將通用寄存器150的內(nèi)容存儲到數(shù)據(jù)存儲器110。
在表1中展示了根據(jù)本發(fā)明實施例的指令列表。通過組合這些指令,使得通過指令序列的執(zhí)行來實現(xiàn)矩陣與向量乘法或LDPC編碼。因而根據(jù)本發(fā)明實施例的矩陣與向量乘運算單元也是一種LDPC編碼器。指令序列存儲在指令存儲器120中。
在LDPC編碼器執(zhí)行LOAD指令時,依LOAD指令中描述的參數(shù),將數(shù)據(jù)從數(shù)據(jù)存儲器110中加載到通用寄存器150。LOAD指令加載的數(shù)據(jù)可以是向量S。LOAD指令可使用多種尋址方式。在一個例子中,LOAD指令中描述的參數(shù)指示要加載的數(shù)據(jù)在數(shù)據(jù)存儲器110中的位置。在又一個例子中,LOAD指令中描述的參數(shù)指示從寄存器中獲得要加載的數(shù)據(jù)在數(shù)據(jù)存儲器110中的地址。LOAD指令中描述的參數(shù)還可以指示相對于基地址的偏移值。
在LDPC編碼器執(zhí)行STORE指令時,依STORE指令中描述的參數(shù),將通用寄存器150中的數(shù)據(jù)存儲到數(shù)據(jù)存儲器110。STORE 指令存儲的數(shù)據(jù)可以是對向量S執(zhí)行移位和/或異或后的結(jié)果。STORE指令可使用多種尋址方式。
在LDPC編碼器執(zhí)行SHIFT_XOR指令時,依SHIFT_XOR指令中描述的參數(shù),由移位單元140將數(shù)據(jù)存儲器中的指定數(shù)據(jù)移位指定位數(shù),將移位結(jié)果送入異或單元160,由異或單元160將該移位結(jié)果與通用寄存器150的值相異或,并將結(jié)果存儲到通用寄存器150中。
表1指令列表
在根據(jù)圖3所示的本發(fā)明的又一實施例中,LDPC編碼器還能夠執(zhí)行NOP指令。NOP指令代表空操作,用于避免LDPC編碼器指令執(zhí)行過程中的資源訪問沖突。
圖4示出了根據(jù)本發(fā)明另一個實施方式的用于LDPC編碼的矩陣與向量乘運算單元的結(jié)構(gòu)示意圖。
根據(jù)本發(fā)明的一個實施方式,如圖4所示,用于LDPC編碼的矩陣與向量乘運算單元包括數(shù)據(jù)存儲器110、指令存儲器120、移位單元140、通用寄存器(又稱為Rd(目的)寄存器)150、異或單元160和通用寄存器(又稱為Rs(源)寄存器)130。源寄存器130與數(shù)據(jù)存儲器110和移位單元140相連接,用于接收來自數(shù)據(jù)存儲器110的向量并將向量提供給移位單元140。
根據(jù)本發(fā)明的一個實施方式,響應(yīng)于執(zhí)行指令存儲器120中的指令,將指令所指定的數(shù)據(jù)加載到源寄存器130。在根據(jù)本發(fā)明的例子中,加載到源寄存器130的數(shù)據(jù)為矩陣與向量乘操作中作為乘數(shù)的向量。
在表2中展示了根據(jù)本發(fā)明實施例的指令列表。通過組合這些指令,使得通過指令序列的執(zhí)行來實現(xiàn)矩陣與向量乘法或LDPC編碼。因而根據(jù)本發(fā)明圖4所展示的實施例的矩陣與向量乘運算單元也是 一種LDPC編碼器。指令序列存儲在指令存儲器120中。
在LDPC編碼器執(zhí)行LOAD指令時,依LOAD指令中描述的參數(shù),將數(shù)據(jù)從數(shù)據(jù)存儲器110中加載到源寄存器130或目的寄存器150。LOAD指令加載的數(shù)據(jù)可以是矩陣與向量乘法操作中作為乘數(shù)的向量。LOAD指令可使用多種尋址方式。在一個例子中,LOAD指令中描述的參數(shù)指示要加載的數(shù)據(jù)在數(shù)據(jù)存儲器110中的位置。在又一個例子中,LOAD指令中描述的參數(shù)指示從寄存器中獲得要加載的數(shù)據(jù)在數(shù)據(jù)存儲器110中的地址。LOAD指令中描述的參數(shù)還可以指示相對于基地址的偏移值。
在LDPC編碼器執(zhí)行STORE指令時,依STORE指令中描述的參數(shù),將目的寄存器150中的數(shù)據(jù)存儲到數(shù)據(jù)存儲器110。STORE指令存儲的數(shù)據(jù)可以是對向量執(zhí)行移位和/或異或后的結(jié)果。STORE指令可使用多種尋址方式。
在LDPC編碼器執(zhí)行SHIFT_XOR指令時,依SHIFT_XOR指令中描述的參數(shù),由移位單元140將源寄存器130中的內(nèi)容移位指定位數(shù),將移位結(jié)果送入異或單元160,由異或單元160將該移位結(jié)果與目的寄存器150的值相異或,并將結(jié)果存儲到目的寄存器150中。
表2指令列表
在根據(jù)圖4所示的本發(fā)明的又一實施例中,LDPC編碼器還能夠執(zhí)行NOP指令。NOP指令代表空操作,用于避免LDPC編碼器指令執(zhí)行過程中的資源訪問沖突。
下面通過具體實施例詳細描述根據(jù)指令序列,LDPC編碼器所實現(xiàn)的矩陣與向量乘的運算。
在LDPC編碼過程中,矩陣M與向量S的乘法操作是重要操作。矩陣M是n個循環(huán)移位單位矩陣的和矩陣。循環(huán)移位單位矩陣是單位矩陣經(jīng)循環(huán)移位得到的矩陣。例如,式(1)為循環(huán)移位單位矩陣的例 子,式(1)的循環(huán)移位單位矩陣是8*8的單位矩陣循環(huán)右移一位得到的矩陣。
由于M是n個循環(huán)移位單位矩陣的和矩陣。令M=I1+I2+…+In,其中Im(1≤m≤n)是循環(huán)移位單位矩陣,m與n均為正整數(shù)。
矩陣M與向量S的乘法操作M*S=(I1+I2+…+In)*S。單位循環(huán)移位單位矩陣Im(1≤m≤n)與向量S的乘法操作可轉(zhuǎn)換為對向量S的移位操作。而(I1+I2+…+In)*S可轉(zhuǎn)換為對向量S的移位,以及對移位結(jié)果的模2和。即(I1+I2+…+In)*S可以分解為shift(S,d1)xor shift(S,d2)xor shift(S,d3)…xor shift(S,dn),其中shift(S,dm)表示對向量S移位dm位;dm表示從單位陣I循環(huán)右移dm位得到循環(huán)移位單位矩陣Im;XOR表示異或操作??梢?,矩陣與向量相乘(M*S)可轉(zhuǎn)換為一系列的移位與異或操作。
下面通過具體的例子對根據(jù)本發(fā)明的實施例計算矩陣M與向量S的乘法操作的過程進行說明。
實施例1
M為8*8的循環(huán)移位單位矩陣的和矩陣,S為8*1的向量,矩陣M如(2)式,向量S如(3)式:
S=(1 0 0 1 0 0 1 0)' (3)
在(2)式中,M=I1+I2+I3,其中I1是單位陣I循環(huán)右移1位得到循環(huán)移位單位矩陣,I2是單位陣I循環(huán)右移3位得到循環(huán)移位單位矩陣,I3是單位陣I循環(huán)右移7位得到循環(huán)移位單位矩陣。則M*S=I1*S XOR I2*S XOR I3*S的計算過程可以分解為如下操作:Shift(S,1)xor Shift(S,3)xor Shift(S,7)。而這些操作可通過在如圖3的LDPC編碼器中執(zhí)行存儲在指令存儲器120中的下列指令序列來實現(xiàn):
①LOAD Rd,0;
②Shift_XOR[ADDR1],1;
③Shift_XOR[ADDR1],3;
④Shift_XOR[ADDR1],7;
⑤STORE ADDR2,Rd。
如圖3所示,用于LDPC編碼器的矩陣與向量乘運算單元,包括:數(shù)據(jù)存儲器110、指令存儲器120、移位單元140、通用寄存器(Rd)150和異或單元160,數(shù)據(jù)存儲器110存儲矩陣M和向量S,數(shù)據(jù)存儲器110分別與移位單元140和通用寄存器150相連接,移位單元140與異或單元160相連接,異或單元160與通用寄存器150相連接。
執(zhí)行指令①時,,加載給通用寄存器150的向量值為0,即將通用寄存器150初始化為0。
執(zhí)行指令②時,移位單元140將數(shù)據(jù)存儲器110中地址為ADDR1處存儲的向量S移位1位,異或單元160將移1位的向量與通用寄存器150(初始值為0)的值相異或,異或結(jié)果存儲在通用寄存器150中。此時通用寄存器150中的值為I1*S。
執(zhí)行指令③時,移位單元140將數(shù)據(jù)存儲器110中地址為ADDR1處存儲的向量S移位3位,異或單元160將移3位的向量S與通用寄存器150中存儲的執(zhí)行完指令②后的值相異或,將異或結(jié)果存儲在通用寄存器150中。此時通用寄存器150中的值為I1*S XOR I2*S。
執(zhí)行指令④時,移位單元140將數(shù)據(jù)存儲器110中地址為ADDR1處存儲的向量S移位7位,異或單元160將移7位的向量S與通用寄 存器150中存儲的執(zhí)行完指令③后的值相異或,將異或結(jié)果存儲在通用寄存器150中。此時,通用寄存器250中的值為I1*S XOR I2*S XOR I3*S,即M*S的計算結(jié)果。
執(zhí)行指令⑤時,將執(zhí)行完指令④后的通用寄存器150中的值存儲在地址為ADDR2的存儲位置。
在根據(jù)本發(fā)明的實施例1中,為計算矩陣與向量乘M*S,分析矩陣M的構(gòu)成,將矩陣M分別為若干循環(huán)移位單位矩陣的和,對于每個循環(huán)移位單位矩陣與向量S的乘法操作,生成一條指令Shift_XOR[ADDR],offset,其中offset值代表單位陣I循環(huán)右移offset位得到該循環(huán)移位單位矩陣,而[ADDR]表示該指令的操作對象是數(shù)據(jù)存儲器中的存儲位置為ADDR的數(shù)據(jù)。以及生成初始化通用寄存器(Rd)的指令,與保存計算結(jié)果的指令。在如圖3所示的LDPC編碼器中執(zhí)行所生成的指令序列(例如,上面的指令序列①-⑤),以得到矩陣與向量乘M*S的計算結(jié)果。除應(yīng)用于LDPC編碼器外,如圖3所示的根據(jù)本發(fā)明的實施例也可用于其他需要計算矩陣與向量乘法的應(yīng)用場景。
本實施例1中的LDPC編碼器涉及多次矩陣與向量乘法操作。在指令存儲器120中可存儲分別對應(yīng)于多個矩陣與向量乘法操作的多個指令,簡化了LDPC編碼器的結(jié)構(gòu),將繁瑣的控制流簡化為指令的控制,提高了各個功能部件的運行效率,提高吞吐率。
實施例2
M為8*8的循環(huán)移位單位矩陣的和矩陣,S為8*1的向量,矩陣M如(4)式,向量S如(5)式:
S=(1 0 0 1 0 0 1 0)' (5)
在(4)式中,M=I1+I2+I3,其中I1是單位陣I循環(huán)右移1位得到循環(huán)移位單位矩陣,I2是單位陣I循環(huán)右移3位得到循環(huán)移位單位矩陣,I3是單位陣I循環(huán)右移7位得到循環(huán)移位單位矩陣。則M*S=I1*S XOR I2*S XOR I3*S的計算過程可以分解為如下操作:Shift(S,1)xor Shift(S,3)xor Shift(S,7)。而這些操作可通過在如圖4的LDPC編碼器中執(zhí)行下列指令序列來實現(xiàn),其中源寄存器(Rs)130與目的寄存器(Rd)150的初始狀態(tài)為0。
1)LOAD Rs,ADDR1;
2)Shift_XOR Rs,1;
3)Shift_XOR Rs,3;
4)Shift_XOR Rs,7;
5)STORE ADDR2,Rd。
如圖4所示,用于LDPC編碼的矩陣與向量乘運算單元,包括:數(shù)據(jù)存儲器110、指令存儲器120、源寄存器(Rs)130、移位單元140、目的寄存器(Rd)150和異或單元160,數(shù)據(jù)存儲器110分別與源寄存器130和目的寄存器150相連接,源寄存器130與移位單元140相連接,移位單元140與異或單元160相連接,異或單元160與目的寄存器150相連接。
執(zhí)行指令1)時,從數(shù)據(jù)存儲器110的地址為ADDR1處取得向量S,并加載到源寄存器130中。
執(zhí)行指令2)時,通過移位單元140將源寄存器130的向量S移位1位,異或單元160將移1位的向量S與目的寄存器150(初始值為0)的值相異或,異或結(jié)果存儲在目的寄存器150中。此時目的寄存器150中的值為I1*S。
執(zhí)行指令3)時,移位單元140將源寄存器130的向量S移位3位,異或單元160將移3位的向量S與目的寄存器150中存儲的執(zhí)行完指令2)后的值相異或,將異或結(jié)果存儲在目的寄存器150中。此時目的寄存器150中的值為I1*S XOR I2*S。
執(zhí)行指令4)時,移位單元140將源寄存器130的向量S移位7位,異或單元160將移7位的向量S與目的寄存器150中存儲的執(zhí)行完指令3)后的值相異或,將異或結(jié)果存儲在目的寄存器150中。此時,目的寄存器150中的值為I1*S XOR I2*S XOR I3*S,即M*S的計算結(jié)果。
執(zhí)行指令5)時,將執(zhí)行完指令4)后的目的寄存器150中的值存儲在地址為ADDR2的存儲位置。
在根據(jù)本發(fā)明的實施例2中,為計算矩陣與向量乘M*S,分析矩陣M的構(gòu)成,將矩陣M劃分為若干循環(huán)移位單位矩陣的和,對于每個循環(huán)移位單位矩陣與向量S的乘法操作,生成一條指令:shift Rs,offset,其中offset值代表單位陣I循環(huán)右移offset位得到該循環(huán)移位單位矩陣,而Rs表示該指令的操作對象是來自源寄存器130的數(shù)據(jù)。還生成初始化源寄存器(Rs)、目的寄存器(Rd)的指令,與保存計算結(jié)果的指令。在如圖4所示的LDPC編碼器中執(zhí)行所生成的指令序列(例如,上面的指令序列1)-5)),以得到矩陣與向量乘M*S的計算結(jié)果。除應(yīng)用于LDPC編碼器外,如圖4所示的根據(jù)本發(fā)明的實施例也可用于其他需要計算矩陣與向量乘法的應(yīng)用場景。
根據(jù)本發(fā)明的一個實施方式,用于LDPC編碼器的矩陣與向量乘運算單元進一步包括控制單元,控制單元與指令存儲器120相連接,用于從指令存儲器120中讀取指令,并依據(jù)指令控制數(shù)據(jù)存儲器110、移位單元140、異或單元160、目的寄存器150和/或源寄存器130的操作。
在LDPC編碼過程中,可涉及多次矩陣與向量乘法操作。在根據(jù)本發(fā)明實施例的指令存儲器中可存儲分別對應(yīng)于多個矩陣與向量乘法操作的多組指令序列,通過執(zhí)行多組指令序列的每一組,計算相對應(yīng)的矩陣與向量乘法。在數(shù)據(jù)存儲器中存儲分別對應(yīng)于多個矩陣與向量乘法的乘數(shù)向量S以及中間和/或最終計算結(jié)果。
根據(jù)本發(fā)明的實施例簡化了LDPC編碼器的結(jié)構(gòu),將繁瑣的控制流簡化為指令的控制,提高了各個功能部件的運行效率,提高吞吐率。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供一種矩陣與向量乘運算方法,如圖5所示,包括以下步驟:初始化通用寄存器(S1000);通過連續(xù)執(zhí)行多條第一指令來重復(fù)執(zhí)行將向量移位指定位數(shù)并與通用寄存器的內(nèi)容相異或并將異或結(jié)果存儲在通用寄存器中的操作,其中第一指令的每一條指示指定位數(shù)(S2000);存儲通用寄存器中的值(S3000)。
在操作S2000時,根據(jù)SHIFT_XOR指令將向量移位指定位數(shù)以得到移位結(jié)果并將移位結(jié)果與通用寄存器150中的存儲值相異或。在本發(fā)明中,移位單元140根據(jù)SHIFT_XOR指令將向量移位指定位數(shù)。
在操作S3000時,根據(jù)STORE指令存儲S3000中的異或結(jié)果。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供一種矩陣與向量乘運算設(shè)備,如圖6所示,矩陣與向量乘運算設(shè)備包括:用于初始化通用寄存器的裝置10;用于通過連續(xù)執(zhí)行多條第一指令來重復(fù)執(zhí)行將向量移位指定位數(shù)并與通用寄存器的內(nèi)容相異或并將異或結(jié)果存儲在通用寄存器中的操作的裝置20,其中第一指令的每一條指示指定位數(shù);以及用于存儲通用寄存器中的值的裝置30。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供了一種用于LDPC編碼的矩陣與向量乘運算方法,包括以下步驟:指示加載向量;指示將向量移位指定位數(shù)以得到移位結(jié)果以及將移位結(jié)果與存儲值相異或以得到異或結(jié)果;指示存儲異或結(jié)果。
根據(jù)本發(fā)明的另一個方面,本發(fā)明提供了一種用于LDPC編碼的矩陣與向量乘運算設(shè)備,包括:用于指示加載向量的裝置;用于指示將向量移位指定位數(shù)以得到移位結(jié)果以及將移位結(jié)果與存儲值相異或以得到異或結(jié)果的裝置;用于指示存儲異或結(jié)果的裝置。
根據(jù)本發(fā)明的另一個方面,本發(fā)明還提供一種包含計算機程序代碼的計算機程序,當(dāng)被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行上面所述的方法。
根據(jù)本發(fā)明的另一個方面,還提供一種包括程序代碼的程序,當(dāng)被 載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述計程序代碼使所述存儲設(shè)備執(zhí)行上面所述的方法。
本發(fā)明用于LDPC編碼的矩陣與向量乘運算單元及其方法簡化了LDPC編碼器的結(jié)構(gòu),將繁瑣的控制流簡化為指令的控制,提高了各個功能部件的運行效率,提高吞吐率。
應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以分別由包括計算機程序指令的各種裝置來實施。這些計算機程序指令可以加載到通用計算機、專用計算機或其他可編程數(shù)據(jù)控制設(shè)備上以產(chǎn)生機器,從而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令創(chuàng)建了用于實現(xiàn)一個或多個流程圖框中指定的功能的裝置。
這些計算機程序指令還可以存儲在可以引導(dǎo)計算機或其他可編程數(shù)據(jù)控制設(shè)備的計算機可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計算機可讀存儲器中的指令來制造包括用于實現(xiàn)一個或多個流程圖框中所指定功能的計算機可讀指令的制品。計算機程序指令還可以加載到計算機或其他可編程數(shù)據(jù)控制設(shè)備上以使得在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行一系列的操作步驟,從而產(chǎn)生計算機實現(xiàn)的過程,進而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令提供了用于實現(xiàn)一個或多個流程圖框中所指定功能的步驟。
因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的步驟的組合和用于執(zhí)行指定功能的程序指令裝置的組合。還應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或步驟的、基于硬件的專用計算機系統(tǒng)實現(xiàn),或由專用硬件和計算機指令的組合實現(xiàn)。
上述的不同塊、操作以及技術(shù)的至少一部分可以被執(zhí)行,通過使用硬件,控制設(shè)備執(zhí)行固件指令,控制設(shè)備執(zhí)行軟件指令,或者及其任意組合。當(dāng)采用執(zhí)行固件以及軟件指令的控制設(shè)備執(zhí)行時,軟件或固件指令可以被存儲在任意計算機可讀存儲介質(zhì)中,例如磁盤,光盤或者其他存儲介質(zhì),在RAM或者ROM或者flash存儲器,控制設(shè)備,硬盤,光盤,磁盤等等。同樣地,軟件和固件指令可以被傳輸?shù)接脩艋蛘呦到y(tǒng), 通過任意已知的或者期望的傳輸方式包括,例如,在計算機可讀盤或者其他便攜式計算機存儲機制或者通過通信媒介。通信媒介典型地具體化計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),序模塊或者在已調(diào)制數(shù)據(jù)信號中的其它數(shù)據(jù)例如載波或者其他傳輸機制。通過示例,并非限制,通信介質(zhì)包括有線介質(zhì)例如有線網(wǎng)絡(luò)或者單線連接,以及無線媒介,例如聲、無線頻率,紅外以及其它無線介質(zhì)。從而,軟件和固件指令可以被傳輸給用戶或者系統(tǒng),通過通信信道,例如電話線,DSL線,電纜電視線,光纖線纜,無線信道,因特網(wǎng),等等(通過便攜式存儲介質(zhì)提供這樣的軟件,其被看作是相同的或者可互換的)。軟件或者固件指令可以包括機器可讀指令,這些可讀指令在由控制設(shè)備執(zhí)行時,導(dǎo)致控制設(shè)備執(zhí)行不同動作。
當(dāng)在硬件中執(zhí)行時,硬件可以包括一個或多個離散組件,集成電路,應(yīng)用的集成電路(ASIC),等等。
需要理解的是,本發(fā)明可以以純軟件、純硬件、固件以及上述的各種組合來實現(xiàn)。硬件例如可以是控制設(shè)備、專用集成電路、大規(guī)模集成電路等等。
雖然當(dāng)前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。
這些實施方式所涉及的、從上面描述和相關(guān)聯(lián)的附圖中呈現(xiàn)的教導(dǎo)獲益的領(lǐng)域中的技術(shù)人員將認識到這里記載的本發(fā)明的很多修改和其他實施方式。因此,應(yīng)該理解,本發(fā)明不限于公開的具體實施方式,旨在將修改和其他實施方式包括在所附權(quán)利要求書的范圍內(nèi)。盡管在這里采用了特定的術(shù)語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。