做通信系统,绕不开一个词:FEC,前向纠错。
简单说,发射端把原始数据发出去之前,会额外加上一些“校验信息”;接收端即使收到的数据被噪声污染了,也能根据这些校验信息把错误尽量纠回来。这样一来,系统不需要每个错误都重传,链路吞吐率和可靠性都会好很多。
在 FPGA 通信项目里,FEC 往往不是锦上添花,而是系统能不能跑起来、误码率能不能压下来的关键模块。尤其是 5G NR、WiFi、卫星通信、高速数传这类场景,信道环境复杂,数据速率又高,靠简单的奇偶校验肯定不够。
LDPC 就是在这些场景里非常常见的一类 FEC 编码。Xilinx 在 Vivado 里提供了对应的 LogiCORE IP:Xilinx LDPC Encoder/Decoder,手册编号是 PG281。这篇文章不逐字翻译手册,主要从工程角度讲清楚:这个 IP 是什么、能干什么、接口怎么接、新手使用时应该注意什么。
LDPC 是什么
LDPC,全称 Low-Density Parity-Check,中文一般叫低密度奇偶校验码。
不用被名字吓到。你可以先把 LDPC 理解成一种“带规则的冗余校验方法”。发送端不是直接把原始比特丢到信道里,而是通过 LDPC Encoder 生成带冗余信息的码字。接收端拿到被噪声污染后的数据,再用 LDPC Decoder 反复检查这些校验关系,尽量把错的比特纠回来。
从工程视角看,LDPC 系统里通常分成两块:
LDPC Encoder:输入原始信息比特,输出带校验位的编码数据。
LDPC Decoder:输入接收端软信息,经过多次迭代译码,输出恢复后的数据。
这里有个细节新手要提前知道:译码器输入通常不是普通的 0/1 硬判决数据,而是 LLR 软信息。也就是说,接收机不会只告诉译码器“这个比特是 0 或 1”,而是告诉它“这个比特更像 0 还是更像 1,以及有多像”。LDPC Decoder 正是靠这些软信息来提升纠错能力。

Xilinx LDPC Encoder/Decoder IP 是什么
Xilinx LDPC Encoder/Decoder IP 是 Vivado IP Catalog 里的一个 LogiCORE IP,用来在 FPGA 里实现 LDPC 编码或译码功能。对应手册是 PG281。
这个 IP 的定位很明确:把复杂的 LDPC 编译码算法封装成可配置的硬件模块,让 FPGA 工程师不用从零手写完整 LDPC 编码器、译码器、缓存调度和 AXI 接口。
根据 PG281,LDPC Encoder/Decoder IP 支持:
LDPC Encode 或 Decode,两种操作在 IP 配置里选择。
5G NR 等标准化 LDPC 码。
用户自定义 QC-LDPC 码。
AXI4-Stream 高速数据接口。
AXI4-Lite 参数配置接口。
Normalized Min-Sum 和 Offset Min-Sum 译码算法。
如果你的项目是高速通信链路,尤其是已经确定要用 LDPC 作为 FEC,这个 IP 的价值就很直接:省掉大量算法硬件化和验证工作,把主要精力放在系统集成、接口时序、吞吐率评估和上板验证上。
这个 IP 支持哪些应用场景
PG281 里提到,这个 IP 可以覆盖多类标准和自定义 LDPC 场景。换成工程语言,大概可以这样理解。
5G NR
5G NR 物理层里大量使用 LDPC,尤其是数据信道编码。5G 的特点是数据速率高、码块配置多、吞吐率压力大。自己写一套通用 LDPC 编译码器,难度和验证成本都不低,所以直接用 Xilinx LDPC IP 是很常见的工程选择。
WiFi 802.11ac
WiFi 802.11ac 这类高速无线通信标准也使用 LDPC 来提升链路可靠性。对 FPGA 原型验证、PHY 算法验证、实验平台来说,LDPC IP 可以快速搭建可跑通的数据链路。
DOCSIS 3.1
DOCSIS 3.1 是有线宽带通信标准,链路速率高,对纠错能力也有要求。LDPC 在这类高速有线系统中非常适合做 FEC。
自定义 QC-LDPC 码
除了标准协议,有些项目会使用自定义 QC-LDPC 码,比如卫星通信、专用数传、科研验证平台等。PG281 支持通过参数方式配置一类准循环 LDPC 码,这对做自研通信体制的人比较有用。
IP 整体架构
PG281 的 Figure 1 给出了 LDPC Encoder/Decoder Interfaces 框图。这个图非常值得新手多看几遍,因为它基本说明了这个 IP 怎么接入系统。

从框图看,Xilinx LDPC Encoder/Decoder IP 主要包括这几部分:
AXI4-Lite Parameter Bus:用于配置 IP 参数、码表、寄存器、中断等。
AXI4-Stream 输入接口:DIN 输入数据,CTRL 输入每个块的控制参数。
AXI4-Stream 输出接口:DOUT 输出编码或译码结果,STATUS 输出每个块的状态信息。
I/P Buffer 与 O/P Buffer:输入输出缓存,用来缓冲数据流,方便和核心计算过程重叠。
LDPC Encoder/Decoder 核心模块:真正执行编码或译码算法的地方。
Working Memories / Memory Subsystem:用于保存中间信息、码表和译码迭代过程中的状态。
工程上可以把它理解成一个“带配置总线的流式处理器”:AXI4-Lite 负责告诉它“用什么码、怎么工作”,AXI4-Stream 负责把一块块数据送进去、把结果拿出来。
接口说明
这个 IP 的接口不算少,但不要一开始就被端口名劝退。按功能分,其实就几类。
接口 | 类型 | 作用 |
|---|---|---|
AXI4-Lite / PARAM | Memory Mapped Slave | 配置寄存器、码参数、共享码表、中断、接口使能等 |
AXI4-Stream DIN | Slave | 输入数据。编码时输入硬比特,译码时输入 LLR 软信息 |
AXI4-Stream DOUT | Master | 输出数据。编码时输出码字,译码时输出恢复后的硬判决或软信息 |
AXI4-Stream CTRL | Slave | 每个块的控制信息,比如码率相关参数、迭代次数、是否提前终止等 |
AXI4-Stream STATUS | Master | 每个块的处理结果状态,比如实际迭代次数、校验是否通过、块 ID 等 |
DIN_WORDS / DOUT_WORDS | AXI4-Stream 控制流 | 描述 DIN/DOUT 每次传输中有效字节数量,具体是否暴露取决于配置 |
AXI4-Lite:配置通道
AXI4-Lite 主要用于配置“不会每个采样都变”的参数,例如 LDPC code definition、共享码表、核心寄存器、中断、接口使能等。
在 5G NR 模式下,IP 已经支持 5G NR 码相关配置,很多码参数不需要用户通过 AXI4-Lite 手动下载。非 5G NR 运行时配置模式下,AXI4-Lite 就更重要,因为自定义码参数需要靠它写进去。
AXI4-Stream DIN:输入数据通道
DIN 是数据输入流,PG281 中给出的数据宽度是 128 bit。编码和译码时 DIN 的含义不一样:
做 LDPC Encoder 时,DIN 输入的是待编码的信息比特。
做 LDPC Decoder 时,DIN 输入的是 LLR 软信息。
这点很关键。很多初学者会直接把 0/1 数据送给 Decoder,然后发现性能不对。真正的接收链路一般是:ADC/解调/解映射之后生成 LLR,再送给 LDPC Decoder。
AXI4-Stream DOUT:输出数据通道
DOUT 是结果输出流。编码器输出编码后的码字,译码器输出恢复后的数据。译码输出可以根据配置选择硬输出或软输出。
CTRL:块级控制参数
CTRL 不是普通数据,它是每个 LDPC block 的控制字。5G NR 模式下 CTRL 宽度为 40 bit,非 5G NR 模式下为 32 bit。里面会包含块 ID、最大迭代次数、是否提前终止、码参数选择等信息。
STATUS:输出状态信息
STATUS 和 CTRL 对应,用来告诉系统这个块处理得怎么样。比如 Decoder 实际用了多少次迭代、是否提前终止、校验是否通过、对应的块 ID 是多少。
做系统调试时,STATUS 非常有用。它能帮助你判断问题是在前级 LLR、码参数配置、AXI4-Stream 时序,还是译码本身没有收敛。
工作模式
PG281 里把运行方式分成几类。对初学者来说,先抓住这三种就够了。
1. 5G NR 模式
如果在 Vivado 配置 IP 时选择 5G NR,IP 内部会按 5G NR 的 LDPC 规则初始化相关码参数。工程里每个块通过 CTRL 接口指定 base graph、lifting factor、码率相关参数等。
这个模式适合做 5G NR 基带、5G PHY 原型验证,或者学习 5G LDPC 数据流。
2. 非 5G NR 运行时配置模式
这个模式下,LDPC 码参数需要在运行时通过 AXI4-Lite 写入。它更灵活,适合自定义 QC-LDPC 码,或者需要动态切换多组码表的系统。
代价是系统集成更复杂:你要保证码参数写入正确,还要避免在 IP 正在使用某组码参数时去改它。
3. 非 5G NR 初始化配置模式
这个模式下,码参数由 Vivado 在生成 IP 时初始化到配置里。上板后不需要再通过 AXI4-Lite 下载完整码表,系统更简单。
如果你只是想先跑通固定码型,或者做一个稳定的 FPGA 原型,这种方式比运行时配置更适合入门。
新手建议:先从 5G NR 模式 或 Vivado 初始化配置模式 开始。等接口、仿真、数据格式都跑明白了,再考虑复杂的运行时码表配置。
译码算法
LDPC 的理论译码算法可以讲得很深,但做 FPGA 工程时,先知道 PG281 支持的两类算法就够了。
Normalized Min-Sum
Normalized Min-Sum 是工程里常用的 LDPC 近似译码算法。它相对完整的置信传播算法更适合硬件实现,计算复杂度低一些,也便于流水线和并行化。
在 PG281 里,Normalized Min-Sum 可以通过缩放因子来调整译码性能。手册里也提醒,合适的 LLR 缩放和归一化参数会影响最终误码性能。
Offset Min-Sum
Offset Min-Sum 也是一种常见近似算法。它通过偏移量修正 Min-Sum 的结果,硬件实现同样比较友好。
工程上不建议一上来就纠结两种算法谁“绝对更好”。更实际的做法是:结合你的码型、调制方式、信道模型和仿真结果,选择误码性能、资源、时延都能接受的配置。
迭代次数和提前终止
LDPC Decoder 的一个重要概念是迭代。译码器不是只算一遍就结束,而是会反复利用校验关系更新判断结果。
PG281 支持的最大迭代次数范围是 1 到 63。一般来说:
迭代次数越多,纠错能力可能越强。
迭代次数越多,译码延迟也越大。
迭代次数越多,系统等效吞吐率通常会下降。
所以迭代次数不是越大越好,而是要看链路指标。比如系统要求 BER/FER 很低,可以适当增加迭代次数;如果系统更看重低延迟,就要控制迭代次数。
PG281 还支持 Early Termination,也就是提前终止。典型做法是:如果译码过程中校验已经通过,就不用继续跑满最大迭代次数,直接结束当前块。
这对实际工程很有意义。信道条件好的时候,很多块可能几次迭代就通过校验,提前终止可以明显降低平均延迟和平均计算量。
性能指标
PG281 给出了典型/峰值性能数据,注意这些数据不是任何配置下都能保证达到,而是和码率、块长、时钟频率、是否 packing、迭代次数、器件速度等级等因素有关。
手册中比较值得关注的数字有:
Decoder 峰值吞吐可到约 1.78 Gb/s。
Encoder 峰值吞吐可到约 12.5 Gb/s。
手册性能章节的典型测试条件包括 400 MHz,Decoder 使用 8 次迭代。
为什么 Encoder 明显比 Decoder 快?原因也不难理解:编码基本是按规则生成校验位,而译码需要反复迭代、访问工作存储、更新软信息,所以计算量更大。
在做工程评估时,不要只看峰值吞吐。更靠谱的做法是:
先确定自己的码率、块长、Z 值和最大迭代次数。
看 PG281 里接近配置的表格或曲线。
再结合目标 FPGA 器件、时钟频率和系统数据流做余量评估。
最后用 Example Design 或自己的 testbench 做仿真验证。


Vivado 中如何使用
从工程流程看,使用 Xilinx LDPC Encoder/Decoder IP 可以按下面步骤来。
1. 打开 Vivado IP Catalog
新建或打开 Vivado 工程,在 IP Catalog 里搜索 LDPC Encoder/Decoder。
如果你的 Vivado 版本、器件或授权环境不支持这个 IP,可能会看不到,或者配置界面受限。
2. 搜索 LDPC Encoder/Decoder
找到 IP 后双击进入配置界面。这个 IP 是偏通信算法的 IP,参数比普通 FIFO、AXI GPIO 多很多,新手不要急着全看完,先把功能跑通。
3. 选择 Encoder 或 Decoder
PG281 里的 Operation 可以选择 Encode 或 Decode。
如果你做完整链路,通常会在发射端放 Encoder,在接收端放 Decoder。做单独验证时,也可以先只生成 Decoder 或只生成 Encoder。
4. 配置 5G NR 或自定义码
如果目标是 5G NR,直接选择 5G 模式会省很多事。IP 内部已经支持 5G NR 相关码参数,通过 CTRL 接口选择块参数。
如果是 WiFi、DOCSIS 或自定义 QC-LDPC,就需要根据工程需求配置标准或导入码定义。
5. 配置 AXI4-Lite 和 AXI4-Stream 接口
AXI4-Lite 决定你是否需要运行时配置参数。AXI4-Stream 相关选项会影响 DIN_WORDS、DOUT_WORDS 等接口是否暴露,以及数据流如何组织。
如果是初学阶段,建议尽量先使用 Example Design 默认推荐配置,不要一次性把所有接口都改复杂。
6. 生成 Example Design
PG281 提供 Example Design。默认有 simulation-only example design,也可以选择 PS-based example design。
初学者强烈建议先跑 Example Design。因为它会给出一套能工作的 AXI4-Stream 事务、AXI4-Lite 配置事务和 testbench,能帮你快速理解数据应该怎么送。
7. 进行仿真和上板验证
仿真阶段重点看:
AXI4-Stream 的
tvalid/tready/tlast是否符合预期。CTRL、DIN、DIN_WORDS 的对应关系是否正确。
DOUT 和 STATUS 是否能对上同一个 block ID。
Decoder 的
pass、dec_iter等状态是否合理。
上板阶段重点看:
前级 LLR 缩放是否合适。
DMA 或数据搬运模块是否有丢包、错位、背压处理问题。
AXI4-Lite 初始化顺序是否正确。
时钟频率和时序收敛是否满足目标吞吐。
Zynq 系统中的典型架构
如果用 Zynq 或 Zynq UltraScale+ 做系统,常见结构是 PS + PL:
PS 侧 ARM 负责参数配置、状态读取、控制流程。
AXI4-Lite 从 PS 接到 LDPC IP,用来写寄存器、配置码参数、读取中断和状态。
PL 侧数据通路 用 AXI4-Stream 传输高速数据。
AXI DMA 负责 DDR 和 AXI4-Stream 数据流之间搬运。
前后级可以接 PCIe、以太网、射频前端、JESD204、Aurora 或自定义高速接口。
一个典型数据链路可以这样理解:
PLAINTEXT
DDR/高速接口 -> AXI DMA -> AXI4-Stream -> LDPC Encoder/Decoder -> AXI4-Stream -> AXI DMA/后级模块
^
|
AXI4-Lite 配置
|
ARM PS在这种结构里,LDPC IP 本身只负责 FEC 编译码。系统能不能稳定跑起来,更多取决于数据搬运、缓存深度、块边界、LLR 格式、时钟域和 backpressure 处理。

<!-- 配图:这里插入 Zynq + LDPC IP 系统框图 -->
配图建议:
建议使用 image2 生成 Zynq + LDPC IP 系统框图。
image2 提示词:
适合哪些项目
Xilinx LDPC Encoder/Decoder IP 比较适合下面这些项目:
5G 基带:用于 5G NR 数据信道 LDPC 编译码。
SDR 软件无线电:搭建可配置通信链路,方便算法验证。
卫星通信:长距离链路需要较强纠错能力。
光通信:高速链路下需要 FEC 提升可靠性。
高速数传:无人机、测控、专用无线链路等场景。
WiFi PHY:用于 802.11 相关物理层验证。
DOCSIS 通信系统:用于有线宽带物理层 FEC。
如果你的项目只是低速串口、普通控制链路,LDPC 可能有点重。但只要进入高速通信、弱信道、高误码环境,LDPC 的工程价值就很明显。
使用这个 IP 需要注意什么
1. 该 IP 需要 License
LDPC Encoder/Decoder 属于 Xilinx 高级通信类 IP,实际使用前要确认 Vivado License 状态。没有有效授权时,可能无法配置、生成或完成完整实现流程。
2. 吞吐率不是固定值
PG281 给出的吞吐率要结合条件看。码率、块长、PSIZE/Z、最大迭代次数、是否启用 packing、时钟频率、器件型号都会影响最终性能。
不要拿一个峰值数字直接写进系统指标,最好按自己的配置重新评估。
3. AXI4-Stream ready/valid 要处理好
AXI4-Stream 的传输只在 tvalid 和 tready 同时为高时发生。LDPC IP 的 DIN、DOUT、CTRL、STATUS 等接口都有握手关系。
如果前级或后级没有正确处理 backpressure,很容易出现块错位、数据丢失、STATUS 对不上 DOUT 这类问题。
4. Decoder 输入通常是 LLR 软信息
这是 LDPC Decoder 的关键点。译码输入不是简单 0/1,而是经过解调和解映射得到的软信息。PG281 中 DIN 对译码输入有 LLR 格式说明,并且提到 LLR 缩放、饱和会影响性能。
如果你用的是仿真链路,要确认 LLR 符号、位宽、缩放方向都和 IP 要求一致。
5. 要考虑缓存、延迟和数据对齐
LDPC IP 内部有输入输出缓存,系统外部往往还有 DMA FIFO、跨时钟 FIFO、DDR buffer。做完整系统时,要明确每个 block 的边界和 ID,不要只盯着连续 bit 流。
特别是 Decoder,迭代次数变化、提前终止、输出状态延迟,都可能让调试变复杂。建议在 CTRL 和 STATUS 中使用 block ID 做对应。
6. 建议先跑 Example Design
PG281 的 Example Design 不只是“演示工程”,它其实是理解这个 IP 的捷径。里面有 testbench、AXI4-Stream transaction log、AXI4-Lite 配置流程,也能帮助你确认 Vivado 生成的配置到底怎么工作。
新手不要一上来就把 IP 塞进自己的大系统。先跑 Example Design,再替换成自己的数据源和数据汇,调试效率会高很多。
总结
Xilinx LDPC Encoder/Decoder IP 是一个面向高速通信系统的 LDPC 编译码硬件 IP。它把复杂的 LDPC 编码、译码、码参数管理、AXI 接口和内部缓存封装起来,让 FPGA 工程师可以更快搭建 5G NR、WiFi、DOCSIS、自定义 QC-LDPC 等通信链路。
对于 FPGA 初学者和通信方向工程师来说,刚开始不用陷入太深的数学推导。更重要的是先把几个工程问题搞清楚:
Encoder 和 Decoder 在链路中的位置。
AXI4-Stream 数据流怎么组织。
AXI4-Lite 参数什么时候配置。
CTRL 和 STATUS 如何按 block 对应。
Decoder 输入 LLR 的格式和缩放怎么处理。
吞吐率、迭代次数、延迟之间如何取舍。
把这些弄明白,再去看 PG281 的寄存器表、码参数表和性能曲线,就会顺很多。
如果后续有时间,我会继续整理 LDPC IP 的 Vivado 配置流程、AXI4-Stream 数据格式、Example Design 仿真方法。
资料获取
想进一步了解 LDPC IP 的配置流程、接口时序和性能参数?
完整《Xilinx LDPC Encoder/Decoder v2.0(PG281)》官方手册已整理上传至 BuildFPGA 资源站,欢迎下载学习。

