DTMB标准实时LDPC编码器设计*
2010-08-10彭海云徐建敏
彭海云 ,徐建敏 ,王 鹏 ,刘 玮
(1.周口师范学院 计算机科学系,河南 周口 466001;2.东莞理工学院 计算机学院,广东 东莞 523808;3.同济大学 通信软件及专用集成电路设计中心,上海 200092)
1 引言
LDPC码的概念最早由R.G.Gallager于1962年提出[1]。然而其研究成果长期为人们所忽视,直到1996年,Mackay等人重新“发现”了LDPC码的强大性能[2],此后,LDPC码开始成为信道纠错编码的一个主要研究热点。LDPC码具有极强的纠错性能,如S.Y.Chung等人设计的1/2码率,码长107的非规则LDPC码,在二进制输入AWGN信道下,当错误概率为10-6时距Shannon限仅为0.004 55 dB[3],这是迄今为止性能最接近Shannon限的信道编码。
2006年8月,我国的数字电视广播地面传输标准DTMB正式公布[4]。该标准目前已经正式实施,与欧美等国的ATSC,DVB-T等同类标准相比,其最大的亮点就是在前向纠错编码中引入了LDPC码,使整个系统在相同频谱利用率条件下的接收门限比ATSC,DVB-T等标准的接收门限更低,也更有利于固定和移动接收。
DTMB标准中的前向纠错码由BCH码和LDPC码级连而成,依不同应用有0.4,0.6,0.8等3种码率。其LDPC码为准循环(QC-LDPC)非规则码,对应校验矩阵和生成矩阵均具有分块循环特性,每个子块为全零阵或循环阵,以降低编译码复杂度,同时仍保持了LDPC码的优良纠错性能[5]。
本文针对DTMB标准中LDPC码的准循环特点,基于循环移位寄存器结构,实现了DTMB标准3种不同码率的LDPC编码,整个设计在FPGA芯片上经过综合和布局布线,最高时钟达到了182.82 MHz,远超过DTMB实时编码要求,而且该设计具有很强的通用性,只需更改编码器内部的生成矩阵子块生成多项式记录模块,即可适用于任意QC-LDPC编码。
2 DTMB标准LDPC码
在DTMB标准中,输入的比特码流数据进行扰码处理后即送入前向纠错模块,其前向纠错编码(FEC)由外码(BCH码)和内码(LDPC)级联实现。
LDPC码生成矩阵Gqc的结构如下
式中:I是 b×b 阶单位矩阵;O 是 b×b 阶零阵;Gi,j是 b×b循环矩阵,取 1≤i≤k,1≤j≤c。LDPC 编码码字输出信息位在后,校验位在前。
DTMB标准中规定了3种FEC码率,对应LDPC码率也有 3 种,分别是 LDPC(7 493,3 048)码; LDPC(7 493,4 572)码;以及 LDPC(7 493,6 096)码;在将 LDPC 编码码字作为FEC输出时,删除前面5个校验位,因此事实上只输出7 488 bit。
3 DTMB标准LDPC编码器
如前所述,DTMB中采用的QC-LDPC码为系统码,校验比特在前,信息比特在后,3种码率下的子块大小均为127×127。如果在编码时能充分利用生成矩阵的子块循环特性,即使该生成矩阵并不具有稀疏性,也可以在较低的复杂度下完成LDPC编码[6]。
3.1 QC-LDPC编码算法
对QC-LDPC码生成矩阵(如式(1)所示),由于子矩阵 Gi,j具有循环移位特性,只需记录其第一行数据 gi,j即可得到整个子矩阵 Gi,j, 故称 gi,j为该子矩阵的生成多项式,因此整个生成矩阵 Gqc可以由(c×(t-c))个生成多项式 gi,j来 完 整描 述 。
记 a=(a1,a2,...,a(t-c)b)为待编码信息比特,可将其依子块大小分成(t-c)个子向量(a1,a2,...,at-c),其中 ai=(a(i-1)b+1,a(i-1)b+2,...,aib),1≤i≤(t-c),根据线性分组码理论,信息比特a对应的编码码字为
上式中,pj=(pj,1, pj,2,…,pj,b)为校验比特的第 j个子向量,1≤j≤c,由矩阵乘法知识可以得到
至此可以看出,随着输入信息比特(a1,a2,…,at-c)串行进入编码器,第j个校验比特子向量pj可以通过式(3)~(4)完成,当 ai进入编码器时,首先根据式(4)完成 aiGi,j运算,该式可方便地采用线性反馈移位寄存器结构实现,然后再计算 Sj=a1G1,1+ a2G2,j+…+aiGi,j,而当 at-c全部进入编码器后,此时 Sj=a1G1,1+ a2G2,j+…+at-cGt-c,j,恰为第 j个校验比特子向量pj,因此如果编码器中包含有c个pj并行计算模块,即可在读入所有信息比特后完成所有校验比特计算,而编码器内部只需存储(c×(t-c))个生成多项式 gi,j信息。
3.2 设计要求
编码器设计需要能够完成DTMB标准中所有3种LDPC码的实时编码。3种LDPC码的信息比特长度分别为3 048 bit、4 572 bit和 6 096 bit, 码字长度均为 7 493 bit,但前面5个校验位不必输出,只需输出后面的7 488 bit即可。
采用前述QC-LDPC编码算法,在所有信息比特输入完毕的同时计算出所有校验比特,然后再将删除前面5位的校验比特和信息比特组成完整码字以串行形式输出,这需要耗费7 488个时钟周期,而输入信息比特最大长度为6 096 bit。为提高系统工作稳定性,采用单时钟设计,输入、输出均为1位串行模式,且各自有单独的Data_Valid信号配合。首先确定编码器时钟频率,按照DTMB标准规定,系统最高净载荷率为32.486Mbit/s(对应0.8码率FEC模式),此时LDPC码信息比特和码字比特速率分别为32.486×762/752 Mbit/s=32.918 Mbit/s和 32.486×7488/6 016 Mbit/s=40.435 Mbit/s,为留有部分余量,选择45 MHz为编码器工作时钟。
3.3 LDPC编码器设计
编码器的核心是移位寄存器-加法器-累加器结构(SRAA),它可以完成式(3)~(4)所示的校验比特计算,其具体结构如图1所示。
图1 SRAA结构图
可以看出,该SRAA由2组寄存器阵列组成,上方为寄存器B阵列Reg_B,下方为寄存器A阵列Reg_A,其宽度均为子块大小127。初始状态时,寄存器阵列A,B内容全部清零,开始编码时,首先将生成矩阵G子块G0,0的生成多项式g0,0加载到寄存器B阵列中,此时第1个信息比特s0出现在输入端,s0与Reg_B经与门阵列相与后出现在异或门阵列输入端,在GF(2)域中,加法与异或运算是等效的,因Reg_A初始内容为零,可知更新后的Reg_A值为
在下一个时钟周期,第2个信息比特s1出现在输入端,Reg_B内容循环右移1位,变为,同样经与门和异或门阵列后,此时Reg_A变为
以此类推,在第127个时钟周期时,Reg_A为
式中:s0为信息比特按子块长度127分割而成的第1组子阵列(s1,s2含义同上,记 s=(s0,s1,s2,…,st-c))。 此后,Reg_B开始加载子块 G1,0的生成多项式 g1,0,再重复上述操作,经127个时钟周期后,Reg_A为
这样,当所有信息比特均输入完毕后,寄存器阵列A中的值为
因此,一个SRAA结构可以在信息比特长度 (t-c)×127个时钟周期内完成1个校验比特子块计算(含127个校验比特),采用c组SRAA结构并行工作,可以在所有信息比特输入完毕后同时得到所有校验比特(计算结果存储于Reg_A阵列中),去除前面5个校验比特,并将余下的校验比特和原始信息比特组成完整的7 488 bit以串行模式输出,即完成了整个LDPC编码过程。
图2给出了DTMB标准LDPC编码器顶层模块结构图。编码器采用3级流水线设计:第1级流水线完成输入信息比特乒乓缓存(由LDPC信息比特最大传输速率和编码器工作时钟可知完成一帧信息比特传输最多耗费8 333个时钟周期),第2级完成校验比特计算(最多耗时6 096个时钟周期),第3级完成编码码字输出(耗时7 488个时钟周期)。
编码器硬件实现采用Altera公司的Stratix II系列EP2S15芯片,以下详细介绍各子模块设计:
1)load_sbit模块
load_sbit模块主要完成信息比特读入,将读入的信息比特存入内部乒乓缓冲区,同时还要记录相应的码率信息code_rate,该乒乓缓冲区可由一块位宽为1 bit,深度为16 384 bit的RAM构成,其地址最高位作为乒乓缓冲区切换位。当一帧LDPC码字传输完毕后,置相应buf_available信号为高,代表当前乒乓缓冲区可用,此后SRAA模块可以接收load_sbit模块内部乒乓缓冲区输出的信息比特,同时下一帧信息比特数据也在继续写入乒乓缓冲区,这样可以使load_sbit模块始终处于工作状态,减少了系统延时。
图2 DTMB标准LDPC编码器结构框图
2)sbit_FIFO模块
sbit_FIFO主要用作缓存发送至SRAA模块的信息比特,当校验比特计算完毕时,由码字输出模块output_code读取FIFO中的信息比特数据,并与校验比特组成完整的LDPC码字,该模块可由Altera公司的IP核专用生成工具MegaWizard实现,FIFO数据宽度为1 bit,最大深度为16 384 bit。
3)SRAA模块阵列
SRAA阵列是编码器的核心,也是占用资源最多的模块,其中单个SRAA模块内部结构如前所述。在DTMB标准3种LDPC码率中,对应的校验比特子块长度分别为35(0.4码率 FEC 模式)、23(0.6码率 FEC 模式)和 11(0.8码率FEC模式)。相应地,3种码率下所需的SRAA个数也恰为35,23,11。在实际工作中,这些SRAA阵列的工作时序完全相同,因此设计中采用了一个主SRAA模块SRAA0_prior,该模块不仅完成3种码率下的校验比特子块计算功能,同时还产生SRAA模块时序共用信号,供其余从SRAA模块使用。从SRAA依工作模块不同也可分成3类,一类可支持所有3种码率(SRAA0)、一类可支持0.4和0.6码率模式(SRAA1),还有一类仅支持0.4码率模式(SRAA2)。SRAA具体排列如图3所示。
当所有SRAA模块均被使能,且SRAA0_prior,SRAA0,SRAA1设置为0.4码率工作模式,编码器可完成LDPC(3 048,7 492)编码;当 SRAA0_prior,SRAA0,SRAA1使能,SRAA2 禁用, 且 SRAA0_prior,SRAA0,SRAA1 设置为0.6码率工作模式,编码器可完成LDPC(4 572,7 492)编码;当 SRAA0_prior,SRAA0 使能,SRAA1,SRAA2 禁用,且SRAA0_prior,SRAA0设置为0.8码率工作模式,编码器可完成 LDPC(6 096,7 492)编码。
图3 SRAA并行计算阵列
在35组SRAA模块中,SRAA0_prior处于核心地位,信息比特输入、生成矩阵子块生成多项式读取、校验子块计算、SRAA状态更新及输出等功能均由该模块完成。其余从SRAA模块只需配合SRAA0_prior输出时序信号进行校验比特计算即可。
4)gbase_data模块
gbase_data模块用于存储LDPC码生成矩阵子块生成多项式,每个生成多项式位宽为127 bit。3种码率下的数据均需存储,0.4 FEC码率下对应24×35=840个G矩阵生成多项式;0.6 FEC码率下对应36×23=828个G矩阵生成多项式;0.8 FEC码率下对应48×11=528个G矩阵生成多项式。
gbase_data模块与SRAA模块一一对应,因此共需要35组gbase_data模块,其中前面11组需要存储所有3种码率下的G矩阵子块列生成多项式,深度为24+36+48=108;中间12组深度为24+36=60;最后12组深度为24。均由ROM构建,依外部码率信号不同,Gbase_data模块可自动输出对应码率下的生成多项式数据。
5)output_code模块
校验比特计算完毕后,由output_code模块完成码字输出,首先输出校验比特数据(去除前面5个校验位),待校验比特串行输出完毕后,再读取sbit_FIFO中的信息比特数据,也以串行模式输出,二者配合构成完整的7 488 bit FEC码字,为减少输出数据毛刺现象,在输出编码数据时增加了一级寄存器。
6)main_control模块
main_control模块主要控制各模块的使能、禁用、FIFO数据清零,以及根据码率不同确定SRAA工作模式。
4 译码器FPGA实现及验证
采用RTL级Verilog HDL代码编写整个设计,实现平台为EP2S15,在Quartus II 7.2下成功完成了综合及布局布线,布线后最高工作频率可达182.82 MHz,已远超过DTMB标准的时钟要求。该编码器布线后具体资源占用情况如表1所示,与现有同类设计相比,节省了近20%的硬件资源[7]。
表1 译码器占用资源统计
5 结论
DTMB标准中采用的是QC-LDPC码,对应生成矩阵具有准循环移位特性,因此可直接采用生成矩阵完成LDPC编码,编码器中只需存储3种码率下的LDPC码生成矩阵子块生成多项式即可,整个编码器基于SRAA阵列结构,通过线性反馈移位寄存器来完成LDPC编码,共占用4 699个ALUT,存储资源占用为350 Kbit。该编码器可以在45 MHz的工作时钟下完成DTMB标准下的实时LDPC编码,且支持所有3种LDPC码率。
[1]GALLAGER R G.Low-density Parity-check Codes[J].IRE Trans.Inf.Theory, 1962,8(1):21-28.
[2]MACKAY D J C,NEAL R M.Near Shannon limit performance of low-density parity check codes[J].Electron.Lett., 1996,32(15):1645-1647.
[3]CHUNG S Y, FORNEY G D,RICHARDSON T J,URBANKE R.On the design of low-density parity check codes within 0.0045dB of the Shannon limit[J].IEEE Comm.Letters , 2001,15(2):58-60.
[4]杨知行.地面数字电视国家标准DTMB技术解读[EB/OL].[2009-06-20].http://www.availink.com.cn/UserFiles/u12850461886 29250001668832814.pdf.
[5]ANDREWSK,DOLINARS,THORPEJ.Encoders for block-circulant LDPC codes[C]//International Symposium Proceedings on Information Theory.Adelaide , Australia:[s.n.].2005, 4(9):2300-2304.
[6]LI Zongwang, CHEN Lei, ZENG Lingqi, et al.Efficient encoding of quasi-cyclic Low-Density Parity-Check Codes[J].IEEE Trans.Comm., 2006,54(1):71-75.
[7]杨抒文,彭克武,潘长勇.DTMB发射机LDPC编码器的设计与优化[J].电视技术,2008,32(7):4-5.