FPGA/ASIC技术
本文将TDMP算法运用于WIMAX标准中所有6种码率的LDPC码的译码,通过分析得出了各个码率LDPC码的变量节点后验LLR在前后两次更新之间的最小时间间隔,采用插入额外时钟周期的方法使得更新后的节点信息得到了及时利用。设计了一种基于填充算法的桶形移位寄存器结构的重组网络单元,实现了对该标准中576、768、1152和2304 4种码长的支持。采用了基于增量的循环移位模式,降低了硬件实现复杂度和单次迭代处理的周期数,提高了吞吐率。
1 LDPC码的译码算法
LDPC码的标准译码算法为BP算法。TDMP及时利用了更新后的节点信息,加快了译码收敛速率。中高信噪比条件下,该算法成功译码所需的平均迭代次数仅是BP算法的一半。TDMP-NMS算法采用归一化最小和算法更新TDMP算法中的校验节点信息,简化了运算复杂度。该算法的译码处理步骤如下[3]:
(2)开始继续下一次迭代处理。
2 WIMAX 标准的LDPC码译码器设计
2.1 译码器总体结构
根据前述TDMP-NMS译码算法, 本文设计的部分并行LDPC码译码器结构如图1所示。整个译码器由后验LLR存储单元、数据重组网络、处理器阵列、硬判决输出单元及控制单元构成。为支持连续译码,信道信息的存储由2组相同的工作于乒乓读写模式的RAM完成。数据重组网络根据校验基矩阵中对应的数值对从后验LLR存储单元输出的z个数据进行循环移位后送入处理器阵列中相应单元进行处理。处理器阵列由96个相同的处理器单元构成,当扩展因子为z时,仅使能其中的z个处理单元,并行处理更新对应于1个超码的z个SPC码。 控制单元产生各个模块的工作使能信号和控制信号。采用最大迭代次数停止准则,当译码迭代次数达到设定的最大值时,硬判决输出单元对从后验LLR存储单元中读出的信息进行硬判决并输出译码结果。
2.2 重组网络的设计
本设计所提出的重组网络单元结构支持对输入数据个数为该网络输入输出端口数的因子的数据序列的循环移位。该结构由数据填充单元和桶形移位寄存器单元构成。为支持最大扩展因子zmax=96码长的LDPC码, 本设计中桶形移位寄存器单元的输入输出数据端口数均为96。填充单元在预处理阶段用并行输入的z个有效数据填充桶形移位寄存器的所有96个输入端口,第nz+i个端口用第i个有效输入数据填充。其中n=0,1,…,(96/z)-1,i=1,…,z。桶形移位寄存器单元对这96个数据根据输入的循环移位值控制信号进行循序移位。移位结束之后,输出端口的前z个数据即为所需的数据序列。一个输人输出数据端口数均为12的重组网络,当有效输入数据个数为6,循环移位值为3时,数据流图如图2所示。
每次迭代处理过程中,传递给处理器阵列的每个单元处理的变量节点后验LLR值是经过数据重组网络循环移位后的数据序列。为使下一次迭代处理时输入至该单元的数据是按原始顺序排列的序列[4],采用了两个重组网络,一个用于将从变量节点LLR存储器中的读出数据进行重组,另一个用于将处理更新后的LLR后验数据进行反重组。为了降低硬件实现的复杂度,同时减少单次迭代处理所需的时钟周期,提高译码器吞吐率,本设计将采用一种增量循环移位的方案[5]。采用该方案,每次对从存储器中读出的z个变量节点后验LLR信息循环移位的值是本次该组数据所需移位的值与上一次所需移位值的模z的差值。经处理器阵列处理更新后的后验LLR值不经过重组网络直接存储至原单元。
2.3 运算单元设计
为使译码器能够支持WIAMX标准中的所有6种码率, 本文设计了如图3所示的基于串行处理的运算单元结构。其中alpha 运算单元接收以压缩形式输入的本超码的内信息ri,0,ri,1,ind_min,sign_j和变量节点j的后验LLR信息Pj,根据式(1)和式(2)计算出qij。qij一路传递给alpha缓存单元用于后续的后验LLR更新,一路传递给TC2SM转换模块,将以二进制补码表示的qij转换为符号-绝对值的表示形式,并传递给超码内信息处理更新单元。该单元每个周期接收一个幅度值和符号值,根据该幅度值与当前最小值min0和次小值min1的比较结果更新min0,min1,ind_min,将接收到的符号值存储于寄存器并执行模2累加运算。当对应于一个校验节点的所有变量节点信息接收完毕,开始执行min0,min1的归一化操作计算ri,0和ri,1,以及sign_j的更新。该运算完成之后开始从alpha缓存单元中顺序读出之前存储的qij,根据(6)(7)完成变量节点后验LLR值Pj的更新。控制模块的作用主要是根据当前超码校验节点的度数产生计算qij和更新ind_min、Pj时所需的当前变量节点的序号和各个模块的工作使能信号。为减少控制单元的扇出,本设计中采用8个运算单元共享一个控制单元的模式,整个处理器阵列96个运算单元共使用了12个控制单元。
2.4 变量节点后验LLR信息的读取
对WIMAX 标准中码率为1/2 和2/3B的LDPC码,通过改变各个超码的迭代处理顺序,可以使得任何两个相邻的超码没有公共的变量节点,因此当前超码的处理不用等到前一个超码迭代处理结束。在本设计中,当前一个超码的变量节点后验LLR从相应的存储单元读出完毕一个周期之后即开始读取当前超码的变量节点后验LLR信息。对于其他码率,通过分析其对应的校验矩阵的特点,发现同一个变量节点在前后两个相邻超码中的迭代处理顺序最大相差3个周期,如图4中码率为2/3的A码第一个超码和第二个超码方框内所示的数字对应的一组z个变量节点,在第一个超码中的处理顺序是第8,在第二个超码中的处理顺序是第5。 又由于从当前超码所有校验节点相邻的变量节点后验LLR读出完毕至第一组z个更新后的后验LLR输出之间相差7个时钟周期, 为了在当前超码处理时用到更新后的变量节点后验LLR信息,本设计在对其他码率的LDPC码迭代处理时,当前一个超码对应的所有变量节点读出完毕10个周期之后开始读取下一个超码的变量节点后验LLR信息。
3 实现结果及分析
选择CycloneII系列的FPGA芯片EP2C70F896C6作为目标器件, 编译综合后的结果显示,该译码器共消耗27 077个逻辑单元,最高工作频率可达69 MHz,在该工作频率下,译码器对该标准中码长为2 304的各码率的LDPC码译码迭代10次时,所需的译码周期数分别为:
1 011、1 686、985、1 520、1 550、1 257,对应的译码吞吐率分别为:79 Mb/s、63 Mb/s、109 Mb/s、79 Mb/s、78 Mb/s、106 Mb/s,完全能够满足WIMAX标准数据吞吐率的要求。
在DE2-70开发板上对所设计的译码器进行了硬件测试,测试系统结构如图5所示。
译码数据及控制信号产生模块产生译码器工作所需的译码数据和相关的控制信号:码率、码长、最大迭代次数、输入数据有效指示信号。译码器根据输入的数据及控制信号进行译码。译码数据及控制信号产生模块中有一个存储一帧译码数据的ROM。为了在Quartus2的SignalTap II Logic Analyzer中观察到译码器的输出信号,该模块周期性地从ROM中读取译码数据和产生相应的控制信号。本文对码率为1/2,码长为2 304的LDPC码进行了测试。测试中系统工作频率为50 MHz,逻辑分析仪的采样时钟为100 MHz,由输入的50 MHz信号经PLL倍频得到。得到译码器的译码输出波形如图6所示。图中hdd_en为输出有效数据指示信号,dout0 ~dout11为译码器并行输出的96 bit数据,将该数据与原信息序列相比较,结果完全相同,译码器工作正常。
本文设计实现了一种支持WIMAX标准的码长、码率可配置LDPC码译码器,通过设计一种基于串行工作模式的运算单元,实现了对该标准中所有码率的支持。通过设计一种基于填充算法的重组网络单元实现了对该标准中扩展因子为24、32、48、96的4种码长的支持。采用TDMP-NMS算法,在提高译码收敛收率的同时,降低了硬件复杂度。实验结果表明,所设计的译码器在50 Hz的时钟频率下工作正常,完全能够满足WIMAX 标准数据吞吐率的要求。
全部0条评论
快来发表一下你的评论吧 !