本发明属于信道编码技术领域,特别是一种用于ldpc译码器的高效交织器及交织方法。
背景技术:
ldpc码是一种接近香农极限的好码,其译码方式主要有常规的tpmp(towphasemessagepassing)方式和tdmp(turbodecodingmessagepassing)方式。通常情况下tdmp方式译码收敛更快,即在相同的迭代次数下能够获得更好的性能,或者说在相同性能的前提下能够更快的收敛,从而减少译码时间。一些特殊构造的准循环ldpc码(quasi-cyclicldpc),其结构非常适用于tdmp方式进行译码,相比传统的tpmp方式,在保证译码性能的前提下tdmp可以有效提高译码器的吞吐率、降低译码延时,是一种有效的低延时译码方法。tdmp的译码过程类似于turbo码,可以认为是由分量译码器和交织器组成。因此交织器这个功能模块是译码器中非常重要的一部分,对译码器的资源消耗和吞吐率都会产生重大影响,这个部分的设计能否做到高效是能否设计出高效译码器的关键。
现有技术中为了保证译码过程能够高速并行处理往往都是采用benes网络作为交织器(benes网络是一种可以任意交换输入节点顺序的网络)。这种结构的交织器的好处是可以实现完全并行处理。缺点是当码长变长时消耗的资源程指数级上升。根据在fpga平台上的实际实现结果,实现一个8×8的benes网络即8个节点的交织器需要消耗逻辑单元数为896个,而一个64×64的benes网络则需消耗11264个逻辑单元,当benes网络的规模较大时所需资源非常可观,也就是说对于规模较大的benes网络在fpga中是很难实现的。
技术实现要素:
本发明的目的在于提供一种用于ldpc译码器的高效交织器及交织方法。
实现本发明目的的技术解决方案为:一种用于ldpc译码器的高效交织器,包括;
读写地址发生器,用于产生对ram块组的写入及读出地址信号;
ram块组,由p块独立的双口ram块组成,每块双口ram由fpga的分布式ram生成,在读出和写入时采取不同的地址生成策略,完成数据交织;
p个消息循环移位器,由级联的触发器构成,将数据并行写入,并执行移位操作。
一种用于ldpc译码器的高效交织方法,包括如下步骤:
将译码器输入的信息序列按照ram1地址0、ram2地址0到ramp地址0再到ram1地址1的顺序写入各块ram中;
同时读出p独立ram块中的一个地址的数据;每个独立ram块的相应读出地址按照校验矩阵中子矩阵非零元素的排列规律计算得到;
将并行读出的p个数据送入p个消息循环移位器,进行循环移位操作将送入的数据进行顺序调整,使得本次操作中第一行对应的非零元素所对应的信息值排在第一个;
将调整好顺序的p个信息值进行运算,运算结果为相互对应的p个输出结果,并将这p个结果按照读出时的位置顺序原位并行写回p个独立ram块中。
与现有技术相比,本发明的显著优点为:
(1)本发明采用存储器替代benes网络作为交织器;
(2)提出了采用分布式存储器作为主要实现资源,提高了资源利用率;
(3)提出了循环存储结构,满足了同时读写p个节点,并能够任意交换顺序。
附图说明
图1为准循环ldpc码校验矩阵示意图。
图2为循环存储器结构的交织器结构图。
图3为消息循环移位器结构图。
具体实施方式
所有的ldpc译码器在考虑实现时必须综合考虑吞吐率和资源消耗的均衡,因此往往采用了半并行结构。根据实际实现的并行度,每次交织器并不需要同时读出所有数据。当节点并行度为p时,每次只需要读出p个消息即可,基于此可以优化这个交织器的实现结构,实现资源与译码时间之间的均衡。
本发明提供一种用于ldpc译码器的高效交织器,包括;
读写地址发生器,用于产生对ram块组的写入及读出地址信号;
ram块组,由p块独立的双口ram块组成,每块双口ram都可以由fpga的分布式ram生成,其中每块ram的深度为z/p,其中z表示子矩阵的维度,p表示并行度,即双口独立ram的块数,存储器的位宽由译码器的量化精度决定;在读出和写入时采取不同的地址生成策略,完成数据交织;
p个消息循环移位器,由一系列级联的触发器构成,可以将数据并行写入,并执行移位操作。
进一步的,对于并行度为p的情况,读写地址发生器一共需要同时输出p组读写信号,即由p个并行的读地址发生器和p个并行的写地址发生器组成,其中每个地址发生器均可以进行特定规律的地址发生。
进一步的,读写地址发生器按照校验矩阵中每个子矩阵中非零元素的位置规律生成地址发生器的地址生成规则并通过计算产生相应地址输出,每个非零子矩阵中非零元素的位置存储于一个表中,由于校验矩阵中每个非零矩阵都是单位置换阵,因此无需存储所有非零元素的位置,只需要存储一个偏移量。
进一步的,所述p个消息循环移位器,首先通过读写接口将p个数据并行写入d触发器中,然后根据需要发送移位时钟脉冲,每发送一个脉冲移位寄存器中的数据进行一次右移。
进一步的,每块ram的读写地址由地址发生模块中相应的读写地址发生器进行控制。
进一步的,每种ldpc码对应一个校验矩阵,校验矩阵分割成一系列子矩阵,每个子矩阵维度相同;本发明中的校验矩阵和子矩阵的定义可以参考802.16e标准,其中定义了校验矩阵、校验矩阵中子矩阵的可能大小以及每个子矩阵中非零元素的排布规则。
进一步的,每种ldpc码对应一个校验矩阵,校验矩阵分割成一系列子矩阵,每个子矩阵维度相同;本发明中的校验矩阵和子矩阵的定义可以参考802.16e标准,其中定义了校验矩阵、校验矩阵中子矩阵的可能大小以及每个子矩阵中非零元素的排布规则。
本发明还提供一种用于ldpc译码器的高效交织方法,包括如下步骤:
1)将译码器输入的信息序列按照图2所示顺序写入各块ram中;即按照ram1地址0-ram2地址0到ramp地址0再到ram1地址1的顺序写入。
2)同时读出p独立ram块中的一个地址的数据;每个独立ram块的相应读出地址按照校验矩阵中子矩阵非零元素的排列规律计算得到;
3)将并行读出的p个数据送入p个单元的循环移位寄存器,进行循环移位操作将送入的数据进行顺序调整,使得本次操作中第一行对应的非零元素所对应的信息值排在第一个;
4)将调整好顺序的p个信息值进行运算,运算结果为相互对应的p个输出结果,并将这p个结果按照读出时的位置顺序原位并行写回p个独立ram块中。
所述运算为节点更新运算,是译码算法中的核心运算,一般采用msa算法,算法具体实现主要是对输入信息进行排序找出最小值和次小值,输出值为最小值和次小值中的某一个,其中输入值最小的位置对应次小值,其余位置对应最小值。
本发明提出的方法是利用小块存储器替代benes网络中的大量逻辑资源,通过读写地址控制的方法,替代benes网络实现的交织过程从而在满足译码器实时性要求的前提下大大减小资源消耗,提高译码器的可实现性。
ldpc码中所采样的交织器的功能通常是将多个数据节点按照一定顺序交换顺序后输出,然后进行运算,再将运算结果进行顺序交换换回原来的顺序后将数据原位写回。在传统方案中通常需要使用两次benes网络,本发明中将存储和顺序交换的过程合二为一,通过对读写地址控制和存储器结构的特殊设计,来完成读出-交换顺序-运算-交换顺序-写回的全过程。
首先从存储结构的设计方面采用了p块独立ram的结构,这样使得消息可以以并行度p同时读出,而非普通交织器设计中所采用的单块ram的存储结构。其次信息的写入顺序在读写地址发生器的控制下采用了逐块写入的方式,即相邻两个信息写入不同的独立ram块中。这种特殊的存储结构和读写顺序的安排使得整个交织过程可以顺利完成。
考虑到fpga实现过程中存储器资源分为块存储器和分布式存储器两种,选择容量较小的分布式存储器作为实现资源,从而使得资源使用效率更高。选用分布式存储器的原因如下。以xilinx公司的virtex系列fpga为例,其中每个slice包含8个触发器,如果作为存储资源来使用,只能存储8bit数据。但是同样一个slice包含4个6输入lut,每个6输入lut如果作为分布式ram使用则相当于64比特的分布式ram,因此每个slice最多可以提供256比特的分布式ram,资源的利用效率远高于直接使用触发器。由于本发明中所使用的存储器单块规模较小(通常为几十个比特),利用块状ram效率也较低,因为块状ram的最小容量为18k比特,而因为读写端口被占用,即使只使用了每一块中很小的容量,剩余容量也无法使用,造成很大浪费。因此采用分布式ram作为实现高效交织器的主要实现资源是一种最佳方案。
本发明中所使用到的每块独立ram的容量较小,分布式ram的特点就是可以构建小容量的独立ram,而块状ram每个独立ram的容量都偏大,如果使用块状ram会造成较大的资源浪费。
本发明提出的这种消息循环存储器结构,采用了分布式ram作为消息存储器,极大的提高了存储效率。另外分布式ram本身就是由小块ram构成,一个6输入的lut可以配置成一个容量仅有64比特的分布式ram。比较适合本发明提出的这种多块小ram的结构。而读写控制和地址发生电路比较简单,仅消耗少量逻辑资源。p个消息的循环移位器也仅消耗少量触发器资源。根据在fpga平台上实现的实测结果,一个8比特位宽,8个消息的循环移位器只需要消耗192个逻辑单元,逻辑资源消耗远远小于benes网。从总体资源消耗来看本发明提出的这种实现结构由于取消了benes网络,其逻辑资源的消耗基本上能够做到与码长呈线性关系,因此本发明提出的这种新的交织器结构,是一种比较高效的实现结构,尤其适用于码长较长的准循环ldpc码的fpga实现。
下面结合附图对本发明的原理及工作过程进行详细说明。
如图1所示为一个ldpc码的校验矩阵示意图,图中矩阵有3个子矩阵,子矩阵的个数记为nb,每个子矩阵均为方阵,方阵的维度为8记为z,在操作时一次同时处理的节点个数叫做并行度,取并行度为4,记为p。图中黑色小方格表示非零元素,其余各自为0元素。ldpc码的码长记为n,n=nb×z=24。译码过程相关流程如下。
译码器输入n个信序列记作ri,i=1...n,每个点对应矩阵中的一个列一一对应,即r1对应矩阵的第一列。译码过程中先将矩阵第一行中非零元素对应的输入序列取出,即取出r2、r12、r17,然后对这3个信息点进行运算后得到3个相应结果,将结果原位存回到相应位置即2、12、17的位置。然后开始第二行的处理直到将校验矩阵的8行全部处理完。
在实际处理过程中,由于每行之间非零元素的位置没有重合,所以实际上矩阵中的z行可以同时处理。当然实际上综合考虑资源消耗和效率并行度通常会小于z,一般取一个可以整除z的数,记作p,当前例子中可以取4,即每次同时处理4行。
在处理过程中由于一般输入序列的值是顺序存储的,那么当对每一行进行处理时就需要按照非零元素的具体位置读出信息进行处理,而这个位置并非是顺序排列的。传统的处理方法是利用nb个benes网络,每个网络对应一个子矩阵。将每个子矩阵所对应的那几个信息通过benes网络进行顺序交换,然后在进行数据运算,运算完毕后在通过benes网络交换回原顺序进行存储。例如图1中左边第一个子矩阵在进行处理时实际上信息序列的排列顺序应该是2-3-4-5-6-7-8-1,那么就先通过benes网络将原来的顺序交换到2-3-4-5-6-7-8-1,进行计算后再将结果交换回1-2-3-4-5-6-7-8再进行存储。这里利用了两次benes网络,但是我们可以发现用benes网络进行这样的交换显然没有发挥出benes网络可以任意交换的优势。
本发明提出的新方案不再采用benes网络进行顺序交换即交织操作,而是构造一种特殊的存储和读取结构达到同样的效果。以图1为例进行说明。先构造一个存储器块,该存储器块采用分布式ram实现,为了满足并行度p,该存储器块由p块独立的ram构成,每块独立的ram的深度为z/p。
交织器的组成结构图如图2所示,由读写地址发生器、ram块组和循环移位寄存器这三部分组成。
1)读写地址发生器用于产生对ram块组的写入及读出地址信号,如图2所示对于并行度为p的情况,该模块一共需要同时输出p组读写信号,即由p个并行的读地址发生器和p个并行的写地址发生器组成,其中每个地址发生器都可以进行特定规律的地址发生,本发明中的地址发生器按照校验矩阵中每个子矩阵中非零元素的位置规律生成地址发生器的地址生成规则并通过计算产生相应地址输出,每个非零子矩阵中非零元素的位置存储于一个表中,由于校验矩阵中每个非零矩阵都是单位置换阵,因此无需存储所有非零元素的位置,只需要存储一个偏移量即可。
2)ram块组,由p块独立的双口ram块组成,每块双口ram都可以由fpga的分布式ram生成其中每块ram的深度为z/p,存储器的位宽由译码器的量化精度决定。每块ram的读写地址由地址发生模块中相应的读写地址发生器进行控制。在读出和写入时采取不同的地址生成策略,完成数据交织。
3)p个消息循环移位器
该模块实际上就是一个循环移位寄存器由一些列级联的触发器构成,可以将数据并行写入,并执行移位操作。结构如图3所示,首先通过读写接口将p个数据并行写入d触发器中,然后根据需要发送移位时钟脉冲,每发送一个脉冲移位寄存器中的数据进行一次右移。
下面以图1中校验矩阵的第一个子矩阵为例,说明这种新的交织器的工作过程。
1)先将信息序列按照图2所示位置存入ram块中,即r1存入ram1的地址0,即r2存入ram2的地址0,此时写地址控制器产生相应的读写地址序列为0-0-0-0。
2)同时读出ram1、ram2、ram3和ram4中存储的内容,其中ram2-ram4读取地址0的数据,ram1读取地址1的数据,读地址发生器产生的度地址为1-0-0-0。这样p个数据就被同时读出了,其排列顺序为r5-r2-r3-r4。
3)采用循环移位的方法调整排列顺序,只需将序列r5-r2-r3-r4送入移位寄存器,进行一次循环左移即可使得读出数据按照r2-r3-r4-r5的顺序排列。其它子矩阵的处理方式同第一个子矩阵,这样每个子矩阵都会同时读出p个数据。如第二个子矩阵会读出r12-r13-r14-r15,第三个子矩阵会读出r17-r18-r19-r20。
4)利用三个子矩阵读出的数据,将r2、r12、r17作为一组,进行运算得到3个运算结果s2、s12、s17分别与r2、r12、r17相对应,将结果替代r2、r12、r17原位存储。由于在第三步同时读出了p个数据,其余p-1组数据也可以同时进行计算和更新,如r3、r13、r18也同时并发进行运算得到结果然后将结果按照原位写回ram组中。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种用于ldpc译码器的高效交织器,其特征在于,包括;
读写地址发生器,用于产生对ram块组的写入及读出地址信号;
ram块组,由p块独立的双口ram块组成,每块双口ram由fpga的分布式ram生成,在读出和写入时采取不同的地址生成策略,完成数据交织;
p个消息循环移位器,由级联的触发器构成,将数据并行写入,并执行移位操作。
2.根据权利要求1所述的用于ldpc译码器的高效交织器,其特征在于,对于并行度为p的情况,读写地址发生器需同时输出p组读写信号,即由p个并行的读地址发生器和p个并行的写地址发生器组成,其中每个地址发生器均可以进行特定规律的地址发生。
3.根据权利要求1所述的用于ldpc译码器的高效交织器,其特征在于,每种ldpc码对应一个校验矩阵,校验矩阵分割成一系列子矩阵,每个子矩阵维度相同。
4.根据权利要求3所述的用于ldpc译码器的高效交织器,其特征在于,读写地址发生器按照校验矩阵中每个子矩阵中非零元素的位置规律生成地址发生器的地址生成规则并通过计算产生相应地址输出,每个非零子矩阵中非零元素的位置存储于一个表中,由于校验矩阵中每个非零矩阵都是单位置换阵,因此无需存储所有非零元素的位置,只需要存储一个偏移量。
5.根据权利要求4所述的用于ldpc译码器的高效交织器,其特征在于,每块ram的深度为z/p,其中z表示子矩阵的维度,p表示并行度。
6.根据权利要求1所述的用于ldpc译码器的高效交织器,其特征在于,所述p个消息循环移位器,首先通过读写接口将p个数据并行写入d触发器中,然后根据需要发送移位时钟脉冲,每发送一个脉冲移位寄存器中的数据进行一次右移。
7.根据权利要求1所述的用于ldpc译码器的高效交织器,其特征在于,每块ram的读写地址由地址发生模块中相应的读写地址发生器进行控制。
8.根据权利要求1所述的用于ldpc译码器的高效交织器,其特征在于,ram块组在写入时按照顺序写入,读出时按照校验矩阵子矩阵中非零元素的排列顺序,即单位置换阵的偏移量计算得到读地址。
9.一种用于ldpc译码器的高效交织方法,其特征在于,包括如下步骤:
将译码器输入的信息序列按照ram1地址0、ram2地址0到ramp地址0再到ram1地址1的顺序写入各块ram中;
同时读出p独立ram块中的一个地址的数据;每个独立ram块的相应读出地址按照校验矩阵中子矩阵非零元素的排列规律计算得到;
将并行读出的p个数据送入p个消息循环移位器,进行循环移位操作将送入的数据进行顺序调整,使得本次操作中第一行对应的非零元素所对应的信息值排在第一个;
将调整好顺序的p个信息值进行运算,运算结果为相互对应的p个输出结果,并将这p个结果按照读出时的位置顺序原位并行写回p个独立ram块中。
10.根据权利要求9所述的用于ldpc译码器的高效交织方法,其特征在于,将调整好顺序的p个信息值进行运算,所述运算为节点更新运算,采用msa算法,算法具体实现主要是对输入信息进行排序找出最小值和次小值,输出值为最小值和次小值中的某一个,其中输入值最小的位置对应次小值,其余位置对应最小值。
技术总结