CN106921395B - Ldpc编码方法及其装置 - Google Patents
Ldpc编码方法及其装置 Download PDFInfo
- Publication number
- CN106921395B CN106921395B CN201511001330.3A CN201511001330A CN106921395B CN 106921395 B CN106921395 B CN 106921395B CN 201511001330 A CN201511001330 A CN 201511001330A CN 106921395 B CN106921395 B CN 106921395B
- Authority
- CN
- China
- Prior art keywords
- matrix
- vector
- shift
- global register
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种LDPC编码方法及其装置。本发明公开了一种矩阵与向量乘运算方法,所述矩阵M为循环移位单位矩阵的和矩阵,包括:第一步骤:初始化全局寄存器;第二步骤:将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中;第三步骤:存储所述全局寄存器中的值。通过本发明的技术方案,优化了矩阵与向量乘的计算过程,通过重用矩阵与向量乘过程中的中间结果,减少执行矩阵与向量乘过程中执行的指令数量,从而加快向量与矩阵乘的执行速度。
Description
技术领域
本发明涉及一种针对矩阵与向量乘运算的低密度奇偶校验码(Low DensityParity Check Code,LDPC)编码器及其方法,特别地,涉及用于优化LDPC编码过程的矩阵与向量乘法单元
背景技术
LDPC码广泛应用于高速无线通信系统的信道编码,并将在高性能固态存储系统中应用。在《Efficient encoding of low-density parity-check codes》([J].IEEE TransInformation Theory,2001,47(2):638–656)中提出了RU编码算法,将校验矩阵变换为准下三角矩阵,利用Gauss法求解方程以完成编码。而在《在线可编程QC-LDPC码高速编码器结构》(清华大学学报(自然科学版)2009年第49卷第7期1025-1018页)提出了支持可变参数的准循环低密度奇偶校验码编码器结构。
发明内容
现有的LDPC编码技术从结构上看,功能模块和控制单元较多,较为复杂,软硬件功能模块定义不清,各个功能模块的利用率不高,编码的吞吐率不高。而且不够灵活,不能适用于结构不同的准循环校验矩阵。
本发明简化了LDPC编码器的结构,将繁琐的控制流简化为指令的控制,将矩阵求逆等复杂运算改为线下软件工作,提高了各个功能部件的运行效率,提高吞吐率,可以适用于不同结构和码率的准循环校验矩阵的编码。
本发明的一个目的在于高效地实现用于LDPC编码的矩阵与向量乘电路。将计算过程在硬件与可编程微码指令之间合理分配。
本发明的又一个目的在于优化矩阵与向量乘的计算过程,通过重用矩阵与向量乘过程中的中间结果,减少执行矩阵与向量乘过程中执行的指令数量,从而加快向量与矩阵乘的执行速度。
根据本发明的第一方面,提供了本发明第一方面的第一实施方式的一种 矩阵与向量乘运算方法,所述矩阵M为循环移位单位矩阵的和矩阵,包括:第一步骤:初始化全局寄存器;第二步骤:将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中;第三步骤:存储所述全局寄存器中的值。
根据本发明的第一方面的第一实施方式,提供了根据本发明第一方面的第二实施方式,其中,当所述矩阵M为多个循环移位单位矩阵的和矩阵时,重复执行第二步骤。
根据本发明的第一方面的第一或第二实施方式,提供了根据本发明第一方面的第三实施方式,进一步包括:第四步骤:从数据存储器取得向量S。
根据本发明的第一方面的第三实施方式,提供了根据本发明第一方面的第四实施方式,进一步包括:第五步骤:将第四步骤中的向量S加载到向量寄存器。
根据本发明第一方面的第一、第三或第四实施方式,提供了根据本发明第一方面的第五实施方式,其中,所述矩阵M=I1+I2+...Im+…+In,其中Im是循环移位单位矩阵,并且从单位矩阵I循环移位dm位得到循环移位单位矩阵Im,其中,1≤m≤n;在第二步骤中,对于构成矩阵M的n个循环移位单位矩阵I1,I2,...Im,…In的每一个循环移位单位矩阵Im,执行下述操作:使向量S移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存入全局寄存器。
根据本发明第一方面的第三实施方式,提供了根据本发明第一方面的第六实施方式,其中,所述矩阵M=I1+I2+...Im+…+In,其中I1、Im是循环移位单位矩阵,并且从单位矩阵I移位d1位得到I1,从I1*S循环移位dm'位得到循环移位单位矩阵Im,其中,2≤m≤n;第二步骤包括:使向量S移位d1位,将移位结果与全局寄存器的值异或得到特定值,并存储到全局寄存器;将全局寄存器的特定值存储到数据存储器;对于构成矩阵M的n-1个循环移位单位矩阵I2,I3,...Im,…,In中的每一个循环移位单位矩阵Im,其中2≤m≤n,执行下述操作:从数据存储器取得特定值,使特定值移位dm'位,将移位结果与全局寄存器的值异或,并将异或结果存入全局寄存器。
根据本发明第一方面的第四实施方式,提供了根据本发明第一方面的第 七实施方式,其中,所述矩阵M=I1+I2+...Im+…+In,其中I1、Im是循环移位单位矩阵,并且从单位矩阵I移位d1位得到I1,从I1*S循环移位dm'位得到循环移位单位矩阵Im,其中,2≤m≤n;第二步骤(S20)包括:使向量S移位d1位,将移位结果与全局寄存器的值异或并存储到全局寄存器;将全局寄存器的值存储到向量寄存器;对于构成矩阵M的n-1个循环移位单位矩阵I2,I3,...Im,…In中的每一个循环移位单位矩阵Im,其中2≤m≤n,执行下述操作:使向量寄存器的值移位dm'位,将移位结果与全局寄存器的值异或,并将异或结果存入全局寄存器。
根据本发明第一方面的第四实施方式,提供了根据本发明第一方面的第九实施方式,其中,所述矩阵M=K1+K2+...Km+…+Kn,其中K1、Km是两个循环移位单位矩阵的和矩阵,从K1循环移位dm位得到矩阵Km,从单位矩阵I循环移位dI1位得到循环移位单位矩阵I1,从单位矩阵I循环移位dI2得到循环移位单位矩阵I2,dI1与dI2是连续的自然数,以及K1=I1+I2,其中,2≤m≤n;第二步骤包括:使向量S移位dI1位,将移位结果与全局寄存器的值异或并存储到全局寄存器;使向量S移位dI2位,将移位结果与全局寄存器的值异或并存储到全局寄存器;将全局寄存器的值存储到向量寄存器;对于构成矩阵M的n-1个矩阵K2,...Km,…Kn中的每一个矩阵Km,其中,2≤m≤n,执行下述操作:使向量寄存器的值移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器。
根据本发明第一方面的第三实施方式,提供了根据本发明第一方面的第十实施方式,其中,所述矩阵M=K1+K2+...Km+…+Kn,其中K1、Km是两个循环移位单位矩阵的和矩阵,从K1循环移位dm位得到矩阵Km,从单位矩阵I循环移位dI1位得到循环移位单位矩阵I1,从单位矩阵I循环移位dI2得到循环移位单位矩阵I2,dI1与dI2是连续的自然数,以及K1=I1+I2,其中,2≤m≤n;第二步骤包括:使向量S移位dI1位,将移位结果与全局寄存器的值异或并存储到全局寄存器;使向量S移位dI2位,将移位结 果与全局寄存器的值异或得到特定值,并存储到全局寄存器;将全局寄存器的特定值存储到数据存储器;对于构成矩阵M的n-1个矩阵K2,....Km,…Kn中的每一个矩阵Km,其中2≤m≤n,执行下述操作:从数据存储器取得特定值,使特定值移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器。
根据本发明第一方面的第三实施方式,提供了根据本发明第一方面的第十一实施方式,其中,所述矩阵M=K1+K2+...Km+…+Kn,其中Km是p个循环移位单位矩阵的和矩阵,其中P为正整数,从K1循环移位dm位得到矩阵Km,其中2≤m≤n,从单位矩阵I循环移位dj位得到循环移位单位矩阵Ij,其中1≤j≤P,以及K1=I1+I2+...Ij+…+IP,dI1,dI2…dIj,…dIp是连续的自然数;第二步骤包括:对于构成矩阵K1的p个循环移位单位矩阵的每一个,执行下述操作:使向量S的值移位d1j位,将移位结果与全局寄存器的值异或得到特定值,并存储到全局寄存器;将全局寄存器的特定值存储到数据存储器;对于构成矩阵M的n-1个矩阵K2,...Km,…Kn中的每一个矩阵Km,其中2≤m≤n,执行下述操作:从数据存储器取得特定值,使特定值移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器。
根据本发明第一方面的第三实施方式,提供了根据本发明第一方面的第十一实施方式,其中,所述矩阵M=K1+K2+..Km+….+Kn,其中Km是p个循环移位单位矩阵的和矩阵,其中P为正整数,从K1循环移位dm位得到矩阵Km,其中2≤m≤n,从单位矩阵I循环移位dIj位得到循环移位单位矩阵Ij,其中1≤j≤P,以及K1=I1+I2+...Ij+…+IP,dI1,dI2…dIj,…dIp是连续的自然数;第二步骤包括:对于构成矩阵K1的p个循环移位单位矩阵的每一个,执行下述操作:使向量S的值移位d1j位,将移位结果与全局寄存器的值异或并存储到全局寄存器;将全局寄存器的值存储到向量存储器;对于构成矩阵M的n-1个矩阵K2,...Km,…Kn中的每一个矩阵Km,执行下述操作:使向量寄存器的值移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器。
根据本发明第一方面的第四实施方式,提供了根据本发明第一方面的第 十二实施方式,其中,所述矩阵M=K1+K2+..Km+….+Kn,其中Km是p个循环移位单位矩阵的和矩阵,其中P为正整数,从K1循环移位dm位得到矩阵Km,其中2≤m≤n,从单位矩阵I循环移位dIj位得到循环移位单位矩阵Ij,其中1≤j≤P,以及K1=I1+I2+...Ij+…+IP,dI1,dI2…dIj,…dIp是连续的自然数;第二步骤(S20)包括:对于构成矩阵K1的p个循环移位单位矩阵的每一个,执行下述操作:使向量S的值移位d1j位,将移位结果与全局寄存器的值异或并存储到全局寄存器;将全局寄存器的值存储到向量存储器;对于构成矩阵M的n-1个矩阵K2,...Km,…Kn中的每一个矩阵Km,执行下述操作:使向量寄存器的值移位dm位,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器。
根据本发明第二方面,提供了根据本发明第二方面的第一实施方式的计算矩阵M与向量S相乘的方法,其中,所述矩阵其中K(i)是i个循环移位单位矩阵的和矩阵,且K(i)中具有i个连续的非零行;以及具有i个连续非零行的矩阵K(i)有f(i)个,K(i,j(i))是f(i)个矩阵K(i)中的第j(i)个;所述方法包括:对于i的每个取值,根据本发明第一方面的第十一或第十二实施方式的计算矩阵与向量乘的方法,计算的结果,并将结果保存到数据存储器;
根据本发明的第三方面,提供了提供了一种矩阵与向量乘运算单元,包括:移位单元、异或单元和全局寄存器,其中,移位单元,用于将向量移位指定位数,以得到移位结果;异或单元,与所述移位单元和所述全局寄存器相连接,用于接收来自所述移位单元的所述移位结果,并将所述移位结果与所述全局寄存器中的存储值相异或,以得到异或结果;全局寄存器,用于保存来自所述异或单元的所述异或结果。
根据本发明的第三方面的一个实施方式,进一步包括:指令存储器,用 于存储指令,所述指令包括第一指令,其中,所述第一指令指示所述移位单元将向量移位指定位数以得到移位结果和指示所述异或单元将所述移位结果与所述存储值相异或。
根据本发明的第三方面的一个实施方式,进一步包括:数据存储器,与所述移位单元和所述全局寄存器相连接,用于存储向量。
根据本发明的第三方面的一个实施方式,进一步包括向量寄存器,与所述数据存储器和所述移位单元相连接,用于接收来自所述数据存储器的向量并将向量提供给所述移位单元。
根据本发明的第四方面,提供了本发明第四方面的一种矩阵与向量乘运算装置,所述矩阵M为循环移位单位矩阵的和矩阵,所述装置包括:用于初始化全局寄存器的模块;用于将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中的模块;用于存储所述全局寄存器中的值的模块。
根据本发明的第五方面,提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行根据本发明第一方面或第二方面的实施方式的方法。
根据本发明的第六方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行根据本发明第一方面或第二方面的实施方式的方法。
本发明优化矩阵与向量乘的计算过程,通过重用矩阵与向量乘过程中的中间结果,减少执行矩阵与向量乘过程中执行的指令数量,从而加快向量与矩阵乘的执行速度。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。其中在附图中,参考数字之后的字母标记指示多个相同的部件,当泛指这些部件时,将省略其最后的字母标记。在附图中:
图1A示出了根据本发明一个实施方式的用于LDPC编码的矩阵与向量 乘运算单元的结构示意图;
图1B示出了本发明的一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图;
图2示出了根据本发明一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图;
图3A示出了根据本发明另一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图;
图3B示出了根据本发明一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图;
图4A示出了根据本发明另一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图;
图4B示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图;
图5示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图;
图6示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。
在附图中,使用相同或类似的标号来指代相同或类似的元素。
具体实施方式
下面结合附图和具体的实施方式对本发明作进一步的描述。
在LDPC编码过程中,矩阵M与向量S的乘法操作是重要操作。矩阵M是n个循环移位单位矩阵的和矩阵。矩阵M与向量S的乘法操作可分解为对向量S的移位操作,以及对移位结果的模2和。根据本发明LDPC编码器中,通过执行指令序列来实现矩阵与向量S的乘法。进一步地,在进行LDPC编码过程中,涉及多次矩阵与向量乘法操作。提供分别对应于多个矩阵与向量乘法操作的多段指令序列,以及提供对应于多个矩阵与向量乘法的矩阵M与向量S,并通过执行多段指令序列得到中间和/或最终LDPC编码计算结果。在多段指令序列的控制下,根据本发明实施例的矩阵与向量乘运算单元实现了多个矩阵与向量乘法运算,并实现LDPC编码。 因而根据本发明实施例的矩阵与向量乘运算单元也是一种LDPC编码器。
图1A示出了根据本发明一个方面的用于LDPC编码的矩阵与向量乘运算单元的结构示意图。如图1所示,矩阵与向量乘运算单元,包括:移位单元140、异或单元160和全局寄存器150,其中,移位单元140用于将向量移位指定位数,以得到移位结果,在这里需要说明的是,移位单元140能够移位的目标对象可以是任意类型的数据,例如可以为二进制数据、标量、向量等。在根据本发明的实施例中,移位单元140移位的目标对象为向量,通过对向量进行移位得到移位结果。
异或单元160分别与移位单元140和全局寄存器150相连接,用于接收来自移位单元140中的移位结果,并将移位结果与全局寄存器150中的存储值相异或,以得到异或结果。异或单元160接收来自移位单元140中的移位结果,在这里需要说明的是,移位结果为移位单元140对任意数据进行移位后得到的移位结果,任意数据例如可以为二进制数据,可以为向量,可以为标量等。本发明中移位结果为移位单元140对向量进行移位后得到的移位结果,异或单元160将移位结果与全局寄存器150中的存储值相异或,以得到异或结果。本发明中全局寄存器150中的存储值为根据矩阵与向量乘运算的原理所得到的异或数值,在下文中将详细描述。
全局寄存器150用于保存来自异或单元160中的异或结果,并传送异或结果。异或运算相当于比特的模2和,向量的循环移位操作相当于循环移位单位矩阵与向量的乘法。因而通过控制移位与异或操作的操作数与操作过程,在全局寄存器150中将得到矩阵与向量乘运算的最终结果。全局寄存器150中的计算结果可以存储在存储器中,并用于进一步的计算。
图1B示出了本发明的一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。可以理解,图1B所示的流程图仅仅是示意性的,其中记载的步骤可以按照不同顺序执行、并行执行、省略和/或增加其他步骤。如图1B所示,LDPC编码器中矩阵M与向量S乘运算方法包括步骤S10:初始化全局寄存器;步骤S20:将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中;步骤S30:存储所述全局寄存器中的值。在一个例子中,矩阵M由n个循环移位单位矩阵矩 阵构成,重复执行步骤S20n次。
图2示出了根据本发明一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图。
根据本发明的一个实施方式,如图2所示,用于LDPC编码的矩阵与向量乘运算单元进一步包括指令存储器120,指令存储器120用于存储指令,指令的数量可以有多条,指令的种类可以有多种。
根据本发明的矩阵与向量乘运算单元通过执行指令序列完成LDPC编码或者LDPC编码中的矩阵与向量乘法操作。在执行指令时,移位单元140可对向量执行指定位数的移位操作,移位结果被发送给异或单元160,其中移位的位数由指令指定。在执行指令时,可将数据加载到全局寄存器150,或存储全局寄存器150的数据。在执行指令时,异或单元160可对全局寄存器150的数据与移位单元140的输出数据进行异或操作,并将结果存储在全局寄存器150中。通过执行指令存储器120中的多条指令,完成LDPC编码过程中的矩阵与向量乘运算。
图3A示出了根据本发明另一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图。
根据本发明的一个实施方式,如图3A所示,用于LDPC编码的矩阵与向量乘运算单元进一步包括数据存储器110,与移位单元140和全局寄存器150(又称为Rd寄存器)相连接。响应于执行指令,可将数据存储器110的指定位置的数据加载到全局寄存器150,或者将全局寄存器150的内容存储到数据存储器110的指定位置。响应于执行指令,移位单元140对数据存储器110的指定位置的数据进行移位,以及将移位单元140的移位结果与全局寄存器150的内容求异或,并将异或结果存储在全局寄存器150中。
根据本发明的一个实施方式,响应于执行指令存储器120中的指令,将指令所指定的数据存储器110中的向量加载到全局寄存器150。在一个例子中,为了将全局寄存器150初始状态设置为0,通过执行指令,将数字“零”或数据存储器110中存储了数字“零”的存储空间的内容加载到全局寄存器150。
根据本发明的一个实施方式,响应于执行指令,将全局寄存器150的内容存储到数据存储器110。
在表1中展示了根据本发明实施例的指令列表。通过组合这些指令,使得通过指令序列的执行来实现矩阵与向量乘法或LDPC编码。因而根据本发明实施例的矩阵与向量乘运算单元也是一种LDPC编码器。指令序列存储在指令存储器120中。
在LDPC编码器执行LOAD指令时,依LOAD指令中描述的参数,将数据从数据存储器110中加载到全局寄存器150。LOAD指令加载的数据可以是向量S。LOAD指令可使用多种寻址方式。在一个例子中,LOAD指令中描述的参数指示要加载的数据在数据存储器110中的位置。在又一个例子中,LOAD指令中描述的参数指示从寄存器中获得要加载的数据在数据存储器110中的地址。LOAD指令中描述的参数还可以指示相对于基地址的偏移值。
在LDPC编码器执行STORE指令时,依STORE指令中描述的参数,将全局寄存器150中的数据存储到数据存储器110。STORE指令存储的数据可以是对向量S执行移位和/或异或后的结果。STORE指令可使用多种寻址方式。
在LDPC编码器执行SHIFT_XOR指令时,依SHIFT_XOR指令中描述的参数,由移位单元140将数据存储器中的指定数据移位指定位数,将移位结果送入异或单元160,由异或单元160将该移位结果与全局寄存器150的值相异或,并将结果存储到全局寄存器150中。
表1指令列表
在根据图3A所示的本发明的又一实施例中,LDPC编码器还能够执 行NOP指令。NOP指令代表空操作,用于避免LDPC编码器指令执行过程中的资源访问冲突。
图3B示出了根据本发明一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。
如图3B所示,LDPC编码器中矩阵与向量乘运算方法包括步骤S10:初始化全局寄存器。步骤S12:从数据存储器取得向量S。步骤S20:将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中。步骤S30:存储所述全局寄存器中的值。
图4A示出了根据本发明另一个实施方式的用于LDPC编码的矩阵与向量乘运算单元的结构示意图。
根据本发明的一个实施方式,如图4A所示,用于LDPC编码的矩阵与向量乘运算单元包括数据存储器110、指令存储器120、移位单元140、全局寄存器(又称为Rd(目的)寄存器)150、异或单元160和向量寄存器(又称为Rs(源)寄存器)130。向量寄存器130与数据存储器110和移位单元140相连接,用于接收来自数据存储器110的向量并将向量提供给移位单元140。
根据本发明的一个实施方式,响应于执行指令存储器120中的指令,将指令所指定的数据加载到向量寄存器130。在根据本发明的例子中,加载到向量寄存器130的数据为矩阵与向量乘操作中作为乘数的向量。
在表2中展示了根据本发明实施例的指令列表。通过组合这些指令,使得通过指令序列的执行来实现矩阵与向量乘法或LDPC编码。因而根据本发明图4A所展示的实施例的矩阵与向量乘运算单元也是一种LDPC编码器。指令序列存储在指令存储器120中。
在LDPC编码器执行LOAD指令时,依LOAD指令中描述的参数,将数据从数据存储器110中加载到向量寄存器130或目的寄存器150。LOAD指令加载的数据可以是矩阵与向量乘法操作中作为乘数的向量。LOAD指令可使用多种寻址方式。在一个例子中,LOAD指令中描述的参数指示要加载的数据在数据存储器110中的位置。在又一个例子中,LOAD指令中描述的参数指示从寄存器中获得要加载的数据在数据存储器110中 的地址。LOAD指令中描述的参数还可以指示相对于基地址的偏移值。
在LDPC编码器执行STORE指令时,依STORE指令中描述的参数,将目的寄存器150中的数据存储到数据存储器110。STORE指令存储的数据可以是对向量执行移位和/或异或后的结果。STORE指令可使用多种寻址方式。
在LDPC编码器执行SHIFT_XOR指令时,依SHIFT_XOR指令中描述的参数,由移位单元140将向量寄存器130中的内容移位指定位数,将移位结果送入异或单元160,由异或单元160将该移位结果与目的寄存器150的值相异或,并将结果存储到目的寄存器150中。
表2指令列表
在根据图4A所示的本发明的又一实施例中,LDPC编码器还能够执行NOP指令。NOP指令代表空操作,用于避免LDPC编码器指令执行过程中的资源访问冲突。
图4B示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。
如图4B所示,LDPC编码器中矩阵与向量乘运算方法包括步骤S10:初始化全局寄存器。步骤S12:从数据存储器取得向量S。步骤S14:将步骤S12中的向量S加载到向量寄存器。步骤S20:将向量S移位指定位数并与全局寄存器的内容相异或,并将异或结果存储在所述全局寄存器中。步骤S30:存储所述全局寄存器中的值。
下面通过具体实施例详细描述根据指令序列,LDPC编码器所实现的矩阵与向量乘的运算。
在LDPC编码过程中,矩阵M与向量S的乘法操作是重要操作。矩阵M是n个循环移位单位矩阵的和矩阵。循环移位单位矩阵是单位矩阵经循环移 位得到的矩阵。例如,式(1)为循环移位单位矩阵的例子,式(1)的循环移位单位矩阵是8*8的单位矩阵循环右移一位得到的矩阵。
由于M是n个循环移位单位矩阵的和矩阵。令M=I1+I2+…+In,其中Im(1≤m≤n)是循环移位单位矩阵,m与n均为正整数。
矩阵M与向量S的乘法操作M*S=(I1+I2+…+In)*S。单位循环移位单位矩阵Im(1≤m≤n)与向量S的乘法操作可转换为对向量S的移位操作。而(I1+I2+…+In)*S可转换为对向量S的移位,以及对移位结果的模2和。即(I1+I2+…+In)*S可以分解为shift(S,d1)xorshift(S,d2)xor shift(S,d3)…xor shift(S,dn),其中shift(S,dm)表示对向量S移位dm位;dm表示从单位阵I循环右移dm位得到循环移位单位矩阵Im;XOR表示异或操作。可见,矩阵与向量相乘(M*S)可转换为一系列的移位与异或操作。
下面通过具体的例子对根据本发明的实施例计算矩阵M与向量S的乘法操作的过程进行说明。
实施例1
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如(2)式,向量S如(3)式:
S=(1 0 0 1 0 0 1 0)' (3)
在(2)式中,M=I1+I2+I3,其中I1是单位阵I循环右移1位得到循环移位单位矩阵,I2是单位阵I循环右移3位得到循环移位单位矩阵,I3是单位阵I循环右移7位得到循环移位单位矩阵。则M*S=I1*S XOR I2*S XOR I3*S的计算过程可以分解为如下操作:Shift(S,1)xorShift(S,3)xor Shift(S,7)。而这些操作可通过在如图3A的LDPC编码器中执行存储在指令存储器120中的下列指令序列来实现:
①LOAD Rd,0;
②Shift_XOR[ADDR1],1;
③Shift_XOR[ADDR1],3;
④Shift_XOR[ADDR1],7;
⑤STORE ADDR2,Rd。
如图3A所示,用于LDPC编码器的矩阵与向量乘运算单元,包括:数据存储器110、指令存储器120、移位单元140、全局寄存器(Rd)150和异或单元160,数据存储器110存储矩阵M和向量S,数据存储器110分别与移位单元140和全局寄存器150相连接,移位单元140与异或单元160相连接,异或单元160与全局寄存器150相连接。
执行指令①时,,加载给全局寄存器150的向量值为0,即将全局寄存器150初始化为0。
执行指令②时,移位单元140将数据存储器110中地址为ADDR1处存储的向量S移位1位,异或单元160将移1位的向量与全局寄存器150(初始值为0)的值相异或,异或结果存储在全局寄存器150中。此时全局寄存器150中的值为I1*S。
执行指令③时,移位单元140将数据存储器110中地址为ADDR1处存储的向量S移位3位,异或单元160将移3位的向量S与全局寄存器150中存储的执行完指令②后的值相异或,将异或结果存储在全局寄存器150中。此时全局寄存器150中的值为I1*S XOR I2*S。
执行指令④时,移位单元140将数据存储器110中地址为ADDR1处存储的向量S移位7位,异或单元160将移7位的向量S与全局寄存器150中存储的执行完指令③后的值相异或,将异或结果存储在全局寄存器150中。此 时,全局寄存器250中的值为I1*S XOR I2*S XORI3*S,即M*S的计算结果。
执行指令⑤时,将执行完指令④后的全局寄存器150中的值存储在地址为ADDR2的存储位置。
执行上面的指令①-⑤所对应的计算(2)式的矩阵M与(3)式的向量S乘运算方法为:步骤S510:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中的值为零;步骤S512:从数据存储器110的地址为ADDR1处取得向量S;步骤S520:将向量S移位1位,并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量S移位3位,并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量S移位7位,并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。步骤S530:将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
在根据本发明的实施例1中,为计算矩阵与向量乘M*S,分析矩阵M的构成,将矩阵M分别为若干循环移位单位矩阵的和,对于每个循环移位单位矩阵与向量S的乘法操作,生成一条指令Shift_XOR[ADDR],offset,其中offset值代表单位阵I循环右移offset位得到该循环移位单位矩阵,而[ADDR]表示该指令的操作对象是数据存储器中的存储位置为ADDR的数据。以及生成初始化全局寄存器(Rd)的指令,与保存计算结果的指令。在如图3A所示的LDPC编码器中执行所生成的指令序列(例如,上面的指令序列①-⑤),以得到矩阵与向量乘M*S的计算结果。除应用于LDPC编码器外,如图3A所示的根据本发明的实施例也可用于其他需要计算矩阵与向量乘法的应用场景。
本实施例1中的LDPC编码器涉及多次矩阵与向量乘法操作。在指令存储器120中可存储分别对应于多个矩阵与向量乘法操作的多个指令,简化了LDPC编码器的结构,将繁琐的控制流简化为指令的控制,提高了各个功能部件的运行效率,提高吞吐率。
实施例2
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如 (4)式,向量S如(5)式:
S=(1 0 0 1 0 0 1 0)' (5)
在(4)式中,M=I1’+I2’+I3’,其中I1’是对单位阵I循环右移3位得到的循环移位单位矩阵,I2’是对循环移位单位矩阵I1’循环左移2位得到的循环移位单位矩阵,I3’是对循环移位单位矩阵I1’循环右移4位得到的循环移位单位矩阵。在此过程中,共进行9次对向量的移位操作。可见,在实施例2中,同样完成矩阵与向量乘M*S计算,比实施例1的计算过程减少了2次对向量的移位操作。
而实施例2这些操作可通过在如图3A的LDPC编码器中执行下列指令序列来实现。全局寄存器(Rd)150的初始状态为0。向量S存储在数据寄存器110的地址为ADDR1的存储空间处。
1)Shift_XOR[ADDR1],3;
2)STORE ADDR1,Rd;
3)Shift_XOR[ADDR1],-2;
4)Shift_XOR[ADDR1]4;
5)STORE ADDR2,Rd。
全局寄存器(Rd)150的初始状态为0。可通过执行指令LOAD Rd,0来对全局寄存器(Rd)150初始化。执行指令1)时,从数据存储器110的地址为ADDR1处取得向量S,并将向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中。执行指令2)时,将全局寄存器(Rd)150中的值存储到数据存储器110的地址为ADDR1的存储空间。执行指令3)时,将数据存储器110的地址为ADDR1处的数据移位-2位(左移),并与全局寄存器(Rd)150的值相异或,异或 结果存储在全局寄存器(Rd)150中。执行指令4)时,将数据存储器110的地址为ADDR1处的数据移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。此时,全局寄存器(Rd)150中的值即为M*S的计算结果。执行指令5)时,将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
执行上面的指令1)-5)所对应的计算(3)式的矩阵M与(4)式的向量S乘运算方法为:
步骤S610:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中的值为零;
步骤S612:从数据存储器110的地址为ADDR1处取得向量S;
步骤S620:将向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;将全局寄存器(Rd)150中的值存储到数据存储器110的地址为ADDR1的存储空间;将数据存储器110的地址为ADDR1处的数据移位-2位(左移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;将数据存储器110的地址为ADDR1处的数据移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中,此时,全局寄存器(Rd)150中的值即为M*S的计算结果。
步骤S630:将全局寄存器(Rd)150的值存储在数据存储器110的地址为ADDR2的存储空间。
本实施例中重用循环移位单位矩阵与向量S乘的结果,以减少移位操作。从而在计算矩阵与向量乘法过程中,同实施例1相比,使用的指令更少,计算速度更快。进一步地,减少移位操作将减少存储单元的状态反转,从而节约计算过程的能量消耗。
实施例3
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如(6)式,向量S如(7)式:
S=(1 0 0 1 0 0 1 0)' (7)
在(6)式中,由括号中的“1”(即“(1)”)组成的矩阵为由单位矩阵分别循环移位3位和4位所得的矩阵的和矩阵K1。而由不包括括号的“1”组成的矩阵为单位矩阵分别循环右移6位和7位所得的矩阵的和矩阵K2。矩阵K1与K2均为2个循环移位单位矩阵的和矩阵,并且构成矩阵K1的两个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的,构成矩阵K2的两个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的。因而认为矩阵K1与矩阵K2是具有相同结构的矩阵,或者称为矩阵K1与K2中都具有两个连续的非零行。类似地,若矩阵Km为m个循环移位单位矩阵的和矩阵,并且,构成矩阵Km的m个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的,则称为矩阵Km具有m个连续的非零行。对于具有相同结构的矩阵K1与K2,从矩阵K1循环移位预定位数(在(6)式中,右移3位)将得到矩阵K2。
而实施例3这些操作可通过在如图3A的LDPC编码器中执行下列指令序列来实现。全局寄存器(Rd)150的初始状态为0。向量S存储在数据寄存器110的地址为ADDR1的存储空间处。
6)Shift_XOR[ADDR1],3;
7)Shift_XOR[ADDR1],4;
8)STORE ADDR1,Rd;
9)Shift_XOR[ADDR1],3;
10)STORE ADDR2,Rd。
全局寄存器(Rd)150的初始状态为0。执行指令6)时,从数据存储器110的地址为ADDR1处取得向量S,并将向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器 (Rd)150中。执行指令7)时,从数据存储器110的地址为ADDR1处取得向量S,并将向量S移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中(该结果为K1*S)。在执行指令8)时,将全局寄存器(Rd)150的值存储在数据存储器110的地址为ADDR1的存储空间。在执行指令9)时,从数据存储器110的地址为ADDR1处取得数据(K1*S的结果),并将所取得的数据移位4位(右移)(为K2*S),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中(K1*S XOR K2*S)。执行指令10)时,将全局寄存器(Rd)150的值存储在数据存储器110的地址为ADDR2的存储空间。
执行上面的指令6)-10)所对应的计算(6)式的矩阵M与(7)式的向量S乘运算方法为:
步骤S710:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中的值为零;
步骤S712:从数据存储器110的地址为ADDR1处取得向量S;
步骤S720:将向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;从数据存储器110的地址为ADDR1处取得向量S,并将向量S移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中(该结果为K1*S);将全局寄存器(Rd)150的值存储在数据存储器110的地址为ADDR1的存储空间;从数据存储器110的地址为ADDR1处取得数据(K1*S的结果),并将所取得的数据移位4位(右移)(为K2*S),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中(K1*S XOR K2*S)。
步骤S730:将全局寄存器(Rd)150的值存储在数据存储器110的地址为ADDR2的存储空间。
在实施例3中,通过对数据存储器110的地址为ADDR1的存储空间的数据进行移位操作,重用了K1*S的计算结果。从而减少了计算K*S所需要的指令。
在实施例3中,矩阵M=K1+K2,而K1与K2均为为2个循环移位单位矩 阵的和矩阵。在根据本发明的另一实施例中,矩阵K1与K2均为n个循环移位单位矩阵的和矩阵,且构成矩阵K的n个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的。从而矩阵K1与K2具有相同的结构,可通过对K1*S的计算结果移位得到K2*S。所属领域技术人员将意识到可将矩阵M分解为M=K1+K2+…+Kj,其中K1,K2,…,Kj均具有相同的结构(例如,构成矩阵Ki的多个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的),从而可通过对K1*S的计算结果移位得到Ki*S(2≤i≤j)。
在根据本发明的进一步的实施例中,分析矩阵M的构成,将矩阵M分解为{K1,K2,…,Kj}的和,其中K1,K2,…,Kj均具有相同的结构,均为p个循环移位单位阵的和矩阵(p是正整数),并且,构成矩阵Ki的p个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的。从而可通过对K1*S的计算结果移位得到Ki*S(2≤i≤j)。{K1,K2,…,Kj}是排序的,使得d2,…dj的和最小,其中dm表示从K1移位dm位得到矩阵Km(2≤m≤j)。
实施例4
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如(8)式,向量S如(9)式:
S=(1 0 0 1 0 0 1 0)' (9)
在(8)式中,M=I1+I2+I3,其中I1是单位阵I循环右移1位得到循环移位单位矩阵,I2是单位阵I循环右移3位得到循环移位单位矩阵,I3是单位阵I循环右移7位得到循环移位单位矩阵。则M*S=I1*S XOR I2*S XOR I3*S的计算过程可以分解为如下操作:Shift(S,1)xorShift(S,3)xor Shift(S,7)。而这些操作可通过在如图4的LDPC编码器中执行下列指令序列来实现,其中向量寄存器(Rs)130与目的寄存器(Rd)150的初始状态为0。
⑩LOAD Rs,ADDR1;
如图4A所示,用于LDPC编码的矩阵与向量乘运算单元,包括:数据存储器110、指令存储器120、向量寄存器(Rs)130、移位单元140、目的寄存器(Rd)150和异或单元160,数据存储器110分别与向量寄存器130和目的寄存器150相连接,向量寄存器130与移位单元140相连接,移位单元140与异或单元160相连接,异或单元160与目的寄存器150相连接。
执行指令⑩时,从数据存储器110的地址为ADDR1处取得向量S,并加载到向量寄存器130中。
执行指令时,通过移位单元140将向量寄存器130的向量S移位1位,异或单元160将移1位的向量S与目的寄存器150(初始值为0)的值相异或,异或结果存储在目的寄存器150中。此时目的寄存器150中的值为I1*S。
执行指令时,移位单元140将向量寄存器130的向量S移位3位,异或单元160将移3位的向量S与目的寄存器150中存储的执行完指令后的值相异或,将异或结果存储在目的寄存器150中。此时目的寄存器150中的值为I1*S XOR I2*S。
执行指令时,移位单元140将向量寄存器130的向量S移位7位,异或单元160将移7位的向量S与目的寄存器150中存储的执行完指令后的值相异或,将异或结果存储在目的寄存器150中。此时,目的寄存器150中的值为I1*S XOR I2*S XOR I3*S,即M*S的计算结果。
步骤S810:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中 的值为零;
步骤S812:从数据存储器110的地址为ADDR1处取得向量S;
步骤S814:将步骤S812中的向量S加载到向量寄存器(Rs)130;
步骤S820:将向量寄存器(Rs)130中的向量S移位1位,并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量寄存器(Rs)130中的向量S移位3位,并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量寄存器(Rs)130中的向量S移位7位,并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。
步骤S830:将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
在根据本发明的实施例2中,为计算矩阵与向量乘M*S,分析矩阵M的构成,将矩阵M划分为若干循环移位单位矩阵的和,对于每个循环移位单位矩阵与向量S的乘法操作,生成一条指令:shift Rs,offset,其中offset值代表单位阵I循环右移offset位得到该循环移位单位矩阵,而Rs表示该指令的操作对象是来自向量寄存器130的数据。还生成初始化向量寄存器(Rs)、目的寄存器(Rd)的指令,与保存计算结果的指令。在如图4A所示的LDPC编码器中执行所生成的指令序列(例如,上面的指令序列⑩-),以得到矩阵与向量乘M*S的计算结果。除应用于LDPC编码器外,如图4A所示的根据本发明的实施例也可用于其他需要计算矩阵与向量乘法的应用场景。
实施例5
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如(10)式,向量S如(11)式:
S=(1 0 0 1 0 0 1 0)' (11)
在(10)式中,M=I1’+I2’+I3’,其中I1’是对单位阵I循环右移3位得到循环移位单位矩阵,I2’是对循环移位单位矩阵I1’循环左移2位得到的循环移位单位矩阵,I3’是对循环移位单位矩阵I1’循环右移4位得到的循环移位单位矩阵。在此过程中,共进行9次对向量S的移位操作。可见,在实施例4中,同样完成矩阵与向量乘M*S计算,比实施例4的计算过程减少了2次对向量S的移位操作。
而实施例5这些操作可通过在如图4A的LDPC编码器中执行下列指令序列来实现。全局寄存器(Rd)150和向量寄存器(Rs)130的初始状态为0。
(100)LOAD Rs,ADDR1;
(200)Shift_Xor Rs,3;
(300)Store Rs,Rd;
(400)Shift_Xor Rs,-2;
(500)Shift_Xor Rs,4;
(600)STORE ADDR2,Rd。
向量寄存器(Rs)130与全局寄存器(Rd)150的初始状态为0。执行指令(100)时,从数据存储器110的地址为ADDR1处取得向量S,并加载到向量寄存器(Rs)130中。执行指令(200)时,将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中。执行指令(300)时,将全局寄存器(Rd)150的值存储在向量寄存器(Rs)130中。执行指令(400)时,将向量寄存器(Rs)130中的数据移位-2位(左移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。执行指令(500) 时,将向量寄存器(Rs)130中的数据移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。此时,全局寄存器(Rd)150中的值即为M*S的计算结果。执行指令(600)时,将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
执行上面的指令(100)-(600)所对应的计算(10)式的矩阵M与(11)式的向量S乘运算方法为:
步骤S910:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中的值为零;
步骤S912:从数据存储器110的地址为ADDR1处取得向量S;
步骤S914:将步骤S912中的向量S加载到向量寄存器(Rs)130;
步骤S920:将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;将全局寄存器(Rd)150的值存储在向量寄存器(Rs)130中;将向量寄存器(Rs)130中的数据移位-2位(左移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量寄存器(Rs)130中的数据移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;
步骤S930:将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
实施例5中重用循环移位单位矩阵与向量S乘的结果,以减少移位操作。减少移位操作将减少存储单元的状态反转,从而节约计算过程的能量消耗。
实施例6
M为8*8的循环移位单位矩阵的和矩阵,S为8*1的向量,矩阵M如(12)式,向量S如(13)式:
S=(1 0 0 1 0 0 1 0)' (13)
在(12)式中,由括号中的“1”(即“(1)”)组成的矩阵为由单位矩阵分别循环移位3位和4位所得的矩阵的和矩阵K1。而由不包括括号的“1”组成的矩阵为单位矩阵分别循环右移6位和7位所得的矩阵的和矩阵K2。矩阵K1与K2均为2个循环移位单位矩阵的和矩阵,并且构成矩阵K1的两个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的,构成矩阵K2的两个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的。因而认为矩阵K1与矩阵K2是具有相同结构的矩阵,或者称为矩阵K1与K2中都具有两个连续的非零行。类似地,若矩阵Km为m个循环移位单位矩阵的和矩阵,并且,构成矩阵Km的m个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的,则称为矩阵Km具有m个连续的非零行。对于具有相同结构的矩阵K1与K2,从矩阵K1循环移位预定位数(在(12)式中,右移3位)将得到矩阵K2。
而实施例6这些操作可通过在如图4A的LDPC编码器中执行下列指令序列来实现。全局寄存器(Rd)150和向量寄存器(Rs)的初始状态为0。向量S存储在数据寄存器110的地址为ADDR1的存储空间处。
(110)LOAD Rs,ADDR1;
(210)Shift_Xor Rs,3;
(310)Shift_Xor Rs,4;
(410)STORE Rs,Rd;
(510)Shift_Xor Rs,3;
(610)STORE ADDR2,Rd。
向量寄存器(Rs)130与全局寄存器(Rd)150的初始状态为0。执行指令(110)时,从数据存储器110的地址为ADDR1处取得向量S,并加载到向量 寄存器(Rs)130中。执行指令(210)时,将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中。执行指令(310)时,将向量寄存器(Rs)130中的向量S移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。此时,全局寄存器(Rd)150中存储的是K1*S的计算结果。而重用K1*S的计算结果,将其右移3位,将得到K2*S的计算结果。执行指令(410)时,将全局寄存器(Rd)150的值(即K1*S的计算结果)存储在向量寄存器(Rs)130中。执行指令(510)时,将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中。此时,全局寄存器(Rd)150中的值即为M*S的计算结果。执行指令(610)时,将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
执行上面的指令(110)-(610)所对应的计算(12)式的矩阵M与(13)式的向量S乘运算方法为:
步骤S1010:初始化全局寄存器(Rd)150,使得全局寄存器(Rd)150中的值为零;
步骤S1012:从数据存储器110的地址为ADDR1处取得向量S;
步骤S1014:将步骤S1012中的向量S加载到向量寄存器(Rs)130;
步骤S1020:将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150(初始值为0)的值相异或,异或结果存储在全局寄存器(Rd)150中;将向量寄存器(Rs)130中的向量S移位4位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;将全局寄存器(Rd)150的值(即K1*S的计算结果)存储在向量寄存器(Rs)130中;将向量寄存器(Rs)130中的向量S移位3位(右移),并与全局寄存器(Rd)150的值相异或,异或结果存储在全局寄存器(Rd)150中;
第三步骤S30:将全局寄存器(Rd)150中的值存储在数据存储器110的地址为ADDR2的存储位置。
在实施例6中,通过对数据存储器110的地址为ADDR1的存储空间的数 据进行移位操作,重用了K1*S的计算结果。从而减少了计算K*S所需要的指令。
在实施例6中,矩阵M=K1+K2,而K1与K2均为为2个循环移位单位矩阵的和矩阵。在根据本发明的另一实施例中,矩阵K1与K2均为n个循环移位单位矩阵的和矩阵,且构成矩阵K的n个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的。从而矩阵K1与K2具有相同的结构,可通过对K1*S的计算结果移位得到K2*S。所属领域技术人员将意识到可将矩阵M分解为M=K1+K2+…+Kj,其中K1,K2,…,Kj均具有相同的结构(例如,构成矩阵Ki的多个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的),从而可通过对K1*S的计算结果移位得到Ki*S(2≤i≤j)。
在根据本发明的进一步的实施例中,分析矩阵M的构成,将矩阵M分解为{K1,K2,…,Kj}的和,其中K1,K2,…,Kj均具有相同的结构,均为p个循环移位单位阵的和矩阵(p是正整数),并且,构成矩阵Ki的p个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的。从而可通过对K1*S的计算结果移位得到Ki*S(2≤i≤j)。{K1,K2,…,Kj}是排序的,使得d2,…dj的和最小,其中dm表示从K1移位dm位得到矩阵Km(2≤m≤j)。
图5示出了根据本发明一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。
根据本发明图5的实施例,通过在图3A中展示的LDPC编码器中执行指令序列来计算矩阵与向量乘(M*S)。其中矩阵M=K1+K2+…+Km+…+Kn(1≤m≤n)(m,n均为正整数),M为多个循环移位单位矩阵的和矩阵,Km为p个循环移位单位矩阵的和矩阵(Km=Ij1+Ij2+…+Ijp,其中Ij为循环移位单位矩阵),并且,构成矩阵Km的p个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的,则称为矩阵Km具有p个连续的非零行。以及从K1循环移位dm位得到矩阵Km(2≤m≤n)。指令序列可通过处理矩阵M而离线生成,并存储在指令存储器120中。通过执行指令序列来实施图5中示出的矩阵与向量乘的方法流程图。
在步骤S1110,对LDPC编码器的全局寄存器(Rd)150(参看图3A)初始化。作为举例,将全局寄存器(Rd)150初始化为0。
在步骤S1120中,对于构成矩阵K1的p个循环移位单位矩阵的每一个,从数据存储器中(例如,地址为ADDR1)取得向量S,将向量S移位di位,移位结果与全局寄存器(Rd)150的值异或并存储到全局寄存器(Rd)150(执行指令SHIFT_Xor[ADDR1],di)。通过步骤S1120,得到K1*S的结算结果(S1)。而通过对S1移位预定位数,能得到Km*S。其中,K1=I11+I12+…I1i+…+I1p,以及从单位矩阵循环移位di位得到循环移位单位矩阵I1i。
在步骤S1130,将全局寄存器(Rd)150的值(S1)存储到数据存储器110(例如,地址为ADDR1)(执行指令STORE ADDR1,Rd)。
在步骤S1140,对于构成矩阵M的n-1个矩阵Km(例如,K2,…,Km,…,Kn),从数据存储器地址为ADDR1处取得S1,将S1移位dm位,移位结果与全局寄存器(Rd)150的值异或并存储到全局寄存器(Rd)150(执行指令SHIFT_Xor[ADDR1],dm)。通过步骤S1140,得到M*S的计算结果。其中,从K1移位dm位得到矩阵Km。
在步骤S1150,将全局寄存器(Rd)150的值存储到数据存储器110中(例如,地址为ADDR2)(执行指令STORE ADDR2,Rd)。
图6示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法的流程图。
结合图4A,图6示出了根据本发明另一个实施方式的LDPC编码器中矩阵与向量乘运算方法。其中矩阵M=K1+K2+…+Km+…+Kn(1≤m≤n)(m,n均为正整数),M为多个循环移位单位矩阵的和矩阵,Km为p个循环移位单位矩阵的和矩阵(Km=Ij1+Ij2+…+Ijp,其中Ij为循环移位单位矩阵),并且,构成矩阵Km的p个循环移位单位矩阵相对于单位矩阵的移位次数是相邻的或连续的,则称为矩阵Km具有p个连续的非零行。以及从K1循环移位dm位得到矩阵Km(2≤m≤n)。指令序列可通过处理矩阵M而离线生成,并存储在指令存储器120中。通过执行指令序列来实施图6中示出的矩阵与向量乘的方法流程图。
在步骤S1210,对LDPC编码器的全局寄存器(Rd)150(参看图4A)初始化。作为举例,将全局寄存器(Rd)150初始化为0。
在步骤S1220中,对于构成矩阵K1的p个循环移位单位矩阵的每一个, 从数据存储器中(例如,地址为ADDR1)取得向量S,将向量S加载到向量寄存器(Rs)130,将向量寄存器(Rs)130的向量S移位di位,移位结果与全局寄存器(Rd)150的值异或并存储到全局寄存器(Rd)150(执行指令SHIFT_Xor Rs,di)。通过步骤S1220,得到K1*S的结算结果(S1)。而通过对S1移位预定位数,能得到Km*S。其中,K1=I11+I12+…I1i+…+I1p,以及从单位矩阵循环移位di位得到循环移位单位矩阵I1i。。
在步骤S1230,将全局寄存器(Rd)150的值(S1)存储到向量寄存器(Rs)130(执行指令STORE Rs,Rd)。
在步骤S1240,对于构成矩阵M的n-1个矩阵Km(例如,K2,…,Km,…,Kn),从向量寄存器(Rs)130取得S1,将S1移位dm位,移位结果与全局寄存器(Rd)150的值异或并存储到全局寄存器(Rd)150(执行指令SHIFT_Xor Rs,dm)。通过步骤S1240,得到M*S的计算结果。其中,从K1移位dm位得到矩阵Km。
在步骤S1250,将全局寄存器(Rd)150的值存储到数据存储器110中(例如,地址为ADDR2)(执行指令STORE ADDR2,Rd)。根据本发明的一个实施方式,为计算矩阵与向量乘M*S,矩阵M可能具有复杂结构。例如,矩阵M是多个循环移位单位矩阵的和矩阵,其中K(i)是i个循环移位单位矩阵的和矩阵,且K(i)中具有i个连续的非零行;以及具有i个连续非零行的矩阵K(i)有f(i)个,K(i,j(i))是f(i)个矩阵K(i)中的第j(i)个。例如,M=K(1,1)+K(1,2)+K(2,1)+K(2,2)+K(2,3)+K(3,1),其中,K(1,1)与K(1,2)为循环移位单位矩阵,K(2,1)、K(2,2)与K(2,3)均为两个循环移位单位矩阵的和矩阵,且K(2,1)、K(2,2)与K(2,3)均具有两个相邻的非零行,即构成K(2,1)、K(2,2)与K(2,3)的每一个的两个循环移位单位矩阵相对于单位矩阵的移位次数彼此相邻或连续;K(3,1)为三个循环移位单位矩阵的和矩阵,且K(3,1)均具有三个相邻的非零行,即构成K(3,1)的三个循环移位单位矩阵相对于单位矩阵的次数相邻或连续。
对于具有相同数量连续非零行的多个K(i,j(i)),计算根据图5或图6示出的实施例,计算当i可取q个不同的值时,将对应于q个i的取值的计算结果分别保存在数据存储器110(参看图 3A或4A)。再对数据存储器中保存的q个 的结果求和(例如执行指令SHIFT_Xor ADDRi,0),计算
根据本发明的另一个方面,本发明还提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的方法。
根据本发明的另一个方面,还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行上面所述的方法。
本发明优化矩阵与向量乘的计算过程,通过重用矩阵与向量乘过程中的中间结果,减少执行矩阵与向量乘过程中执行的指令数量,从而加快向量与矩阵乘的执行速度。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作步骤,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的步骤。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的步骤的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或步骤的、基于硬件的专用计算机系统实现,或由专用硬件和计算机 指令的组合实现。
上述的不同块、操作以及技术的至少一部分可以被执行,通过使用硬件,控制设备执行固件指令,控制设备执行软件指令,或者及其任意组合。当采用执行固件以及软件指令的控制设备执行时,软件或固件指令可以被存储在任意计算机可读存储介质中,例如磁盘,光盘或者其他存储介质,在RAM或者ROM或者flash存储器,控制设备,硬盘,光盘,磁盘等等。同样地,软件和固件指令可以被传输到用户或者系统,通过任意已知的或者期望的传输方式包括,例如,在计算机可读盘或者其他便携式计算机存储机制或者通过通信媒介。通信媒介典型地具体化计算机可读指令,数据结构,序模块或者在已调制数据信号中的其它数据例如载波或者其他传输机制。通过示例,并非限制,通信介质包括有线介质例如有线网络或者单线连接,以及无线媒介,例如声、无线频率,红外以及其它无线介质。从而,软件和固件指令可以被传输给用户或者系统,通过通信信道,例如电话线,DSL线,电缆电视线,光纤线缆,无线信道,因特网,等等(通过便携式存储介质提供这样的软件,其被看作是相同的或者可互换的)。软件或者固件指令可以包括机器可读指令,这些可读指令在由控制设备执行时,导致控制设备执行不同动作。
当在硬件中执行时,硬件可以包括一个或多个离散组件,集成电路,应用的集成电路(ASIC),等等。
需要理解的是,本发明可以以纯软件、纯硬件、固件以及上述的各种组合来实现。硬件例如可以是控制设备、专用集成电路、大规模集成电路等等。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (2)
1.一种用于LDPC编码的矩阵M与向量S乘运算方法,
所述矩阵M为循环移位单位矩阵的和矩阵;在数据存储器的地址为ADDR1处存储向量S;
所述矩阵M=K1+K2+...Km+…+Kn,其中K1、Km是两个循环移位单位矩阵的和矩阵,从K1循环移位dm位得到矩阵Km,从单位矩阵I循环移位dI1位得到循环移位单位矩阵I1,从单位矩阵I循环移位dI2得到循环移位单位矩阵I2,dI1与dI2是连续的自然数,以及K1=I1+I2,其中,2≤m≤n;
执行LOAD指令,从数据存储器中加载数据到全局寄存器,以初始化全局寄存器;
执行Shift_XOR指令使数据存储器中地址为ADDR1的向量S移位dI1位,将移位结果与全局寄存器的值异或并存储到全局寄存器;
执行Shift_XOR指令使数据存储器中地址为ADDR1的向量S移位dI2位,将移位结果与移位dI1位所对应的全局寄存器的值异或得到特定值,所述特定值为K1*S,并存储到全局寄存器;
其中,Shift_XOR指令为将数据存储器中的指定数据移位指定位数,将移位结果与全局寄存器的值异或,结果存储到全局寄存器;
执行STORE指令,将全局寄存器的特定值存储到数据存储器的地址ADDR1;对于构成矩阵M的n-1个矩阵K2,....Km,…Kn中的每一个矩阵Km,其中2≤m≤n,执行Shift_XOR指令,从数据存储器中地址ADDR1取得所述特定值,使所述特定值移位dm位,得到Km*S,将移位结果与全局寄存器的值异或,并将异或结果存储到全局寄存器;
执行STORE指令存储所述全局寄存器中的值到数据存储器的地址ADDR2。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511001330.3A CN106921395B (zh) | 2015-12-28 | 2015-12-28 | Ldpc编码方法及其装置 |
CN202111023530.4A CN113708779A (zh) | 2015-12-28 | 2015-12-28 | 一种矩阵与向量乘运算单元 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511001330.3A CN106921395B (zh) | 2015-12-28 | 2015-12-28 | Ldpc编码方法及其装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111023530.4A Division CN113708779A (zh) | 2015-12-28 | 2015-12-28 | 一种矩阵与向量乘运算单元 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106921395A CN106921395A (zh) | 2017-07-04 |
CN106921395B true CN106921395B (zh) | 2021-09-28 |
Family
ID=59456109
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511001330.3A Active CN106921395B (zh) | 2015-12-28 | 2015-12-28 | Ldpc编码方法及其装置 |
CN202111023530.4A Pending CN113708779A (zh) | 2015-12-28 | 2015-12-28 | 一种矩阵与向量乘运算单元 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111023530.4A Pending CN113708779A (zh) | 2015-12-28 | 2015-12-28 | 一种矩阵与向量乘运算单元 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN106921395B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111262592B (zh) * | 2018-11-30 | 2022-10-25 | 展讯半导体(南京)有限公司 | 序列的循环移位装置及方法、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101399553A (zh) * | 2008-11-12 | 2009-04-01 | 清华大学 | 一种可在线编程的准循环ldpc码编码器装置 |
CN105099467A (zh) * | 2014-04-21 | 2015-11-25 | 华为技术有限公司 | Qc-ldpc码的编码方法及编码装置 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7178080B2 (en) * | 2002-08-15 | 2007-02-13 | Texas Instruments Incorporated | Hardware-efficient low density parity check code for digital communications |
CN100424998C (zh) * | 2006-01-20 | 2008-10-08 | 北京华环电子股份有限公司 | 一种基于循环冗余码的单比特纠错查表方法及其电路 |
CN100566183C (zh) * | 2007-09-06 | 2009-12-02 | 上海交通大学 | 分层准循环扩展构造的ldpc码的编码器 |
US8095859B1 (en) * | 2008-01-09 | 2012-01-10 | L-3 Communications, Corp. | Encoder for low-density parity check codes |
CN101227194B (zh) * | 2008-01-22 | 2010-06-16 | 炬力集成电路设计有限公司 | 用于并行bch编码的电路、编码器及方法 |
CN101340193B (zh) * | 2008-08-12 | 2011-04-20 | 普天信息技术研究院有限公司 | 一种低密度校验码的构造方法、编码器和译码器 |
CN101699770B (zh) * | 2009-10-23 | 2013-03-06 | 山东大学 | 一种高速ldpc码编码器及其编码方法 |
US8918706B1 (en) * | 2012-11-14 | 2014-12-23 | Altera Corporation | Methods and circuitry for performing parallel error checking |
CN103236851A (zh) * | 2013-04-19 | 2013-08-07 | 荣成市鼎通电子信息科技有限公司 | 基于查找表的cmmb中准循环矩阵高速乘法器 |
CN103731239B (zh) * | 2013-12-31 | 2017-01-18 | 中国科学院自动化研究所 | 一种适用于向量处理器的通用crc并行计算部件及方法 |
CN104868925B (zh) * | 2014-02-21 | 2019-01-22 | 中兴通讯股份有限公司 | 结构化ldpc码的编码方法、译码方法、编码装置和译码装置 |
CN103873181B (zh) * | 2014-04-04 | 2017-01-18 | 中国科学院自动化研究所 | 一种lte系统中伪随机序列并行生成方法 |
CN104617959B (zh) * | 2015-01-20 | 2017-09-05 | 北京邮电大学 | 一种基于通用处理器的ldpc编译码方法 |
-
2015
- 2015-12-28 CN CN201511001330.3A patent/CN106921395B/zh active Active
- 2015-12-28 CN CN202111023530.4A patent/CN113708779A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101399553A (zh) * | 2008-11-12 | 2009-04-01 | 清华大学 | 一种可在线编程的准循环ldpc码编码器装置 |
CN105099467A (zh) * | 2014-04-21 | 2015-11-25 | 华为技术有限公司 | Qc-ldpc码的编码方法及编码装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113708779A (zh) | 2021-11-26 |
CN106921395A (zh) | 2017-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4320418B2 (ja) | 復号装置および受信装置 | |
KR100502609B1 (ko) | Ldpc 코드를 이용한 부호화기 및 부호화 방법 | |
CA2631924C (en) | Extending a repetition period of a random sequence | |
TW201123745A (en) | Low density parity check codec and method of the same | |
JP4739020B2 (ja) | 小型ガロア体乗算器エンジン | |
US6820102B2 (en) | DSP unit for multi-level global accumulation | |
JP5485069B2 (ja) | 誤り訂正復号装置及び誤り訂正復号方法 | |
US9928037B2 (en) | Modulo calculation using polynomials | |
CN104617959A (zh) | 一种基于通用处理器的ldpc编译码方法 | |
JP2007013519A (ja) | 復号装置と方法並びにプログラム | |
CN100382011C (zh) | 蒙哥马利乘法器中的流水线内核 | |
CN106921395B (zh) | Ldpc编码方法及其装置 | |
Han et al. | Implementation of IEEE 802.11 n LDPC codes based on general purpose processors | |
CN114063973A (zh) | 伽罗华域乘法器及纠删编解码系统 | |
CN106911335B (zh) | Ldpc编码器 | |
CN107534450B (zh) | 矩阵应用装置、矩阵应用方法、以及存储介质 | |
CN103269227A (zh) | 基于循环左移的深空通信中准循环ldpc串行编码器 | |
US20050086278A1 (en) | Method and apparatus for performing multiplication in finite field GF(2n) | |
EP2951926B1 (en) | Ldpc code design and encoding apparatus for their application | |
CN109951250B (zh) | 通信信号的ldpc编码方法和装置 | |
CN101741397A (zh) | Rs译码装置及其使用的关键多项式求解装置 | |
KR100954843B1 (ko) | 센서 모트에서의 블록 인덱싱 기반의 타원 곡선 암호 연산 방법, 그 장치 및 이를 기록한 기록 매체 | |
Yan et al. | Fast and low-complexity decoding algorithm and architecture for quadruple-error-correcting RS codes | |
EP2797237A1 (en) | High speed add-compare-select circuit | |
Detchart et al. | Polynomial ring transforms for efficient XOR-based erasure coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EC01 | Cancellation of recordation of patent licensing contract |
Assignee: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd. Assignor: Shanghai Pleiades Microelectronics Co.,Ltd. Contract record no.: 2016110000016 Date of cancellation: 20211026 |
|
EC01 | Cancellation of recordation of patent licensing contract |