5G NR物理层LDPC编码的FPGA实现要点
在5G NR(3GPP Rel.15/16)物理层,LDPC(Low-Density Parity-Check)码替代Turbo码成为数据信道的纠错编码,主要因为其高吞吐并行解码特性适配FPGA/ASIC流水线。与Wi-Fi中简化的LDPC不同,5G NR规定了两个BG(Base Graph)——BG1(高码率/大码块)与BG2(小码块/低码率),并采用准循环(QC-LDPC)结构。本文提炼FPGA实现的关键要点。
一、5G NR LDPC核心规格回顾
参数 BG1 BG2
母矩阵行数 K_b 22 10
母矩阵列数 N_b 66 50
扩展因子 Z_c 2~384(2的幂或特定值) 同左
典型用途 大TB / 高码率 小TB / 低码率(重传)
校验位 P K_b \times Z_c K_b \times Z_c
实际码块长度:K = K_b \times Z_c,\(N = (K_b+N_{b,extra}) \times Z_c\)。
二、编码器实现(准循环移位)
QC-LDPC编码器只需对信息位做循环移位(Cyclic Shift)与异或,无需稠密矩阵乘法。
2.1 编码流程
1. 将信息位按 Z_c 位分成 K_b 组 → 向量 \mathbf{s}
2. 按BG指定列索引做扩展(循环右移/左移)并累加:
\[
\mathbf{p}_j = \bigoplus_{i \in S_j} \text{circshift}(\mathbf{s}_i, \text{offset}_{i,j})
\]
其中 S_j 是第j列非零位置集合,offset来自BG母矩阵
3. 拼接 \mathbf{s} \parallel \mathbf{p} 得到完整码字
2.2 Verilog核心思路(示意)
// 假设 Zc=64, Kb=22
reg [Zc-1:0] info_vec [0:Kb-1];
reg [Zc-1:0] parity_vec [0:Kb-1];
integer i, shift;
always @(*) begin
for (i=0;i<Kb;i=i+1)
parity_vec[i] = 0;
// 按BG1母矩阵非零项累加(简化示例,仅示意2项)
// 实际需解析 3GPP TS 38.212 Table 5.3.2-2/3
parity_vec[0] = info_vec[0] ^ circ_shift(info_vec[1], 17);
// ... 其余列累加
end
circ_shift可用Barrel Shifter实现(O(log2 Zc)延迟)。
三、译码器架构选择(分层BP / Min-Sum)
LDPC译码常用Offset Min-Sum(OMS)算法(近似BP,省资源):
- 变量节点(VN)↔ 校验节点(CN) 交替更新
• 分层调度(Layered Schedule)利用BG的准循环结构,收敛更快(通常5~10迭代)
• 在FPGA中:
• CN更新用最小值+次小值+符号修正
- VN更新为累加(需饱和防止溢出)
吞吐权衡:并行度 = 每个时钟处理几个Zc列;高吞吐(>1Gbps)常展开多列或做部分并行。
四、关键设计要点与坑位
4.1 Zc选择与填充(TB Size → Code Block Segmentation)
根据38.212 Section 5.2.2计算:
• 若TB > K_{max}=3840\times K_b 需分段(Code Block Segmentation)
• 不足 K\times Z_c 的信息位需比特填充(Filler Bits),填充位不参与校验计算且标记为无效
➡️ FPGA需实现动态Zc查表(TS 38.212 Table 5.3.2-1)。
4.2 循环移位方向
3GPP定义循环右移(cyclic shift right),部分文献用左移——必须统一,否则校验位全错。
4.3 码率与打孔/重复
• 实际码率 R = K/N 通过打孔(Puncturing)或重复调整
• 打孔位在发送端剔除、接收端补零(LLR=0)再送入译码器
4.4 资源与时序
- 编码器:纯组合/单周期可行(Zc≤384时桶形移位器可接受)
• 译码器:建议做迭代次数可配(如max_iter=8),早收敛退出(syndrome=0)
五、仿真与验证建议
1. C模型参照:使用3GPP提供的C Reference(NR LDPC C-code)生成期望码字
2. 比对向量:随机信息位 → FPGA编码器输出 → 与C模型比对(允许不同填充处理但校验位须一致)
3. AWGN信道注入:在testbench中对LLR加噪,验证译码BER曲线
六、结语
5G NR LDPC的FPGA实现核心在于:按BG做QC扩展(循环移位异或)、正确处理Zc查表与填充位、采用分层Min-Sum译码并控制迭代次数。借助准循环特性,编码器可极简实现;译码器则需仔细平衡并行度、存储体与早停策略,方能在FPGA上达到NR物理层标称吞吐指标。





