高速码率兼容DVB-S2的LDPC译码器的FPGA实现

2019-05-15 03:16谢天娇李波杨懋闫中江
西北工业大学学报 2019年2期
关键词:译码器码率译码

谢天娇, 李波, 杨懋, 闫中江

(1.西北工业大学 电子信息学院, 陕西 西安 710072; 2.中国空间技术研究院 西安分院, 陕西 西安 710100)

现阶段为了在地球探测卫星中使用高效的自适应编码调制技术,太空数据系统咨询委员会(consultative committee for space data systems,CCSDS)131.3-B-1标准[1]给出了采用DVB-S2标准[2]来传输CCSDS传输帧的方案解决了DVB-S2与CCSDS的格式兼容性问题。众所周知DVB-S2是欧洲第二代数字卫星电视广播标准,它给出了高功率高频谱效率的自适应编码调制系列解决方案,且已经获得了广泛应用,然而,由于卫星广播系统的最大传输吞吐量只有135 Mbit/s(兆比特每秒,Million bits per second),而地球探测卫星需要高达几个Gbit/s(千兆比特每秒,Giga bits per second)的吞吐量。可见DVB-S2标准中的自适应编译码器芯片不能直接应用于CCSDS,而迫切需要研究千兆比特每秒的高速LDPC编译码器方案,另外地球探测卫星与地面接收站的距离会周期性变化,且其Ka波段的载频受雨衰影响较大,这就需要其具有码率兼容的自适应特性。因此,DVB-S2标准中的高吞吐率码率兼容LDPC编译码器设计技术是地球探测卫星系统升级的关键技术。

虽然DVB-S2标准中的LDPC码具有特定的结构,但是由于其校验矩阵右边双对角矩阵的存在会导致译码中间信息的存储器访问冲突。现阶段已经有一些文献[3-6]考虑了双对角矩阵的存储器访问冲突解决方案,然而对于分层译码器需要2个桶形移位寄存器来修正,这占用了大量的额外硬件资源。文献[7]中称其为“硬件补丁法”;为了降低硬件资源,另外一种方法是采用“控制补丁法”解决方案,如文献[7-9],由于仅使用一个桶型移位寄存器,所以极大降低了“硬件补丁法”的复杂度和延迟,但是会导致译码性能或吞吐量损失。在文献[8]中,通过降低并行度来大量减少双对角的更新行数,会造成较大的误帧率损失。在文献[9]中,在重复的分层中采用适当的存储控制来抵消双对角的更新行数减少的影响,但当并行度较高时,由于流水线的处理导致分层重复更新而极大地约束了解决冲突的效果。文献[7]提出了一种优化的简化存储控制方法来抵消未更新的双对角行数对性能的影响,即使采用全并行译码,其带来的译码性能损失也几乎是微乎其微的。可见“硬件补丁法”需要大量的额外硬件资源,而“控制补丁法”会导致译码性能的损失,且随着吞吐量的增加,性能损失急剧增大。另外,文献[10]采用IP核的方法来设计DVB-S2译码器,但吞吐量较低,只有40.9~71.7 Mbit/s。

针对升级版的地球探测卫星对DVB-S2标准LDPC码兼容设计及高吞吐量译码器的需求,与现有传统DVB-S2应用不同,为了解决存储器访问冲突,本文提出一种采用矩阵变换的方法,该方法既不占用额外的硬件资源也不带来译码性能的损失。在硬件实现之前先对原始下三角双对角结构的IRA校验矩阵进行初等变换为准循环和行变换下三角双对角结构的组合矩阵。而对这种新的校验矩阵进行FPGA实现,左边准循环子矩阵可以采用现阶段成熟的技术来实现高速自适应码率兼容的架构,而右边行变换下三角双对角结构子矩阵设计时只需要兼容现有成熟的准循环硬件实现方案即可,这样就保证了现阶段LDPC译码器研究成果能在设计的译码器上成功使用。

1 DVB-S2 LDPC结构及译码算法

1.1 DVB-S2标准的LDPC码特性

DVB-S2标准中LDPC码的校验矩阵H包含两部分,如公式(1)所示

H=[H1|H2]

(1)

H由H1和H2两部分组合而成,分别为M×K和M×M。其中,H2是一个下三角双对角结构的矩阵,如图1给出了DVB-S2标准中16 200码长7/9码率的LDPC码H矩阵非零元素分布图。如图1所示,子矩阵H1的行的规律性为每q行(DVB-S2标准中给出的5种码率q值如表1所示)作为一块整体向右循环移动一次得到下q行,共右循环移动了360次。

图1 码率为7/9的LDPC码H矩阵非零元素分布图

1.2 LDPC译码算法

Cn=ln(P(xn=0|yn)/P(xn=1|yn))

(2)

(3)

N(m)是连接校验节点m的变量节点集合,N(m) 表示在集合N(m)中去掉变量节点n的子集合,α为NMSA算法的归一化因子。

(4)

(5)

同理,集合M(n)表示连接变量节点n的校验节点,M(n)m表示从集合M(n)中去掉一个校验节点m之后形成的子集。

上面的C2V和V2C统称为外信息。迭代译码一直重复直到校验方程满足或达到预先设定的最大迭代次数,校验方程满足与否由校验方程计算模块(parity check update,PCU)来判定。

2 提出的高速码率兼容DVB-S2的LDPC码译码器架构

现阶段文献中研究最多的LDPC高速译码器是准循环QC-LDPC译码器,因为块内循环QC特性可以降低存储器访问复杂度,分块特性有利于实现部分并行的译码器。但DVB-S2标准的LDPC码不是QC-LDPC码,本节将详细介绍DVB-S2标准的LDPC码与QC-LDPC码的关系,并借助QC-LDPC译码器架构提出本文的高速码率兼容DVB-S2的LDPC码译码器架构。

2.1 DVB-S2标准的LDPC码与QC-LDPC码的关系

图2 码率为7/9的LDPC码变换H矩阵非零元素分布图

图2给出了DVB-S2标准中16 200码长7/9码率的LDPC码H矩阵的变换矩阵,如公式(6)所示:

(6)

图3 Ht矩阵的结构图

码率H1t的dvH2t的dvHt的dc 2/512(6),3(12)2(27)6(27) 3/512(9),3(18)2(18)11(18) 2/313(3),3(27)2(15)10(15) 7/93(35)2(10)12(3),11(1),13(6) 8/94(5),3(35)2(5)27(5)

2.2 提出的DVB-S2码率兼容LDPC码译码器处理单元的设计

表3 码率兼容LDPC译码器处理器单元的数量

见1.2节,处理单元CNU和VNU占用了译码器的大部分资源,为了有效地对码率兼容LDPC码译码器进行设计,不同码率之间应该最大程度地共享处理单元资源。通过对表2进行分析,可以得到2种处理单元CNU和VNU的最小数量。校验节点单元CNU用来进行行信息的更新,将行重设计为13可以兼容10,11,12,13行重情况,所以码率兼容译码器需要3种行重情况{6(27),13(18),27(5)},译码器需要27p个6输入的CNU,18p个13输入和5p个27输入的CNU,分别记为CNU6,CNU13和CNU27,这里p表示块内的并行度数。同理,变量节点更新单元VNU用来进行列信息的更新,列重为{2,3}和{12,13}可分别设计为列重为3和13情况的VNU。可见VNU需要设计为3种列重的情况{3(45),4(5),13(6)},即译码器需要45p个(3+1)输入,5p个(4+1)输入和9p个(13+1)输入的VNU,分别记为VNU3,VNU13和VNU4,如表3所示。

2.3 行变换下三角双对角TST矩阵的存储策略

(7)

表4 TST子矩阵中的非零元素位置

从表4可以看到,TST子矩阵包括q个行块,每个行块s(0≤s≤q-1)由L=360个子行r(0≤r≤L-1)组成,其非零元素均采用2个深度为L的存储器来存储,所以TST子矩阵总共需要2q个存储器来存储外信息,与之对应的存储器定义为MCt,x,(1≤x≤2q),这2q个存储器的标号分别为(s=0|MCt,1,MCt,2),…,(s=q-1|MCt,2q-1,MCt,2q)。

通过分析TST处理单元的工作流程,发现TST的校验节点处理阶段,需要读取每个行块s所对应的2个存储块,即MCt,2s-1,MCt,2s,而TST的变量节点处理阶段,其读取的是s所对应的2个存储块MCt,(2s)%(2q),MCt,(2s+1)%(2q)。为了能使CNU和VNU交错地读取这两块存储器,不产生存储器访问冲突问题,我们引入一个2q×2q的TST网络交换模块,存储器MCt,x对应的输入端口为(2,3),(4,5),…(2q,1),输出端口号为(1,2),(3,4),…(2q-1,2q)。可见,本文提出的表4中的TST存储方式可以有效地解决存储器访问冲突问题。

TST子矩阵对应的信道信息存储在存储器Ft中,假设按列的顺序进行信道信息的存储。从存储器MCt,x的内容可知,与其对应的列号分别为0+y,q+y,2q+y,…,q×(L-1)+y,y(0≤y≤q-1),所以VNU处理单元工作阶段,Ft需要与2个存储器MCt,x进行数据交互。

2.4 提出的DVB-S2标准的码率兼容LDPC码译码器的存储器设计

本文提出的码率兼容DVB-S2标准LDPC译码器架构需要3种存储器资源:信道信息存储器(RAM-QC, RAM-TST)、外信息存储器(RAM-M, RAM-C)和硬判决存储器,每个存储器采用的深度均为2「L/p⎤,为了保证译码器在接收信道信息的同时进行译码处理所以需要采用2倍的信息帧数据深度,而为了使CNU和VNU交替对2帧不同的数据进行译码,所有存储器均采用双端口方式的BRAM存储块。

DVB-S2标准中不同码率基矩阵的列数相同均为n,所以可以复用信道信息存储器,总共需要n=45个存储器来存储信道信息,复用时需要n-q个RAMF和q个Ft。然而,由于不同码率校验矩阵差别较大,外信息的复用方式较复杂,对于LDPC译码器,外信息存储器个数与基矩阵非零元素数成正比,因为不同码率的QC子矩阵对应的基矩阵有不同的非零元素,表5给出了每种码率所占使用的存储器数量。如表5所示,令g表示多码率QC子矩阵基矩阵的非零元素的个数,gmax=162,考虑到TST子矩阵部分存储器的个数为2q,所以码率兼容译码器存储外信息的总数为gmax+2q=198。按照上面的分析,得出5种DVB-S2码率兼容LDPC译码器总共需要198+45=243块存储器。

表5 每种码率所占使用的存储器数量

3 提出的基于FPGA的高速码率兼容DVB-S2 LDPC译码器架构

按照上文的描述,DVB-S2的LDPC校验矩阵经过矩阵变换后的新矩阵Ht由准循环QC子矩阵和TST子矩阵组成,为了使TST与QC矩阵所对应的译码器架构兼容,本节针对HHt提出了一种QC-TST译码器架构,如图4所示。

图4 提出的DVB-S2标准的QC-TST译码器架构框图

p>1的并行度对应高吞吐量情况,该架构可以简单地应用到p=1的低吞吐量情况。关于QC子矩阵的架构采用本文作者前期工作[11]中的方法,TST子矩阵的处理需要与QC子矩阵兼容,TST部分通过采用位宽和深度与QC部分同样规格的RAM模块,便于码率兼容设计时存储资源的复用,为了避免各个处理单元访问TST存储器导致的访问冲突问题引入TST网络交换模块。提出的QC-TST译码器的具体译码步骤如下:

输出信号包括译码码字输出datout和伴随该输出的帧同步信号synout及码率信号rate,之所以需要这2个信号是因为LDPC译码器后端还需要其他处理,例如在DVB-S2标准中,LDPC译码器后端还需要BCH译码器。datout是位宽为p比特的信号。

1) 初始化;

当译码帧到来,即帧同步信号为高电平时,将接收到的帧数据所对应的信息位和校验位信息分别存储到信息存储块RAM-QC和校验存储块RAM-TST中,同时,将外信息存储块RAM-C和RAM-M初始化为零,初始化迭代次数Titer=1;

2) 变量节点更新(VNU-VTU);

3) 校验节点的更新和校验方程的计算(CNU-PCU);

4) 判决;

若伴随式向量s=0或Titer达到预设的最大迭代次数MAX-ITER,转步骤5);否则,转步骤2)继续下一轮迭代处理;

5)从RAM-OUT读出译码判决比特,输出译码码字。

现阶段处理模块的实现技术研究较多(见文献[11-13]),为了提高时钟频率均采用降低关键路径延迟的方法,即在CNU和VNU计算过程中插入多级流水线。本文假设在CNU和VNU中分别插入c级和v级流水线。列重dv越重,v越大,同理行重dc越重,c越大。本文提出的译码流程的译码器一次迭代所需要的时钟周期为v+c+2「L/p⎤个。

4 实现结果

采用本文提出的这种矩阵变换方法加QC-TST译码器架构,在Xilinx XC7VX485T FPGA上实现了DVB-S2标准中兼容5种码率的一个LDPC译码器,综合和布局布线采用Vivado 2015.1。

本文提出的译码器并行度可以被任意配置,考虑到本文使用的FPGA资源情况,并行度配置为p=5的情况。如表4所示,可见分别需要的校验节点处理单元的个数分别为27p=135个CNU6,18p=90个CNU13和5p=25个CNU27;变量节点处理单位的个数分别为45p=90个VNU3,9p=45个VNU13和5p=25个VNU4。

从表5中可以看到,需要243块双端口18 kbits BRAM来存储信道信息和外信息,而硬判决RAMC需要大小为2「L/p⎤×np=2×360×45=32.4 kbits的存储空间,需要占用7块18 kbits的双端口BRAM,所以这个码率兼容译码器需要占用250块双端口BRAM。对于Virtex7 FPGA,2块18 kbits的BRAM自动合并成一块36 kbits的BRAM,即需要125块36 kbits的BRAM资源。

考虑到最大列重和行重分别为13和27,为了平衡设计,VNU和CNU均采用v=6和c=6和流水线,所以本文提出的译码器完成一次迭代需要v+c+2「L/p⎤=156个时钟周期,当译码器输入端采用5路并行输入信道信息时,接收一帧的时钟周期数为16 200/5=3 240,因此可以将译码器的最大迭代次数设置为⎣3 240/156」=20次。采用NMSA译码算法,为了获得与浮点译码接近的性能,在实现时,采用6比特量化。译码性能如图5所示。

图5 码率兼容DVB-S2译码器结合高阶调制性能图

为了进一步提高吞吐量,采用CNU和VNU交替对2帧不同的数据进行译码,所以译码器可以同时接收并行10路信道信息输入的情况。现阶段的LDPC一般与MPSK或MAPSK等二维调制方式相结合,此时译码器同时接收I,Q2路数据对应的帧,所以I/Q路均采用并行5路输入的情况,每路用6比特表示,并行10路共输入60比特。本文提出的译码器方案支持连续输入的情况时,是一个输出连续的实时译码器,译码器迭代处理模块的时序如图6所示,当然本译码器也支持对于2个译码块之间有一定的时钟间隔的情况,此时时序更宽松所以译码迭代次数能进一步增加,与图5相比,可进一步改进系统的纠错性能。

图6 提出的译码器迭代处理工作时序图

通过布局布线,本文设计的码率兼容LDPC译码器的最大工作时钟频率为250 MHz,由于同时处理10路连续帧,且是一个输出连续的实时译码器,所以提出的码率兼容译码器的最大吞吐量为250 MHz×10=2.5 Gbit/s。

表6给出了提出的DVB-S2标准5种码率兼容LDPC译码器占用的资源,同时还给出了文献[3-9]实现的高速译码器结果。其中不同的文献采用不同的术语来描述译码算法,但都是软判决和积译码算法及其衍生算法。表6保留原文献算法记法。

表6 提出的译码器与现有的其他译码器资源对比

本文提出的译码器优势在于:兼容多种码率,可在连续输入数据情况下不丢失数据且具有逐帧切换LDPC码的自适应功能,每帧可变的码率切换形式可以使得DVB-S2标准中逐帧可切换的传输帧结构形式获得更优异的自`适应传输性能。现有文献中并没有考虑这个设计问题。而对于多码率的实现现阶段大部分采用bit程序刷新的方法来实现,这些方法不能实现在连续输入数据情况下逐帧切换不丢帧的功能。文献中给出的是某固定码率下的资源占用情况及其吞吐量。为了有效比较对应指标,本文的译码器在单个码率情况下的资源占用量简单折算为5种码率兼容情况下的五分之一,实际减去自适应控制部分的额外资源消耗后单码率的资源占用量将更低。经折算后本文中单个译码器在2.5 Gbit/s情况下的资源占用量为,36 kb BRAM存储器27个(或18 kb BRAM 54个)、LUT为26 241个和FF寄存器41 219个。

文献[3]采用HSS译码策略和简单的校验节点更新算法,采用节省存储资源的架构实现了dc(行重)路并行,码率为9/10时,吞吐量为2.25 Gbit/s。由于文献[3]中没有给出其他指标,只能比对吞吐量情况,与文献[3]相比,本文的吞吐量更高。

文献[4]采用桶形移位寄存器来避免存储器访问冲突,90 nm的ASIC实现结果显示,时钟频率为300 MHz时,可实现520 Mbit/s的吞吐量,占用的存储器资源为8.4 Mb。而本文2.5 Gbit/s吞吐量的译码器占用52.8个18 kb的BRAM为0.95 Mb。由于ASIC的面积与FPGA的资源暂时没有有效的换算比对方法[13],本文暂不做比较。但与文献[4]相比本文译码器的吞吐量资源和存储器资源利用效率更高。

文献[5]设计了一个同时具有VNU和CNU功能的模块B/CFM,能使VNU和CNU充分共享资源,实现的译码器最大吞吐量为1 020 Mbit/s。本文的译码结构采用图6的CNU和VNU交替对两帧不同数据进行译码的方法来防止处理模块的空闲的处理方法。文献[5]的设计在1.02 Gbit/s吞吐量时,使用的硬件资源为11 005个LUT和182个18 kb的BRAM存储资源。由于本文提出的译码器吞吐量约为文献[5]的2.5倍,LUT资源的使用量也大约为文献[5]译码器的2.5倍,但在BRAM存储资源的利用效率上,本文译码器具有明显优势,在2.5 Gbps吞吐量下本文译码器仅占用54个18 kb的BRAM存储资源,较文献本[5]的182个18 kb BRAM有明显优势。

文献[6]也是采用桶形移位寄存器来避免存储器访问冲突,ISE综合结果显示,当时钟频率为297.3 MHz,迭代30次时,吞吐量为1 Gbit/s,占用的硬件资源为LUT 92 301个、FF 63 637个、36 kb BRAM存储器232个。本文译码器的吞吐量为2.5 G,为文献[4]译码器吞吐量的2.5倍,但从资源的使用情况上看,本文的译码器实现的资源占用量要小于文献[6]译码器的2倍,其实现效率更高,这主要是由于文献[6]译码器的桶形移位寄存器部分占用了大量的硬件资源,而本文译码器并没有类似结构。

文献[8]采用通过降低并行度来大量减少双对角的更新行数,会造成较大的误帧率损失。当吞吐量为120 Mbit/s,FF为10 855,存储器资源1.96 Mb,而本文2.5 Gbit/s单个译码器占用52.8个18 kb的BRAM为0.95 Mb,FF为41 219。与文献[8]相比,本文译码器可以实现更高的吞吐量,且资源利用效率更高。

文献[7]在文献[8]的基础上提出了一种优化的控制方法来抵消译码性能损失。当吞吐量为1.4 Gbit/s、ALUs为63 694、FF为75 372、存储器资源3 Mb,而本文2.5 Gbit/s单个译码器占用LUT为26 241、FF为41 219、52.8个18 kb的BRAM为0.95 Mb。与文献[7]相比,本文译码器的吞吐量资源、逻辑资源和存储器资源均有优势。

文献[9]采用FPGA实现了一个译码器,当并行45路,时钟频率为300 MHz时,吞吐量为200 Mbit/s,当并行120路,时钟频率为400 MHz时,吞吐量为720 Mbit/s。这些方法并行路数较大,至少为45和360最大公约数,这将导致ASIC芯片面积较大。从表6中可以看到,720 Mbit/s时存储器资源为2.2 Mb,而本文2.5 Gbit/s译码器占用52.8个18 kb的BRAM为0.95 Mb。由于ASIC的面积与FPGA的资源暂时没有有效的换算比对方法[13],本文暂不做比较。但与文献[9]相比本文译码器的吞吐量资源和存储器资源利用效率更高。

通过上面的对比分析,可以看到本文设计的码率兼容译码器在纠错性能、吞吐量资源、逻辑资源和存储器资源与现有设计相比均具有优势,这主要是由于本文在设计译码器之前采用了矩阵变换的方法,该方法既不占用额外的硬件资源也不带来译码性能的损失。而且经过变化后的矩阵在硬件实现上具有较大的优势,对于变换后矩阵的左边准循环子矩阵可以采用现阶段成熟的QC-LDPC译码器架构设计技术来实现高速自适应码率兼容的架构,而右边行变换下三角双对角结构子矩阵设计时只需要兼容现有成熟的准循环硬件实现方案即可,这样就保证了现阶段LDPC译码器研究成果能在设计的译码器上进行充分的应用。

由于借鉴了QC-LDPC译码器架构设计优势,本文提出的译码器架构非常容易实现码率兼容性,消耗的硬件资源更少,而且如果想进一步提高LDPC译码器的吞吐量,这种设计仅需要提高块内的并行路数。另外也可以灵活地调节LDPC译码器占用的硬件资源,满足不同硬件平台不同吞吐量的传输需求。

5 结 论

为了有效地实现多码率码长兼容的DVB-S2译码器,本文将DVB-S2标准中的矩阵进行初等变换后得到了QC和TST子矩阵,QC子矩阵采用现阶段具有丰富研究成果的QC-LDPC译码器架构进行实现,而仅需重点解决TST子矩阵部分与QC-LDPC兼容性设计问题。提出的译码器能适应DVB-S2标准所有码率和分组长度,且这种实现方法并行度可以灵活调节,以实现不同吞吐量的译码器,可满足不同系统的需求,具有较强的实用性。而且在高吞吐量自适应上具有明显的优势,能应用于地球探测卫星的最大传输速率高达几个千兆比特每秒的情况。

猜你喜欢
译码器码率译码
移动视频源m3u8多码率节目源终端自动适配技术
基于扩大候选码元范围的非二元LDPC加权迭代硬可靠度译码算法
分段CRC 辅助极化码SCL 比特翻转译码算法
基于校正搜索宽度的极化码译码算法研究
一种基于HEVC 和AVC 改进的码率控制算法
基于状态机的视频码率自适应算法
编码器和译码器综合实现数字显示
跟踪导练(一)5
数字电路环境下汽车控制电路信号设计
LDPC 码改进高速译码算法