首页> 中国专利> 一种基于FPGA的LDPC译码器的译码码字的高效存储方法

一种基于FPGA的LDPC译码器的译码码字的高效存储方法

摘要

一种基于FPGA的LDPC译码器的译码码字的高效存储方法,在该方法中译码码字和外信息(或信道信息)共用同一个存储块,有效地减少了译码器系统对存储资源数量的需求;而且读取存储块的同时可以取出译码码字和外信息。所以,校验方程计算单元PCU可以与校验节点更新单元CNU共享同一组地址信息,PCU不需要额外的地址产生器单元;最后,对于处理单元VNU,CNU,PCU均采用逐级细化流水线的设计方法来实现,有效地降低了译码器的关键路径延迟,为提高LDPC译码器的吞吐量提供了必要的保障。对于本文提出的方法采用FPGA进行实现时,不仅可以节省大量的用于单独存储译码码字的资源和产生PCU所需地址的逻辑资源,而且提高了译码器的吞吐量。

著录项

  • 公开/公告号CN101599302A

    专利类型发明专利

  • 公开/公告日2009-12-09

    原文格式PDF

  • 申请/专利权人 西安空间无线电技术研究所;

    申请/专利号CN200910089662.X

  • 申请日2009-07-23

  • 分类号G11C16/06;H03M13/03;H04L29/02;

  • 代理机构中国航天科技专利中心;

  • 代理人安丽

  • 地址 710000 陕西省西安市165信箱

  • 入库时间 2023-12-17 23:10:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-05-09

    授权

    授权

  • 2010-02-03

    实质审查的生效

    实质审查的生效

  • 2009-12-09

    公开

    公开

说明书

技术领域

本发明涉及一种LDPC译码器的译码码字的存储方法,具体地说是将译码码字和外信息(或信道信息)共用同一个存储块的方法,是一种FPGA资源占用少,译码吞吐量高的有效存储解决方法。

背景技术

在现代数字通信系统中,为保证各种数据能够可靠、有效地传输,往往要利用纠错编码技术。近年来,随着数字通信的发展及各种高速率数据业务的出现,研究并利用纠错编码技术就显得越来越重要。理论研究表明LDPC码是目前已知最优秀的纠错编码技术,研究结果显示,码率为1/2、码长为107的非规则LDPC码在AWGN信道上,其性能距容量限只差0.04dB,是迄今为止最接近Shannon限的纠错码,Gallager在上世纪六十年代初发明LDPC码时,由于受到当时硬件水平的限制并没有得到应用,随着大规模集成电路技术的发展,LDPC码已经从理论研究进入了实用发展的阶段。虽然LDPC码具有线性译码复杂度,但采用FPGA对LDPC译码器进行实现时,不仅需要占用了大量的FPGA资源而且译码吞吐量低,不能满足高速数据传输的需求。

在目前的背景技术中,有大量的关于LDPC码译码器的文献,但译码码字的存储采用单独的block RAM(代表文献:K.Shimizu,etc.,“Partially-parallelLDPC decoder based on high-efficiency message-passing algorithm,”in Proc.Int.Conf.on Computer Design(ICCD),Oct.2005,pp.503-510.),distributed RAM(代表文献:Y.Chen and D.Hocevar,“A FPGA and ASIC implementation of rate 1/2,8088-b irregular low density parity check decoder,”in Proc.IEEE GLOBECOM,2003,pp.113-117)或者register memory(代表文献:Zhongfeng Wang,ZhiqiangCui,“Low-Complexity High-Speed Decoder Design for Quasi-Cyclic LDPCCodes,”IEEE trans.On VLSI systems,vol.15,no.1,Jan.2007.pp.104-114)。register memory和distributed RAM均要占用FPGA芯片的逻辑资源,即slices资源。

发明内容

本发明的技术解决问题是:克服现有LDPC译码器内部信息存储技术的不足,提出了一种提高LDPC译码器的存储资源利用率的存储方法,本发明不仅可以节省大量的用于单独存储译码码字的资源和产生PCU所需地址的逻辑资源。

本发明进一步的技术解决问题是:通过采用内部细化流水线的设计方法提高了译码器的吞吐量。

本发明的技术解决方案一是:一种基于FPGA的LDPC译码器的译码码字的高效存储方法,所述的LDPC译码器结构包括存储位宽均为(Q+1)bits的存储块RAM_f和RAM_m,变量节点处理单元VNU,校验节点处理单元CNU,校验方程计算单元PCU;方法步骤如下:

(1)初始化步骤:LDPC译码器将接收到的位宽为Q bits的信道信息扩展为(Q+1)bits后存储到RAM_f中,将RAM_m初始化为全零,初始化迭代次数iter=0,最大迭代次数iter=MAX_ITER;

(2)变量节点的更新步骤:

a)从存储块RAM_f和RAM_m中分别读出(Q+1)bits的数据A和B;

b)将数据A和B分别拆分为Q bits的数据和1bit的数据;其中,数据A拆分成Q bits的信道信息A1和1bit的码字信息A0;数据B拆分成Q bits的外信息B1和1bit的码字信息B0;

c)将信道信息A1和外信息B1输入给变量节点处理单元VNU,变量节点处理单元VNU对输入的信息进行处理后得到更新的信道信息A1_new,外信息B1_new及本次迭代产生的译码码字C0_new;

d)将更新的信道信息A1_new与译码码字C0_new合并成一个(Q+1)bits的A_new并按照读出数据A的地址写回到存储块RAM_f中,更新的外信息B1_new与译码码字C0_new合并成一个(Q+1)bits的B_new,并将B_new按照读出数据B的地址写回存储块RAM_m中,做为RAM_m中存储的新的数据B;

(3)校验节点的更新步骤:

i,从存储块RAM_m中读出(Q+1)bits的数据B,将数据B拆分成Q bits的外信息B1和1bit的码字信息B0;

ii,将步骤i的外信息B1输入给校验节点处理单元CNU,将码字信息B0输入给校验方程计算单元PCU;校验节点处理单元CNU进行处理后得到更新的Q bits外信息B1_new,将更新的Q bits的外信息B1_new扩展为一个(Q+1)bits的B_new,并将该B_new按照读出数据B的地址写回RAM_m中,做为RAM_m中存储的新的数据B;校验方程计算单元PCU对码字信息B0进行计算处理后得到伴随式向量s;本次迭代结束,迭代次数iter加1;

iii,判断伴随式向量s是否为零或者迭代次数是否达到MAX_ITER;若s=0,则表示此次更新的译码码字为许用码字,转步骤iv;若s≠0且iter=MAX_ITER,则停止迭代,译码失败,转步骤iv;否则,从步骤(2)开始继续迭代;

iv,从存储块RAM_f中读出数据A_new,将A_new的最高位拆分出来即为需要输出的译码码字。

本发明的技术解决方案二是:一种基于FPGA的LDPC译码器的译码码字的高效存储方法,所述的LDPC译码器结构包括存储位宽均为(Q+1)bits的存储块RAM_f和RAM_m,变量节点处理单元VNU,校验节点处理单元CNU,校验方程计算单元PCU;方法步骤如下:

(1)初始化步骤:LDPC译码器将接收到的位宽为Q bits的信道信息扩展为(Q+1)bits后存储到RAM_f中,将RAM_m按照LDPC译码器校验矩阵的非零位置初始化为上述(Q+1)bits信息,初始化迭代次数iter=0,最大迭代次数iter=MAX_ITER;

(2)校验节点的更新步骤:

i,从存储块RAM_m中读出(Q+1)bits的数据B,将数据B拆分成Q bits的外信息B1和1bit的码字信息B0;

ii,将步骤i的外信息B1输入给校验节点处理单元CNU,将码字信息B0输入给校验方程计算单元PCU;校验节点处理单元CNU进行处理后得到更新的外信息B1_new,将更新的Q bits的外信息B1_new扩展为一个(Q+1)bits的B_new,并将该B_new按照读出数据B的地址写回RAM_m中,做为RAM_m中存储的新的数据B;校验方程计算单元PCU进行计算处理后得到伴随式向量s;本次迭代结束,迭代次数iter加1;

iii,判断伴随式向量s是否为零或者迭代次数是否达到MAX_ITER;若s=0,则表示此次更新的译码码字为许用码字,转步骤iv;若s≠0且iter=MAX_ITER,则停止迭代,译码失败,转步骤iv;否则,转步骤(3);

iv,从存储块RAM_f中读出数据A,将A的最高位拆分出来即为需要输出的译码码字;

(3)变量节点的更新步骤:

a)从存储块RAM_f和RAM_m中分别读出(Q+1)bits的数据A和B;

b)将数据A和B分别拆分为Q bits的数据和1bit的数据;其中,数据A拆分成Q bits的信道信息A1和1bit的码字信息A0;数据B拆分成Q bits的外信息B1和1bit的码字信息B0;

c)将信道信息A1和外信息B1输入给变量节点处理单元VNU,变量节点处理单元VNU对输入的信息进行处理后得到更新的信道信息A1_new,外信息B1_new及本次迭代产生的译码码字C0_new;

d)将更新的信道信息A1_new与译码码字C0_new合并成一个(Q+1)bits的A_new并按照读出数据A的地址写回到存储块RAM_f中,更新的外信息B1_new与译码码字C0_new合并成一个(Q+1)bits的B_new,并将该B_new按照读出数据B的地址写回RAM_m中,做为RAM_m中存储的新的数据B,转步骤(2)继续执行。

上述两个方案中的变量节点处理单元VNU、校验节点处理单元CNU、校验方程计算单元PCU均采用逐级细化流水线的方法实现。

其中,变量节点处理单元VNU采用5级流水线实现,第1级流水线将输入的外信息和信道信息原码转换为补码,并将输入的外信息延迟;第2级流水线继续将外信息延迟,并将外信息和信道信息求和;第3级流水线将所述的和值延迟,并将该和值与所述的外信息分别求差;第4级流水线对上述差值进行截位处理,并继续将上述的和值延迟;第5级流水线将截位处理后的数据由补码转换为原码输出,并取出和值的符号作为码字信息输出。当一个时钟周期内需要完成求两个以上数据的和时,会导致关键路径延迟,为了降低关键路径延迟,在第2级流水线中再插入流水线。

所述的校验节点处理单元CNU采用5级流水线实现,第1级流水线用来分离出输入的外信息的符号位和绝对值,第2级流水线求输入的外信息的符号位的和及将所述的符号位进行延迟,并求出第1级流水线分离出的绝对值的最小值和次小值,及将所述的绝对值进行延迟;第3级流水线继续将上述符号位、绝对值、符号位的和值、最小值及次小值分别进行延迟,并求出最小值、次小值分别与归一化修正因子alpha相乘的结果;第4级流水线对第3级流水线输出的所有符号位分别与符号位的和值求和,并将第3级流水线输出的所有绝对值与最小值进行比较并选择输出;第5级流水线将第4级流水线的所有输出进行合并后输出。所述的第4级流水线将第3级流水线输出的所有绝对值与最小值进行比较并选择过程为:当第3级流水线输出的绝对值为最小值时,输出次小值与归一化修正因子alpha的积,否则,输出为最小值与归一化修正因子alpha的积。

所述的校验方程计算单元PCU采用1级流水线实现,输入的码字信息在该流水线中求异或得到伴随式向量s,通过延迟将伴随式向量s中的所有元素相加,得到和V,当V=0时,伴随式向量s为零。

本发明与现有技术相比有益效果为:

(1)本发明提出了一种提高LDPC译码器的存储资源利用率的存储方法,这种方法不仅不需要额外的block RAM存储块来存储译码码字,而且不使用slices资源来存储译码码字,有效地减少了译码器系统对存储资源数量的需求。在本方法中译码码字和外信息(或信道信息)共用同一个存储块,有效地减少了译码器系统对存储资源数量的需求,而且采用这种存储方式后,读取存储块的同时可以取出译码码字和外信息。所以,校验方程计算单元PCU可以与校验节点更新单元CNU共享同一组地址信息,PCU不需要额外的地址产生器单元。另外,本发明的方法,对于全并行译码器,可以有效地改善路由拥挤,并可以节省访问寄存器的地址资源。对于部分并行译码器和串行译码器来说,可以降低存储块的个数或者节省FPGA的逻辑资源。

(2)本发明处理单元VNU,CNU,PCU均采用逐级细化流水线的设计方法来实现,有效地降低了译码器的关键路径延迟,为提高LDPC译码器的吞吐量提供了必要的保障。对于本文提出的方法采用FPGA进行实现时,不仅可以节省大量的用于单独存储译码码字的资源和产生PCU所需地址的逻辑资源,而且通过采用内部细化流水线的设计方法提高了译码器的吞吐量。

(3)本发明采用合并/拆分比特的方法来分别获取LDPC迭代译码过程三种信息:信道信息,外信息和译码码字信息,译码码字和外信息(或信道信息)共用同一个存储块,有效地减少了译码器系统对存储资源数量的需求。

(4)还提出了资源占用少且高速的实现PCU的结构,这种结构不需要采用寄存器资源来存储长位宽的伴随式向量s,也不需要进行长位宽数据与零向量的比较(造成很大的延迟)。

附图说明

图1为本发明提出的高效存储方法的LDPC译码器结构;

图2为LDPC(8176,7154)的校验矩阵非零元素的分布图;

图3为归一化最小和量化译码与和积译码算法的性能比较;

图4为本发明5-输入VNU的流水线结构;

图5为本发明32-输入CNU的流水线结构;

图6为本发明求32个输入数据的最小值和次小值的流水线结构;

图7为本发明PCU的实现结构。

具体实施方式

如图1所示,本发明一种基于FPGA的LDPC译码器的译码码字的高效存储方法,所述的LDPC译码器结构包括存储位宽均为(Q+1)bits的存储块RAM_f和RAM_m,变量节点处理单元VNU,校验节点处理单元CNU,校验方程计算单元PCU;方法步骤如下:

(1)初始化:译码器将接收到的位宽为Q bits的信道信息扩展为(Q+1)bits(通过合并单元将高位补‘0’或者补‘1’)存储到RAM_f中,将RAM_m初始化为全零,初始化迭代次数iter=0,最大迭代次数iter=MAX_ITER;

(2)变量节点的更新:a)从存储块RAM_f和RAM_m中分别读出(Q+1)bits的数据A和B;b)将数据A和B分别拆分为Q bits的数据(A和B的低Q位,分别用A1和B1来表示)和1bit的数据(A和B最高位,分别用A0和B0来表示),本专利的存储结构中A1和B1才分别是信道信息和外信息,A0和B0里面存储的是码字信息;c)将信道信息和外信息作为VNU的输入,VNU对输入进行计算处理后得到更新的信道信息A1_new,外信息B1_new及本次迭代产生的译码码字C0_new。d)将Q bits的A1_new与C0_new合并成一个(Q+1)bits的A_new并按照读出A的地址写回RAM_f中,Q bits的B1_new与C0_new合并成一个(Q+1)bits的B_new,并将该B_new按照读出数据B的地址写回RAM_m中,做为RAM_m中存储的新的数据B。

(3)校验节点的更新:a)从存储块RAM_m中读出(Q+1)bits的数据B,从RAM_m中取出的数据即为LDPC码校验矩阵非零行所在位置的数据;b)将B拆分为Q bits的数据(B的低Q位,用B1来表示)和1bit的数据(B最高位,用B0来表示),可见B0即码字信息,B1即为外信息;c)将外信息B1作为CNU的输入,CNU进行计算处理后得到更新的外信息B1_new,并将更新的Q bits的外信息B1_new扩展为一个(Q+1)bits的B_new(高位补‘0’或者补‘1’)按照读出数据B的地址写回RAM_m中,作为RAM_m中存储的新的数据B。同时将码字信息B0作为PCU的输入,PCU进行计算处理后得到伴随式向量s。完成(3)后,迭代次数iter加1;

(4)如果伴随式向量s为零,则表示此次更新的译码码字为许用码字,即可等待输出,或者,如果iter=MAX_ITER,则停止迭代,显示译码失败标示,并等待输出这些纠正了一些错误的码字。否则,返回(2)继续迭代。输出最终的译码码字时,即从RAM_f依次读出数据A,将A的最高位拆分出来即为需要输出的译码码字。

当(1)初始化步骤中将存储块RAM_m初始化为RAM_f中信息时,需要先进行校验节点更新,然后进行变量节点的更新。

方法中的VNU(变量节点处理单元),CNU(校验节点处理单元)和PCU(校验方程计算单元)均采用逐级细化流水线的设计方法实现,有效地降低了译码器的关键路径延迟,为提高LDPC译码器的吞吐量提供了必要的保障。

关于本发明方法中的归一化修正因子,译码过程更新信息的量化比特数Q,及最大迭代次数MAX_ITER在译码器译码算法确定的情况下,对于本领域技术人员来讲,采用编译码系统仿真的方法,就能得到这些参数,为本领域技术人员公知的常识,这里不再进行详细说明。

下面以LDPC(8176,7154)为例来详细说明本发明。

如图2,LDPC(8176,7154)是一个QC-LDPC码(即准循环移位LDPC码),它的校验矩阵是由2×16个L×L(L=511)的循环矩阵构成的,该校验矩阵大小为M×N=1022×8176,Ai,j是一个511×511的循环矩阵,Ai,j的每行每列中均有两个非零元素,即Ai,j的行重为2,所以该校验矩阵的行重为2×16=32,列重为2×2=4。校验矩阵结构如下:

A1,1A1,2···A1,14A1,15A1,16A2,1A2,2···A2,14A2,15A2,16

LDPC码的译码通常采用的是和积算法,但其中的非线性运算较复杂,需要采用查找表结构,这样在硬件上必须用ROM来存储这些表格。最小和算法避免了查找表的出现,减少了硬件存储资源的占用,且经过归一化改进后的归一化最小和算法可以非常接近和积算法的性能(可以参考J.H.Chen etc.,“Reduced-complexity decoding of LDPC codes,”IEEE Trans.on Commun.vol.53,no.8,Aug.2005,pp.1288-1299.)。而且归一化最小和算法内部主要进行比较运算,所以不需要信道估计,而信道估计的偏差会对和积译码算法造成性能上的损失,而且信道估计也需要占用大量的FPGA资源来实现,所以本实施例中采用归一化最小和算法的译码算法,对于归一化最小和算法需要确定它的归一化修正因子。在进行译码器设计之前需要确定归一化修正因子,译码过程更新信息的量化比特数Q,及最大迭代次数MAX_ITER。对LDPC(8176,7154)编译码的性能进行了编译码系统仿真,可以得到如图3所示的曲线图。从图3的仿真曲线可以看到,对于和积译码,迭代10次和迭代50次译码性能仅损失不到0.2dB,在工程实现时,采用10次迭代就足够了;选择alpha=0.75(本发明中alpha等于J.H.Chen文章中公式(9)的1/α)的归一化最小和译码算法和对译码器中的数据进行量化(信道信息和中间传递的外信息均采用7bits量化,这两种信息的小数位均占2bits)与和积译码算法进行比较,译码性能相对于同样迭代次数的和积算法损失不到0.1dB,大约损失0.05dB。最终,本发明采用了归一化修正因子为0.75的归一化最小和译码算法,量化比特数Q=7,最大迭代次数MAX_ITER=10。

对于这个QC-LDPC(8176,7154)译码器,需要16个RAM_f存储系列(RAM_f1,......,RAM_f16)和16×2×2=64个RAM_m存储系列,每个存储器的位宽均为(Q+1)bits,即8bits。16个变量节点处理单元(VNU1,......,VNU16),2个校验节点处理单元(CNU1,CNU2)和2个校验方程计算单元(PCU,PCU2)。具体实现过程按照上面发明内容给出的(4)步。下面重点介绍步骤(2)(3)中的VNU(变量节点处理单元),CNU(校验节点处理单元)和PCU(校验方程计算单元)的逐级细化流水线的设计方法;上述结构属于部分并行译码器的结构。当变量节点处理单元VNU、校验节点处理单元CNU、校验方程计算单元PCU都为1个时,为串行译码器结构;当变量节点处理单元VNU为8176个、校验节点处理单元CNU、校验方程计算单元PCU为1022个为全并行译码器结构。

从上面LDPC(8176,7154)校验矩阵结构可以看到,它的校验矩阵的行重为32,列重为4。变量节点处理单元VNU有5个输入(4个外信息in1,......,in4和1个信道信息f)和5个输出(4个外信息out1,......,out4和1个码字信息c),而校验节点处理单元CNU有32个输入(32个外信息in1,......,in32)和32个输出(32个外信息out1,......,out32),校验方程计算单元PCU具有32个输入(32个码字信息in1,......,in32)和1个输出(伴随式向量s)。LDPC所采用的译码算法不同,只是VNU,CNU的运算处理单元不同,其他的都相同,可见本发明的这种高效存储译码码字的结构适合于任何LDPC码的迭代译码算法。例如,当不采用归一化最小和算法而采用和积算法时,CNU的运算处理单元中包含非线性运算,需要采用查找表的方法来实现。对于本发明采用的归一化最小和算法(请参考上面提到的J.H.Chen的文章),VNU主要是加减运算采用补码表示比较方便,CNU需要求绝对值和比较大小采用原码来运算比较方便,考虑到VNU仅处理4个数据而CNU需要处理32个数据,在VNU中,加入原码转换为补码的操作。可见RAM_m中存储的是原码形式的数据,又因为只有VNU才需要从RAM_f中读取数据,所以RAM_f中存储补码形式的数据。上述转换具体表述为:正数的补码等于原码,而负数的补码等于原码取反加1。同样正数的原码等于补码,而负数的原码等于补码取反加1。

VNU的输出与输入的关系为:outi=sum-ini,i=1,2,3,4,其中sum为输入的5个数的和。实现VNU的流水线结构如图4所示,为了降低VNU的关键路径延迟大体需要插入5级流水线,图4中的虚线表示流水线,VNU的所有输入和输出均采用原码来表示,图4中,f和c分别表示信道信息和码字信息,in1,......,in4表示外信息,加法器阵列的主要功能是求出5个输入数据的和sum,减法器阵列是sum分别减去4个输入外信息数据。为了避免精度丢失,中间处理数据的位宽比输入输出的位宽宽,为了得到输出数据,必须采用截位模块对中间数据进行截位(截位处理方法请见文献G.Montorsi,S.Benedetto,“Design offixed-point iterative decoders for concatenated codes with interleavers,”IEEEJ.on Selected Areas in Commun.,vol.19,no.5,May 2001,pp.871-882.)。对于求多于两个数据的和时,为了进一步降低关键路径延迟,需要再细化流水线,即在第2级流水线中再插入流水线。

CNU的输出与输入的关系为:outi=Πijsign(inj)×alpha×minmin|ini|Πijsign(inj)×alpha×sub_minmin=|ini|

sign(x)表示求x的符号,alpha为归一化修正因子,为一常数,min表示所有输入数据绝对值的最小值,sub_min表示所有输入数据绝对值的次小值。

实现CNU的流水线结构如图5所示,可以看到CNU的结构由上下两部分组成,上部分主要是对输入数据的符号进行运算,下部分主要是对输入数据的绝对值(即数值大小)进行运算,CNU总体上插入了5级流水线,第1级流水线用来分离出输入数据的符号位和绝对值,第2级流水线求32个符号位的和sign32(对于求1bit数据的和在硬件实现时采用异或xor操作),及将32个符号位进行延迟,并求出32个绝对值的最小值和次小值,及将32个绝对值进行延迟;第3级流水线继续将32个符号位、32个绝对值、sign32、最小值及次小值分别进行延迟,并求出最小值、次小值分别与alpha相乘的结果;第4级流水线对sign32与32个符号位分别进行求和得到32个输出,并根据32个绝对值与最小值的关系得到32个输出(如果输入是最小值,则输出为次小值与alpha的积,否则,输出为最小值与alpha的积);第5级流水线将对32个符号位运算的输出与对32个绝对值位运算的输出分别进行合并(符号位作为高位,绝对值作为其他位)得到32个CNU的输出

为了进一步提高处理速度,需要再细化流水线,即在第2级和第3级流水线中再插入流水线。第二级流水线,需要求出32个非负数的最小值和次小值,又采用了再细化流水线的方法,将其划分为具有4级流水线的求4个数的最小值和次小值的方法,如图6所示。第三级流水线,处理的是将data与alpha相乘,本实施例选择的alpha=0.75,data*0.75=(data/2)+(data/4),即data*0.75等价于将data右移一位的值与data右移二位的值相加。这样在FPGA中通过移位运算和加法运算就可以实现定点数与浮点数的乘法了。即可以在第三级流水线中插入两级流水线来提高CNU的总体处理速度。

PCU的功能是将码字与校验矩阵相乘,产生伴随式向量s,LDPC(8176,7154)的伴随式向量s的长度为1022,考虑到校验矩阵的分块特性,可以将长度为1022的s向量分块成2个长度为L=511的向量,最终需要判断的是向量s是否为零,因为当一个向量的所有的分量为零时,它才是零向量,所以,在实现时可以将向量s中的所有元素加起来,得到结果V,如图7所示,显然,只有当V=0时,伴随式向量s才为零。图7的这种实现方法不需要采用寄存器资源来存储长位宽的伴随式向量s,也不需要进行长位宽数据与零向量的比较(造成很大的延迟)。对于图7中的32个数求异或xor的操作,可以进一步细化流水线。

为了比较的公平性,本发明采用与Zhongfeng Wang文章(Zhongfeng Wang,Zhiqiang Cui,“Low-Complexity High-Speed Decoder Design for Quasi-CyclicLDPC Codes,”IEEE trans.On VLSI systems,vol.15,no.1,Jan.2007.pp.104-114)中同样的码QC-LDPC(8176,7154)码、同样的FPGA-Xilinx Vertex IIxc2v6000-6,如表1所示。本文这种译码器的实现方法比Zhongfeng Wang的译码器在slices资源和BRAM都具有很大的优势,本专利实现的译码器的资源能比Zhongfeng Wang的译码器降低一半多,这主要取决于它所采用的这种高效的LDPC译码器的译码码字的存储解决方法。而Zhongfeng Wang的译码器中则采用slices资源来存储译码码字时,消耗了大量的slices资源。Zhongfeng Wang的译码器采用的是和积算法,其中的非线性运算较复杂,需要采用查找表结构,这样在硬件上必须用ROM来存储这些表格,需要占用FPGA大量的BRAM资源。而本发明采用的这种归一化最小和算法可以不消耗这部分BRAM资源。

本发明译码器的低关键路径延迟和高吞吐量主要取决于:a)VNU,CNU,PCU的逐级细化流水线的设计方法和资源占用少且高速的实现PCU的结构。b)本实施例的译码器最大迭代次数为10次,而Zhongfeng Wang的译码器最大迭代次数为15次,但从本发明的附图3和Zhongfeng Wang的文章的图21中可以看到,本实施例的QC-LDPC(8176,7154)译码性能相对于ZhongfengWang的译码器的损失仅为0.1dB左右。在工程应用中可以忽略。

表1Xilinx FPGA XC2V6000-6实现统计

本发明未详细描述内容为本领域技术人员公知技术。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号