0 引 言
目前,LDPC码已广泛应用于深空通信、光纤通信、数字音视频广播等领域。由于有着较Turbo码更优秀的性能,LDPC码已成为第四代移动通信(4G)系统信道编码方案强有力的竞争者。在数字电视地面广播系统中,为了满足不同信道条件和不同接收设备的用户需要,信道编码往往需要和多种调制方式配合。以便在不同的场合下可以灵活应用。这就要求通信系统的信道编码模块的输出码流宽度具备一定的灵活性,给编码后的符号映射模块提供最佳的码流格式,提高编码器的通用性,降低符号映射设计的复杂度。我国数字电视地面广播标准(DTMB标准)采用三种码率的LDPC码、五种不同的符号映射方式。为得到较好的通用性,LDPC编码器不仅需要同时支持三种码率的LDPC码.而且输出的码流格式需要灵活可控,以便符合五种符号映射方式的最佳码流格式。这里主要针对这种情况,使用Verilog硬件描述语言在FPGA芯片上设计实现LDPC编码器,并测试验证该编码器的正确性。
1 DTMB标准中的LDPC编码与符号映射
DTMB标准中的LDPC码属于准循环LDPC码,其生成矩阵具有如式(1)所示的格式。
式中:Gi,j为b×b的循环方阵,1≤i≤k-c,1≤j≤c;I为b×b的单位阵;o为b×b的零方阵。
DTMB标准支持0.4,0.6,0.8三种码率的LDPC码。码率为0.4的LDPC(7493,3048)码的生成矩阵Gqc具有参数k=24,c=35和b=127;码率为0.6的LDPC(7493.4572)码的生成矩阵Gqc具有参数k=36,c=23和b=127;码率为0.8的LDPC(7493,6096)码的生成矩阵Gqc具有参数k=48,c=11和b=127。假设信息序列为S,码字序列为C,LDPC编码可利用等式C=S×Gqc。由系统码的特点可知,信息序列与Gqc前半部分相乘得到校验位,然后在校验位后面加上信息序列就是码字序列。求校验位时具体的做法是,信息序列S与Gqc的第1列乘得到第1个校验位,信息序列S与Gqc的第2列乘得到第2个校验位,以此类推直到c-1列,可以求得所有c个校验位。
DTMB系统中的码流经过LDPC编码后,删除前五个校验比特,接着映射成均匀的符号流。DTMB标准包含64QAM,32QAM,16QAM,4QAM,4QAM=NR五种符号映射关系,各种符号映射加入相应的功率归一化因子,使各种符号映射的平均功率趋同。对于64QAM,由于每6 b对应于1个星座符号,因此最佳的输入码流宽度为6。类似地,对于32QAM,每5 b对应于1个星座符号,最佳输入码流宽度为5;对于16QAM,每4 b对应于1个星座符号,最佳码流宽度为4;对于4QAM,每2 b对应于1个星座符号,最佳输入码流宽度为2。而4QAM-NR映射方式需在4QAM符号映射之前增加NR准正交编码映射,由于编码后的数据首先要进行基于比特的卷积交织,因此最佳的输入码流格式为串行数据。
2 编码器的设计与实现
由前文的分析可知,LDPC编码器不仅需要同时支持三种码率的编码,而且为了实现与符号映射方式的最佳配合,编码后的输出码流必须支持1,2,4,5,6位可控。在此采用图1的硬件实现方案,整个编码器可分为7个模块。
(1)运算模块。负责校验位的计算。式(1)中的每个Gi,j矩阵都是127×127的方阵,所以可将输入的信息序列分为长度为127的k个小段,编码就可以分解为k个子过程。编码核心部分采用文献[7]提出的串行输入/并行输出的SRAA电路,如图2所示。其中B存储Gi,j的生成多项式(矩阵第一行),A用来存储运算的中间结果。由于式(1)中的Gi,j是循环方阵,它的每一行都是上一行的向右移移位,而第一行是最后一行向右移一位;每一列都是左一列向下移一位,而第一列是最后一列向下移一位,所以在每126个时钟内B中数据每隔一个时钟进行一次循环右移,126个时钟后,读入下一个Gi,j的生成多项式。如此循环计算,即可得到所有的校验位。单独考虑DTMB标准中0.4,0.6,0.8三种码率的的编码,分别需要35,23,11个SRAA电路并行才能完成所有的校验位获取。因而为了实现三种码率编码器资源的复用,并且综合考虑运算速度,在此采用35个SRAA电路并行的方案。
.
(2)生成矩阵存储模块。DTMB标准中三种码率的生成矩阵G1,G2,G3,所需存储的总比特数是固定的。如果按一般的方案存储,那么35个并行SRAA电路须对应宽度为35×127=4 445,深度为24+36+48=108的存储空间。针对FPGA中BlockRAM深度大,宽度小的狭长形结构特点,存储的数据如果宽度大,深度小就会造成FPGA中存储资源的大量浪费,所以在此采取如图3所示的存储方案,把每个SRAA电路所用到的数据存储在一个ROM中,这样一共只需要35个存储结构,第1~11个的宽度为127,深度为24+36+48=108;第2~23个的宽度为127,深度为24+36=60;第24~35个的宽度为127,深度为48。
(3)地址生成控制模块。按照一定的时序,输出生成矩阵存储ROM的读地址,每隔126个时钟产生一个load使能信号,从ROM中读出SRAA运算模块所需要的生成多项式。同时也根据采用码率的不同,产生ROM的使能信号,选择不同码率LDPC码所对应的生成矩阵存储块。
(4)并/串转换模块。SRAA电路的输出为并行数据,对并行数据做并串转换,以便码流控制模块对输出码流的格式进行控制。
(5)同步FIFO。DTMB标准的LDPC码为系统码,输出时,息位在后校验位在前,故需要对信息输入序列进行缓存。当校验位输出完毕后,再从同步FIFO中读敢信息位补在校验位后面,构成完整码字。
(6)码流输出模块。为了实现与符号映射方式的最佳匹配,编码器输出码流格式必须支持1,2,4,5,6五64QAM四种符号映射方式时,编码器输出的最佳宽度分别为2,4,5,6。考虑到充分利用FPGA中的大量BlockRAM资源优势,在此采用基于乒乓操作的思路,利用6个宽度为1的FIFO来实现串行数据流到指定宽度数据流的转换,结构原理如图4所示。
以编码后进行4QAM映射方式为例,串行的数据流在控制模块输出信号fifo_vaIid的控制下,第1个数据存人1号FIFO,第2个数据存入2号FIFO,然后第3个数据又存入1FIFO,第4个数据存入2号FIFO,如此循环直到FIFO填满,控制模块收到从FIFO返回的full信号时,输出信号data_rd_en打开1号和2号两个FIFO是2位而输入为串行,输出的速度比输入快,当FIFO的数据被读空时,产生一个empty信号给控制模块通知停止读FIFO,此后编码器输出0序列,同时输出数据有效信号code_out_en为0。类似地,对应16QAM,32QAM,4QAM,64QAM可以得到宽度为4,5,6的输出码流。如果使用的是4QAM-NR符号映射.由于编码后要先进行交织,码流串行输出是最佳选择,因此串行的数据无需进行FIFO组的缓存。直接输出即可。
.
(7)码流输出格式控制模块。根据输入引脚mod-ulation_type选择的符号映射方式,来实现对码流输出模块的乒乓操作。产生控制信号fifo_valid、data_rd_en,同时接收码流输出模块返回的full和empty信号,达到控制编码器输出码流宽度的目的。
3 设计结果与验证
这里的LDPC编码器是在Xilinx公司的XC4VSX35 FPGA芯片下实现的,设计中使用流水线、乒乓操作等技巧提高系统工作的频率,综合后的硬件资源消耗如表1所示。在布局布线中,对相应的管脚和周期进行适当的约束,通过使用不同频率的激励作为输入进行测试,硬件电路核心部分的最高工作频率可达到83 MHz左右,完全符合DTMB标准中的最高时钟频率要求7.56×6=45.36MHz。
验证时,以0.4码率的LDPC码、输出码流格式为6位并行为例,得到时序仿真结果如图5所示。在Testbench中对一次时序仿真的输出码流序列进行保存,并和Matlab中编码的结果比较,LDPC编码器的输出与Matlab计算所得的结果是完全一致的。同理,可以验证其他两种码率在不同的输出格式下,LDPC编码器的编码结果也是正确的。
4 结 语
这里实现了一种码流输出格式可控的多码率LDPC编码器,并验证了编码器的正确性。该编码器不仅同时支持DTMB标准中三种码率的LDPC码,而且输出的码流格式具备1,2,4,5,6位宽度可选,从而实现与4QAM,16QAM,32QAM,64QAM,4QAM-NR五种符号映射方式的最佳匹配,具有较好的通用性,完全可以应用在DTMB系统的发射机中。 (编辑:吕勇)