发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种DVB-S2 LDPC译码变量节点更新模块及其实现方法,采用集群化设计变量节点更新模块,实现变量节点更新模块内部的相同功能模块化及资源共享化,不仅针对ASIC实现内存优化设计,能够有效提高内存使用效率,而且能够根据芯片使用情况,通过参数修改灵活调整变量节点更新子模块例化数量。
根据本发明的第一方面,提供了一种DVB-S2 LDPC译码变量节点更新模块,包括:
第一例化模块,根据输入的第一数量,例化得到相应第一数量的变量节点更新子模块;
第一RAM,根据所述第一数量为每个变量节点更新子模块分配LLR存储单元,用于存储所述变量节点更新子模块从外部获取的第一LLR和计算得到第二LLR;
第二RAM,根据所述第一数量为每个变量节点更新子模块分配校验数据存储单元,用于存储所述变量节点更新子模块从校验节点处理模块获得的校验矩阵数据信息。
本发明的一个的实施例中,所述第一数量为正整数,最大取值为360。
本发明的一个的实施例中,所述LLR存储单元包括:
第一LLR存储单元,用于存储将从外部获取的第一LLR;
第二LLR存储单元,用于存储每次迭代计算得到的第二LLR,且只存储最新计算的第二LLR。
本发明的一个的实施例中,所述第一LLR存储单元和第二LLR存储单元为矩阵存储结构;
其中,所述矩阵存储结构的列为变量节点并行度数N;行M为码长除以变量节点并行度数N;矩阵存储结构上存储N乘以M个所述第一LLR或第二LLR,每个所述第一LLR或第二LLR依次对应校验矩阵的一列。
本发明的一个的实施例中,所述变量节点并行度数N为360。
根据本发明的第二方面,提供了一种DVB-S2 LDPC译码变量节点更新模块的实现方法,包括:
根据输入的第一数量,例化得到相应第一数量的变量节点更新子模块;
在第一RAM上分别为每个变量节点更新子模块分配LLR存储单元,用于存储所述变量节点更新子模块从外部获取的第一LLR和计算得到第二LLR;
在第二RAM上分别为每个变量节点更新子模块分配校验数据存储单元,用于存储所述变量节点更新子模块从校验节点处理模块获得的校验矩阵数据信息。
本发明的一个的实施例中,所述第一数量为正整数,最大取值为360。
本发明的一个的实施例中,所述LLR存储单元包括第一LLR存储单元和第二LLR存储单元;
将从外部获取的第一LLR存储在所述第一LLR存储单元上;
将每次迭代计算得到的第二LLR存储在第二LLR存储单元上,且只存储最新计算的第二LLR。
本发明的一个的实施例中,所述第一LLR存储单元和第二LLR存储单元为矩阵存储结构;
其中,所述矩阵存储结构的列为变量节点并行度数N;行M为码长除以变量节点并行度数N;矩阵存储结构上存储N乘以M个所述第一LLR或第二LLR,每个所述第一LLR或第二LLR依次对应校验矩阵的一列。
本发明的一个的实施例中,所述变量节点并行度数N为360。
本发明实施例采用集群化设计变量节点更新模块,实现变量节点更新模块内部的功能模块化及资源共享化,多个变量节点更新子模块共用两个大的RAM存储子模块,不仅针对ASIC实现内存优化设计,能够有效提高内存使用效率,而且能够通过参数修改调整共享RAM存储子模块的变量节点更新子模块例化数量,更够根据芯片使用情况灵活调整变量节点更新子模块例化数量。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
本发明提供的一种DVB-S2 LDPC译码变量节点更新模块及其实现方法,基于FPGA或ASIC,可以使用Verilog、VHDL、System C,System Generator/DSP buil der等实现;通过参数化和模块化的设计,具有消耗资源少、可移植能力性强等优点。下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
DVB-S2标准的LDPC码是一种非规则重复累积码(IRA码),其编码和译码均可以通过校验矩阵而非生成矩阵进行,所以其校验矩阵的存储十分重要。在本发明中,将校验矩阵H表示为H=[H1,H2],H维度为m×n,H1维度为m×k,H2维度为m×m。其中,n位不同码率码字的输出码长,k为不同码率码字的输入码长,m为n-k。每种码字的n、k具体值参见表1;表2为DVB-S2 LDPC中的子矩阵H1特性分析表;图1为DVB-S2 4/9码率的校验矩阵的子矩阵H1的示意图,图2为DVB-S2 4/9码率的校验矩阵的子矩阵H2的示意图,图3为DVB-S2 4/9码率的校验矩阵H的示意图。
DVB-S2标准附录B和C中给出了各码字的校验位地址表,由校验位地址表可以求得码字的校验矩阵,并进而进行编译码。
表1:不同码字类型的各参数值表。
码字类型 |
码率 |
输出码长n |
输入码长k |
行数X |
j |
q |
0 |
1/4normal |
64800 |
16200 |
45 |
12 |
135 |
1 |
1/3normal |
64800 |
21600 |
60 |
12 |
120 |
2 |
2/5normal |
64800 |
25920 |
72 |
12 |
108 |
3 |
1/2normal |
64800 |
32400 |
90 |
8 |
90 |
4 |
3/5normal |
64800 |
38880 |
108 |
12 |
72 |
5 |
2/3normal |
64800 |
43200 |
120 |
13 |
60 |
6 |
3/4normal |
64800 |
48600 |
135 |
12 |
45 |
7 |
4/5normal |
64800 |
51840 |
144 |
11 |
36 |
8 |
5/6normal |
64800 |
54000 |
150 |
13 |
30 |
9 |
8/9normal |
64800 |
57600 |
160 |
4 |
20 |
10 |
9/10normal |
64800 |
58320 |
162 |
4 |
18 |
11 |
1/5short |
16200 |
3240 |
9 |
12 |
36 |
12 |
1/3short |
16200 |
5400 |
15 |
12 |
30 |
13 |
2/5short |
16200 |
6480 |
18 |
12 |
27 |
14 |
4/9short |
16200 |
7200 |
20 |
8 |
25 |
15 |
3/5short |
16200 |
9720 |
27 |
12 |
18 |
16 |
2/3short |
16200 |
10800 |
30 |
13 |
15 |
17 |
11/15short |
16200 |
11880 |
33 |
12 |
12 |
18 |
7/9short |
16200 |
12600 |
35 |
-- |
10 |
19 |
37/45short |
16200 |
13320 |
37 |
13 |
8 |
20 |
8/9short |
16200 |
14400 |
40 |
4 |
5 |
表2:DVB-S2 LDPC中的子矩阵H1特性分析表。
在表2中可以看出,对于校验矩阵H的子矩阵H1,其本身存在一些特殊性质,例如其矩阵的行重和列重是规律性的;但短帧的行重中存在V1,V2,V3,V4,V5五个向量,不再是固定值,表示该校验矩阵的行重以该向量为一周期循环至最后。其中:
V1=[2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,2,2,2,2,1,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2];
V2=[3,4,5,4,2,3,2,3,4,3,3,4,4,4,4,3,2,4,3,2,4,3,4,3,5];
V3=[8,10,9,7,8,11,9,10,9,8,9,10];
V4=[10,9,11,10,10,1l,11,11,11,11];
V5=[14,14,14,14,17,16,17,15]。
而对于DVB-S2标准中各LDPC码的校验矩阵的存储,也不是直接存储校验矩阵,实际上是对每个校验矩阵对应的边沿表(edgetable)的存储,边沿表是校验矩阵加扰前的缩减简化值,每个边沿表有X行(X=k/360,k为该码字类型的输入码长),每行有J(J也称度数,边沿表每行J取3或j,即每行校验位置值的数量为3或j)个校验位置值,每个校验矩阵对应的边沿表具体可参看DVB-S2标准的附录B和附录C,在此不再做更详细描述。
存储边沿表,相较于直接存储校验矩阵,在一定程度上能够减少资源消耗,但21种码字的边沿表具有的行数各不相同,且边沿表中,每个校验位置值较大,各个校验位置值的动态范围依然很大,并没有解决现有校验矩阵的存储访问逻辑复杂,逻辑资源消耗大,难以实现低资源消耗的存储的问题。所以本发明实施例,采用新的存储逻辑,以边沿表的每行为一个存储单元,先存储每行的总体特征(行描述字),再对每行中的各个校验位置进行计算,得到表征该校验位置值的特征值(校验描述字),该校验描述字为按照校验位置值对应的q值对该校验位置值取模,相较于校验位置值,校验描述字缩小q倍,存储该校验描述字,相较于校验位置值所需存储空间减小,且不同校验位置值的校验描述字之间的动态范围也相应减小,有效的降低了校验矩阵的存储访问逻辑复杂,减小逻辑资源消耗,实现低资源消耗的存储。
实施例一。
如图4所示,本发明实施例提供的一种DVB-S2 LDPC译码变量节点更新模块,包括:……
第一例化模块10,根据输入的第一数量,例化得到相应第一数量的变量节点更新子模块11;在本实施例中,第一数量为正整数,最大取值为360。
第一RAM20,根据第一数量为每个变量节点更新子模块11分配LLR存储单元21,用于存储变量节点更新子模块从外部获取的第一LLR和计算得到第二LLR;在本实施例中,LLR存储单元21包括:
第一LLR存储单元,用于存储将从外部获取的第一LLR;
第二LLR存储单元,用于存储每次迭代计算得到的第二LLR,且只存储最新计算的第二LLR,即每次计算得到新的第二LLR都会覆盖掉上一次迭代存储的第二LLR,并在达到最大迭代次数时,将最后一次计算得到的第二LLR加上原始的第一LLR,输出该和值,作为码子判决依据,例如,校验矩阵为m×n,即行为m,列为n,则原始输入的第一LLR和第二LLR个数都为n,每个第一LLR和每个第二LLR对应校验矩阵的一个列,所以在进行第一LLR和第二LLR做和时是与同一列对应的第一LLR和第二LLR之间做和,得到和值的个数依然为n。
第二RAM30,根据第一数量为每个变量节点更新子模块11分配校验数据存储单元31,用于存储变量节点更新子模块从校验节点处理模块获得的校验矩阵数据信息。
在本发明实施例中,第一LLR存储单元和第二LLR存储单元为矩阵存储结构;
其中,矩阵存储结构的列为变量节点并行度数N;行M为码长除以变量节点并行度数N;矩阵存储结构上存储N乘以M个所述第一LLR或第二LLR,每个所述第一LLR或第二LLR依次对应校验矩阵的一列。
以变量节点并行度数N为360为例,矩阵存储结构如图5所示,矩阵存储结构的列为360,如果码长为64800,则行数为180,如果码长为短帧16200,则行数为45。在图5中,VN[]为每个变量节点的编号,如并行度为360时,变量节点个数为360,则编号为VN[0]至VN[359],这样addr和VN[]确定了每个第一LLR或第二LLR的存储位置。
校验节点处理模块的存储结构在码字的所有数据位进行校验编码的时候都会使用,但在最后的校验位却会以一种不同的方式来合并。第一个校验位,VN[K]会编码到校验方程CN[1],然后VN[K+1]编码到CN[2],如此继续下去,一直到码字的最后,这种校验节点的组织方式不同于图5所示的方式,所以采用图6所示的矩阵存储结构来匹配校验节点处理模块CN的结构。
在图6中,校验的变量节点的bit位由因子q来修正,并且与校验节点单元的结构通过若干条边相连。因子q=(n-k)/360,即k=n-360q,所以变量节点VN[359]的最后一个地址包含变量节点(k+359*q-1)的数据,也相当于n-1,其中,n为码长,k为有效码长。
每一个变量节点更新子模块都对应360个变量节点,分别编号为VN[0]到VN[359].每个变量节点都有一个对应的RAM与其相连。在1/2码率时,k为32400,在每组RAM中,由于码长为64800,码的并行度为360,因此码字可以分成64800/360=180组,因此在进行译码器存储结构设计时,为了满足存储要求,可以将RAM的深度设置成最大值180。又因为在研究改进的最小和译码算法时,采用的量化方案若为6bit量化,因此在对RAM进行设置时,可以把宽度确定为6,该RAM在设计中采用与变量节点更新子模块相同的时钟驱动,主要为变量节点更新子模块提供节点信息的存储。为了使变量节点的处理更加高效,变量节点的存储方式可以用双口RAM。
变量节点更新子模块用来对变量节点中L(q(I,j) k)的值进行处理,处理前后的值均存在与其相连的第一RAM中。因为L(r(ji) k)的值时从校验节点处理模块传来的,因此在进行变量节点的信息处理时,根据变量节点的处理公式,只需要从与其相连的第一RAM中读取L(Pi)的值,并与校验节点处理模块传来的L(r(ji) k)的值进行累加,就可以完成变量节点信息的处理过程。变量节点对信息的更新操作相对于校验节点对信息的更新操作,其实现过程复杂度比较小。
对本发明进行了逻辑设计和仿真、综合,综合后的FPGA资源消耗评估如下,第一数量NUMVNS为2时,其中LUT占150个,如图7所示,FF为207个。第一数量NUMVNS为3时,LUT占218个,FF为280个,如图8所示。第一数量NUMV NS为120时,LUT占8143个,FF为8849个,如图9所示。
实施例二。
如图10所示,本发明实施例提供的一种DVB-S2 LDPC译码变量节点更新模块的实现方法,包括以下步骤:
步骤S100、根据输入的第一数量,例化得到相应第一数量的变量节点更新子模块;
步骤S200、在第一RAM上分别为每个变量节点更新子模块分配LLR存储单元,用于存储所述变量节点更新子模块从外部获取的第一LLR和计算得到第二LLR;
步骤S300、在第二RAM上分别为每个变量节点更新子模块分配校验数据存储单元,用于存储所述变量节点更新子模块从校验节点处理模块获得的校验矩阵数据信。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
尽管已经示出和描述了本发明的实施方式,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施方式进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。