LDPC译码器中SISO模块的高层次综合实现 下载本文

内容发布更新时间 : 2024/7/5 7:26:37星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

LDPC译码器中SISO模块的高层次综合实现

作者:段倩妮 吴迪

来源:《电脑知识与技术》2015年第17期

摘要:日益增长的硬件设计复杂度和越来越短的芯片研发周期给集成电路设计带来了极大的挑战。通过更高抽象层实现硬件设计自动化的方法是解决问题的关键。 VivadoTM High-Level Synthesis(HLS)是Xilinx公司发布的高层次综合工具。针对信道编解码LDPC译码器芯片的核心模块—软输入软输出(Soft-Input Soft-Output, SISO)模块,采用HLS设计方法进行了基于C语言模型的实现。HLS的综合结果能与手工使用Verilog实现的性能接近,但明显缩短了设计时间。

关键词:High-Level Synthesis; SISO; Log-Map; IEEE 802.11ac; LDPC 中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2015)17-0183-04 Implementation of SISO Module in LDPC Decoder with High-Level Synthesis Tool DUAN Qian-ni1,WU Di2

(1. Nanjing University of Aeronautics and Astronautics, Nanjing 210016, China;2. Soochow University, Suzhou 215006, China)

Abstract:The increasing complexity of hardware and decreasing time of development brings challenges to integrated circuit design. High-level synthesis-based design automation is the key to solve the problem. VivadoTM High-Level Synthesis is a high-level synthesis tool from Xilinx Inc. Targeting the Soft-Input Soft-Output (SISO) module which is the core unit of LDPC decoder, HLS methodology is applied by programming the SISO module in C. The synthesis result shows that HLS based design achieves similar hardware efficiency as compared to the manually coded design using Verilog, while significantly reducing the design effort.

Key words:High-Level Synthesis; SISO; Log-Map; IEEE 802.11ac; LDPC 1 概述

低密度奇偶校验Low Density Parity Check(LDPC)码最早于1962年由R.Gallager第一次提出[1],是一类校验矩阵为稀疏矩阵的线性分组码,在1996年被再次发现[2]。非规则LDPC码的构造使得数据传输速率能够接近香农容限,无线通信标准如DVB-T2,WLAN(802.11n,802.11ac)都考虑了LDPC码的使用。

龙源期刊网 http://www.qikan.com.cn

由于LDPC译码器的高处理要求,通常用硬件来实现。在软件无线电系统中,可编程逻辑阵列(FPGA)的灵活性和高处理能力使得LDPC译码器的硬件设计成为可能[3-5]。基于RTL级的HDL设计是目前最为广泛的数字电路实现方法。但是,随着时间的推移,各类产品应用中使用的信号处理算法比以往更加复杂,传统基于RTL设计FPGA的实现需要更多的时间来分析设计,迭代仿真和优化性能。为了摆脱这个困境,Xilinx公司发布了VivadoTM HLS工具,可由高层次抽象层(如C语言)直接综合出硬件设计。因此,设计者可将关注点集中在抽象层而不是执行细节。设计者只需在抽象层验证函数功能的正确性即可,验证的速度将比基于HDL的设计流程快得多。再加之LDPC译码器的很多设计架构在抽象层次上就具有很高的并行性[6],很容易通过约束条件来实现高性能的硬件。更高的设计层次带来更大的设计空间,也增加了寻找到最佳设计的可能性。

本文将展示如何通过Xilinx VivadoTM HLS工具实现LDPC译码器中用于更新校验节点的SISO模块。首先,根据算法所采用的架构写成C代码;其次,利用Xilinx VivadoTM HLS工具对C代码进行综合,实现SISO模块;最后验证了SISO的性能是否满足设计需求。 2 VivadoTM HLS的开发流程

图1是VivadoTM HLS工具的设计流程。设计的输入是C、C++或者SystermC代码,约束条件和Test Bench。

1)C、C++或者Systerm C代码。C代码根据算法的硬件架构来实现,并完成算法应有的功能。

2)约束条件。添加的约束条件用来指导C代码综合的流程,循环、接口、数组都可以添加约束条件,设计者通过优化C代码和添加适当的约束条件来获得最大吞吐率。 3)Test Bench。Test Bench用来在综合前验证C代码功能的正确性,并可以在之后的C/RTL联合仿真时比对RTL的输出结果。

VivadoTM HLS的输出结果是可综合的Verilog、VHDL或SystemC代码,可以在FPGA硬件上执行[7]。

以下是设计的流程。

1)在使用VivadoTM HLS工具进行设计前,首先应该对算法实现的硬件架构有初步的框架,根据这个架构来写出实现算法功能的C代码。再编译、执行和调试C代码,并验证代码功能的正确性。

2)根据实现需求添加适当的约束条件,综合C代码生成相应的RTL设计,同时产生综合报告和设计分析。分析生成的报告是否符合要求,如果不符合要求,继续优化C代码并修改约束条件。

龙源期刊网 http://www.qikan.com.cn

3)C/RTL联合仿真,利用Test Bench来验证RTL实现的正确性。 4)如果需要,可以将实现的RTL设计封装成IP核。

在高层次具有较高并行度的算法用VivadoTM HLS软件实现,容易通过添加适当的约束条件,综合出高效的处理流水线。 3 SISO模块的Log-Map算法

在LDPC译码器的分层迭代译码算法中,复杂度最高的是更新校验节点信息[Λ(xi)]的计算,文献[8]提出了一种代替双边图来表示LDPC码的方法,来简化[Λ(xi)]的计算过程。 一个LDPC码完整的网格结构非常大,会使得和—积算法难以实现。然而,一个[M×N]的LDPC码可以看成[M]个并行级联的单校验码,每个单校验码对应一个校验节点。如图2所示,一个单校验码可以表示成两个状态的有限长卷积码。每一个单校验码都可以通过Log-Map的算法来译码,即更新校验节点信息[Λ(xi)]的计算可以利用Log-Map算法。

Log-MAP的译码算法同样也在文献[9]中提出。具体内容如下考虑到[H]矩阵第[j]行有[n]个1,位置为{[j1,j2,???,jn]},则对应的码字[x]中的{[xj1,xj2,....,xjn]}满足校验矩阵每行的偶校验约束,如果是[LLR]值,我们使用一种boxplus()的操作来表示校验节点[xi]收到变量节点的更新信息

IEEE 802.11ac中LDPC码是准循环码(QC-LDPC),协议中定义了三种码长(648、1296、1944)和四种码率(1/2、2/3、3/4、5/6),总共12个矩阵。观察协议中的矩阵发现,矩阵每一行中1的个数最多为8个[11]。为了支持IEEE 802.11ac,输入数组[γ]和存储[γ]的数组[γ_stack]设为最大值8。因为在由C代码综合的过程中需要分配硬件资源,如果写成动态的参数,则综合不出结果,所以在数组定义时大小需设置具体的数值。根据算法,数组[α]、数组[β]、数组[α_temp]的最大长度为7。

两个循环的内部主要执行的都是条件分支。条件分支可以在并行中以分离的路径来执行,允许数据从一个任务流进里面有状态执行的下一个任务,导致系统有更高的性能。 下面是SISO主体部分的伪代码。 γ_stack、α_stack LOOP1: for k=0 to iter do if k