基于HLS的QC-LDPC译码器的设计方法及QC-LDPC译码器


基于hls的qc-ldpc译码器的设计方法及qc-ldpc译码器
技术领域
1.本发明属于译码器设计技术领域,更具体地,涉及一种基于hls的qc-ldpc译码器的设计方法及qc-ldpc译码器。


背景技术:



2.随着社会的发展,各种业务对存储设备的容量与速度都提出了越来越高的要求。低密度奇偶校验码 (ldpc) 是一种流行且强大的线性纠错码系列,接近香农极限,已成为在充满噪声的物理空间上构建可靠网络空间的保障措施。准循环 (qc) ldpc 码是 ldpc 码的子类,具有便于硬件实现的常规码结构,广泛用于许多无线标准(例如 wifi、wimax、dvb-s2 和 ccsds)和数据存储(例如,固态硬盘)。 ldpc译码器在代码结构、译码算法和硬件实现方面得到了广泛的研究。
3.high-level synthesis(hls),是一种自动化的设计过程,它将逻辑行为的算法描述编译到寄存器传输级(rtl) 的相应 fpga 硬件实现中。基于 hls 的自动化硬件开发具有更高的生产力和灵活性,广泛用于大规模和/或新功能场景,例如机器学习、图形计算和特定领域的加速器。主流 hls,例如 vivado hls 和英特尔 hls,使用 c/c++ 作为开发语言和附加的编译指示或指令来表征硬件行为。然而,基于目前hls的qc-ldpc译码器在rtl实现中存在着的显著硬件效率低下的问题。


技术实现要素:



4.针对现有技术的以上缺陷或改进需求,本发明提供了一种基于hls的qc-ldpc译码器的设计方法及qc-ldpc译码器,其目的降低基于hls的设计的qc-ldpc译码器的硬件消耗并减小耗时。
5.为实现上述目的,按照本发明的一个方面,提供了一种基于hls的qc-ldpc译码器的设计方法,所述译码器包括译码控制器、执行并行移位的并行循环移位模块和执行校验的校验节点运算模块,外部数据输入译码器后经移位与校验的循环操作后输出译码结果,所述校验节点运算模块具有n个cnu,所述设计方法包括基于hls设计所述校验节点运算模块,所述校验节点运算模块的hls设计过程包括:以cnu控制器作为不同cnu的共享成员,以最小值生成器和r生成器所传输的信号作为不同cnu的非共享成员;定义一个cnu阵列类,在cnu阵列类中,以数组的形式定义每个非共享成员,当接收到输入向量q={q[0], q[1],
ꢀ……
, q[n-1]},调用作为共享成员的cnu控制器依次遍历基矩阵中的每一行有效元素并在每次遍历完当前行的有效元素后执行循环展开,所述循环展开包括调用hls的循环展开指令使非共享成员按照cnu的工作方式循环n次,实现n个cnu实例,第i个cnu实例对应处理输入向量中的元素q[i]后输出一个校验结果r[i],输入向量q经n个cnu实例处理后输出校验结果r={r[0],r[1],
……
,r[n-1]}。
[0006]
在其中一个实施例中,不同cnu的非共享成员包括最小值生成器向r生成器所传输
的中间状态ps、最终状态fs和q符号位q_signs,其中,中间状态ps对应n维数组{ps[0],ps[1],
……
,ps[n-1]},最终状态fs对应n维数组{fs[0],fs[1],
……
,fs[n-1]},q符号位q_signs对应n维数组{q_signs [0],q_signs [1],
……
, q_signs [n-1]};当共享的cnu控制器遍历基矩阵中的任一行时,以cnu实例编号i为当前循环迭代号进行循环展开,所述循环展开包括:判断i是否小于n,若是,读取当前元素q[i],将当前行每个元素的符号记录于q符号位q_signs [i],将中间状态ps[i]赋值给最终状态fs[i]并根据最终状态fs[i]计算对应的r[i],实现第i个cnu实例,且将i+1赋值给i并重复所述循环展开直至i=n时结束循环;n次循环实现n个cnu实例;其中,fs[i]中包含当前基矩阵行中的最小绝对值以及从q_signs[i]到的当前基矩阵行中除最小绝对值以外的其他所有元素的符号进行异或得到的符号位,ps[i]表示寻最小绝对值和符号位的中间过程,r[i]等于fs[i]中的最小值与符号位相乘。
[0007]
在其中一个实施例中,所述设计方法包括基于hls设计所述并行循环移位模块,所述并行循环移位模块的hls设计过程包括:定义输入向量寄存数组in_reg和输出向量寄存数组out_reg,当接收到需要进行位移的输入向量时,将输入向量中的中的第j个元素ina(j)赋值给输入向量寄存数组in_reg的第j个元素in_reg(j),j=0,2,
……
,n-1,n为输入向量的元素数量;根据移位值count对寄存数组in_reg中的元素进行移位,将输入向量寄存数组中的元素in_reg[(j+count)%size]赋值幅值给输出向量寄存数组out_reg中的第j个元素out_reg (j);将输出向量寄存数组中的第j个元素out_reg (j)赋值给输出向量的第j个元素outa(j),所有元素组成最终的输出向量。
[0008]
在其中一个实施例中,所述设计方法包括基于hls设计所述并行循环移位模块,所述并行循环移位模块的hls设计过程包括:定义m个向量寄存数组[s1,s2,
……
,sm],m为移位值count转换为二进制数后的位数;当接收到待移位的输入向量ina后,识别count二进制数的第1位的数值,当为“1”时,将ina移位1位后赋值给s1,当为“0”时,将ina赋值给s1;从小到达依次识别count二进制数的第2至第m-1位的数值,当第n位的数值为“1”时,将s(n-1)移位1位后赋值给sn,当为“0”时,将s(n-1) 赋值给sn,n=2,3,4,
……
,m-1;识别count二进制数的第m位的数值,当为“1”时,将s(m-1)移位1位后赋值给输出向量outa,当为“0”时,将s(m-1) 赋值给输出向量outa。
[0009]
在其中一个实施例中,所述设计方法还包括基于hls设计无效元素感知循环调度算法,所述无效元素感知循环调度算法的hls设计过程包括:遍历基矩阵,删除值为
“‑
1”的元素后,根据所保留的元素重新构造一个压缩矩阵,并设置索引数组来记录压缩矩阵中每个元素在原始基矩阵中的位置,以压缩矩阵作为新的基矩阵以用于读取移位值进行调度译码。
[0010]
在其中一个实施例中,基于hls设计的qc-ldpc译码器的工作流程包括:步骤s1:读取输入input,对input初始化形成向量p并存入存储器中;步骤s2:将向量p输入并行循环移位模块进行并行循环移位,使向量p转换为;
步骤s3:利用减去存储器中的向量r得到向量q;步骤s4:将向量q输入基于hls设计的校验节点运算模块,输出并更新存储器中的向量r;步骤s5:对向量q和求和后得到求和向量;步骤s6:将求和向量输入并行循环移位模块进行并行循环移位,使求和向量转换为,将存入存储器以更新p,跳转至步骤s2重新循环直至循环结束,以最后输出的作为译码结果output。
[0011]
按照本发明的另一方面,提供了一种qc-ldpc译码器,其基于上文所述的基于hls的qc-ldpc译码器的设计方法设计而成。
[0012]
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:cnu(check node unit,校验节点单元)阵列是qc-ldpc迭代译码过程中的核心,由n个cnu组成,hls能够识别cnu数组,传统的hls设计中,cnu被定义为一个c++类,cnu 数组使用循环和 hls unroll实现生成 n 个 cnu 硬件实例,在每次循环中需要将每个成员进行赋值,该过程硬件资源开销大且编译时间长。发明人分析了当前基于传统hls的qc-ldpc译码器的rtl实现,发现在hls设计中,可以使cnu阵列共享cnu控制器而不影响其校验效果。因此,本发明提出一种不同于传统的hls设计方法,来设计校验节点运算模块。通过分析n个cnu可共享的部分和不可共享的部分,将cnu控制器作为cnu阵列中所有cnu的共享成员,而将以最小值生成器和r生成器所传输的信号作为不同cnu的非共享成员,在循环中,将共享成员置于循环外,只对非共享成员进行循环,以实现多个 cnu 实例,由于只针对非共享成员进行循环,共享成员无需循环,因此有效节省了硬件资源并缩短编译时间。
附图说明
[0013]
图1是一实施例中的qc-ldpc译码器的工作流程图。
[0014]
图2是传统技术中基于hls设计实现的cnu阵列。
[0015]
图3是一实施例中的基于改进后的hls所实现的cnu阵列。
[0016]
图4是一实施例中基于改进后的hls所实现的并行循环移位器。
[0017]
图5是另一实施例中基于改进后的hls所实现的并行循环移位器。
[0018]
图6(a)是一实施例中的不同译码器的吞吐量随译码单元数量的变化曲线。
[0019]
图6(b)是一实施例中的不同译码器的硬件消耗随译码单元数量的变化曲线。
具体实施方式
[0020]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0021]
为了便于理解本发明,首先对qc-ldpc译码器的工作流程进行说明,如图1所示为本实施例最终设计出的qc-ldpc译码器的工作流程图,其过程主要包括以下步骤。
[0022]
步骤s100:读取输入input,对input初始化形成向量p并存入存储器中。
[0023]
步骤s200:将向量p输入并行循环移位模块进行并行循环移位,使向量p转换为。
[0024]
步骤s300:利用减去存储器中的向量r得到向量q。
[0025]
步骤s400:将向量q输入基于hls设计的校验节点运算模块,输出并更新存储器中的向量r。
[0026]
步骤s500:对向量q和求和后得到求和向量。
[0027]
步骤s600:将求和向量输入并行循环移位模块进行并行循环移位,使求和向量转换为,将存入存储器以更新p,跳转至步骤s200重新循环直至循环结束,以最后输出的作为译码结果输出output。
[0028]
其中,校验节点运算模块是qc-ldpc迭代译码过程中的核心,其由n个子cnu组成。在传统技术中,cnu被定义为一个c++类,使用循环和 hls unroll实现生成 n 个 cnu 硬件实例,其中cnu的每个成员都需要进行循环,最终实现的cnu阵列如图2所示,图中示例为3个cnu, 3个cnu由一个cnu全部的全部成员复制扩展所得,即,cnu中的每个成员均被复制了3次,实现3个cnu实例。每个cnu的工作方式相同,向量q输入校验节点运算模块后,向量q中的每个元素q与cnu一一对应,第i个元素q输入第i个cnu,在经译码器循环连续输入k个q之后便能进行校验,其中,k为基矩阵每一行的有效元素数量。每个cnu通过cnu控制器、最小值生成器和r生成器实现校验,其中,cnu控制器调用最小值生成器识别出k个q值中的最小绝对值并记录其位置pos(位置标记),同时对除最小绝对值以外的所有元素的符号进行异或得到符号位,然后调用r生成器,将最小绝对值和符号位相乘后输出对应位置的r值,多个cnu则输出多个r值构成r向量。如图2所示,由于传统技术中基于hls设计实现校验节点运算时,是定义一个cnu并对一个cnu的所有成员进行复制,通过循环和hls展开实现并生成n个cnu的硬件,子cnu数量越多,所造成的资源消耗越多,编码时间也越长。
[0029]
本发明通过分析基于hls实现cnu阵列的过程进行分析,发现可以将cnu的成员分为共享成员和非共享成员,其中,共享成员为cnu控制器,而非共享成员则为最小值生成器和r生成器所传输的信号,在进行hls设计时,明确定义一个cnu 阵列类,这个阵列类中包含了一系列的非共享成员数组,数组中的元素都与实例中非共享成员、函数相关联,而共享部分只有一个,里面的成员、函数只会产生一次,多个实例共享此一个共享部分。具体来说,首先定义了一个cnu阵列类,然后类中非共享部分的成员被实现为数组,其次在cnu阵列类定义的多个子cnu实例中,非共享部分在这些实例的成员函数中将使用带有unroll的循环展开,比如取q行最小值以及符号位。而共享部分(cnu控制器)将不使用unroll循环展开。实现此算法,可以对非共享成员进行多次循环,在一个cnu阵列类中创建多个硬件实例,但共享部分处于循环之外,只会实现为一份。
[0030]
具体来讲,定义一个cnu阵列类,在cnu阵列类中,以数组的形式定义每个非共享成员,当接收到输入向量q={q[0], q[1],
ꢀ……
, q[n-1]},调用作为共享成员的cnu控制器依次遍历基矩阵中的每一行有效元素并在每次遍历完当前行的有效元素后执行循环展开。需要说明的是,随着译码器内部数据的循环,不断有更新的q输入cnu阵列,每持续输入k个q
后,便构成当前基矩阵行,遍历基矩阵中的每一行有效元素,实际是遍历k个q的元素信息。循环展开包括调用hls的循环展开指令使非共享成员按照cnu的工作方式循环n次,实现n个cnu实例,第i个cnu实例对应处理输入向量中的元素q[i]后输出一个校验结果r[i],输入向量q经n个cnu实例处理后输出校验结果r={r[0],r[1],
……
,r[n-1]}。
[0031]
具体的,不同cnu的非共享成员包括最小值生成器向r生成器所传输的中间状态ps、最终状态fs和q符号位q_signs,其中,中间状态ps对应n维数组{ps[0],ps[1],
……
,ps[n-1]},最终状态fs对应n维数组{fs[0],fs[1],
……
,fs[n-1]},q符号位q_signs对应n维数组{q_signs [0],q_signs [1],
……
, q_signs [n-1]}。当共享的cnu控制器遍历基矩阵中的任一行时,以cnu实例编号i为当前循环迭代号进行循环展开,循环展开包括:判断i是否小于n,若是,读取当前元素q[i],将当前行每个元素的符号记录于q符号位q_signs [i],将中间状态ps[i]赋值给最终状态fs[i]并根据最终状态fs[i]计算对应的r[i],实现第i个cnu实例,且将i+1赋值给i并重复循环展开直至i=n时结束循环;n次循环实现n个cnu实例。其中,fs[i]中包含当前基矩阵行中的最小绝对值以及从q_signs[i]到的当前基矩阵行中除最小绝对值以外的其他所有元素的符号进行异或得到的符号位,ps[i]表示寻最小绝对值和符号位的中间过程,r[i]等于fs[i]中的最小值与符号位相乘。
[0032]
如图3所示为本发明一实施例中基于改进后的hls所实现的cnu阵列,其中,3个cnu共享一个cnu控制器,但是其各自的非共享部分(私有部分)则需要通过循环复制3次,实现为3份,由此也实现了cnu阵列的设计,并且由于共享部分不需要进行多次复制,可以节省资源。
[0033]
为了验证改进效果,以cnu阵列有64个具有2位计算位宽度的cnu为例,比较按照传统hls算法所设计的cnu阵列(简称baseline-cnu)和改进后的hls算法所设计的cnu阵列(简称mso-cnu)的硬件消耗,比较结果如下表一所示,结果表明,本发明设计的mso cnu阵列比传统方式所设计的基线cnu阵列低13%的硬件消耗,
[0034]
对于qc-ldpc译码,并行循环移位器是关键的功能单元,循环移位器根据偏移地址移动每个元素。当输入输出数组被指定为一个向量或者数组重映射形式时,需要通过寻址电路进行寻址,因为对于hls来说,向量意味着高位宽整数,所以变量对向量元素需要进行寻址的操作,同时因为存在着变化的偏移地址,导致hls使用位选择电路执行读操作,这会产生许多lut(查表),如此会造成非常高的硬件消耗。
[0035]
因此,除了对校验节点运算模块的his设计进行改进外,本发明还对并行循环移位模块的hls设计也进行了改进,以进一步节省硬件资源。
[0036]
对并行循环移位模块的改进hls设计具有以下两个改进方式:第一种并行循环移位模块的改进hls设计的主要算法过程如下。
[0037]
定义输入向量寄存数组in_reg和输出向量寄存数组out_reg,当接收到需要进行位移的输入向量时,将输入向量中的中的第j个元素ina(j)赋值给输入向量寄存数组in_reg的第j个元素in_reg(j),j=0,2,
……
,n-1,n为输入向量的元素数量。
[0038]
根据移位值count对寄存数组in_reg中的元素进行移位,将输入向量寄存数组中的元素in_reg[(j+count)%size]赋值幅值给输出向量寄存数组out_reg中的第j个元素out_reg (j);其中,(j+count)%size表示在一定位数size内进行循环移位,例如,j=5,size=6,count=1,则(j+count)%size表示第0位(最后一位)。
[0039]
将输出向量寄存数组中的第j个元素out_reg (j)赋值给输出向量的第j个元素outa(j),所有元素组成最终的输出向量。
[0040]
如图4所示为通过本发明中的hls设计所实现的并行循环移位器,向量的每个元素先输入至对应的输入端的寄存器(即算法中的寄存数组in_reg的每个元素)中,经过中间的移位操作后输送至对应的输出端的寄存器(即算法中的寄存数组out_reg的每个元素)中,最后再从输出端输出。通过将输入向量中的每一个元素分配到输入寄存器中,最后输入寄存器和输出寄存器执行并行循环移位功能,通过输出寄存器将移位后的元素分配到输出向量中。这种方法能实现桶式移位器的功能却不会有冗余地址电路。这是因为接口变成了多个独立的访存通道,而向量化的访存就会只有一个寻址。
[0041]
第二种并行循环移位模块的改进hls设计的主要算法过程如下。
[0042]
定义m个向量寄存数组[s1,s2,
……
,sm],m为移位值count转换为二进制数后的位数。
[0043]
当接收到待移位的输入向量ina后,识别count二进制数的第1位的数值,当为“1”时,将ina移位1位后赋值给s1,当为“0”时,将ina赋值给s1。
[0044]
从小到达依次识别count二进制数的第2至第m-1位的数值,当第n位的数值为“1”时,将s(n-1)移位1位后赋值给sn,当为“0”时,将s(n-1) 赋值给sn,n=2,3,4,
……
,m-1。
[0045]
识别count二进制数的第m位的数值,当为“1”时,将s(m-1)移位1位后赋值给输出向量outa,当为“0”时,将s(m-1) 赋值给输出向量outa。
[0046]
如图5所示为为通过本发明中的hls设计所实现的并行循环移位器,以m=3为例说明,即移位数转换为二进制时的位数为3,识别移位数第1位的数值,若为“1”,则将向量ina移位1位后赋值给s1,若为“0”,则将向量ina不进行移位直接赋值给s1,进入第一阶段;随之识别移位数第2位的数值,若为“1”,则将向量s1移位1位后赋值给s2,若为“0”,则将向量s1不进行移位直接赋值给s2,进入第二阶段;随之识别移位数第3位的数值,若为“1”,则将向量s2移位1位后赋值给输出向量outa,若为“0”,则将向量s2不进行移位直接赋值给输出向量outa,最后输出向量outa,即为移位后的结果。本实施例通过多个固定循环位移器组合成多级移位器,所有读写操作的偏移地址都变为常数,正因为具有固定位移数,减少了变量对元素寻址的操作,因此并行循环移位的硬件消耗很小。
[0047]
为了验证改进效果,将目前传统的移位寄存器(简称baseline-移位器)、第一种方式改进得到的移位寄存器(简称单极移位器)和第二种方式改进得到的移位寄存器(简称多级移位器)进行比较,比较结果如下表二所示。结果表明与传统移位器相比,本发明设计的单级移位器通过消除位选择电路降低了硬件消耗和延迟。与单级移位器相比,多级移位器由于其较低的硬件复杂度,进一步大大减少了硬件使用,并且只增加了一个周期的延迟,
[0048]
在qc-ldpc译码器执行过程中,根据算法需要从基矩阵中串行读取移位计数值进行调度译码。因为译码器是高度流水线的,所以译码延迟主要受这个基矩阵中元素数量的影响,基矩阵中元素数量越多,则译码的耗时越长。本发明通过对该过程的实现进行分析,发现基矩阵中的移位计数值
“‑
1”表示在这一步中什么都不做,但是传统的hls并没有跳过无效元素,尽管能确保译码的正确性,但因此造成了硬件的停顿,增加了译码的延迟。因此,本发明还进一步提出了基于hls设计无效元素感知循环调度算法,定义基矩阵中的
“‑
1”表示无效的元素,遍历基矩阵,删除值为
“‑
1”的元素后,根据所保留的元素重新构造一个压缩矩阵,并设置索引数组来记录压缩矩阵中每个元素在原始基矩阵中的位置,以压缩矩阵作为新的基矩阵以用于读取移位值进行调度译码。无效元素感知循环调度算法在于将导致译码部件停顿的元素删除,将拼接成一个连续位置的新矩阵,因为在译码阶段需要使用原先基矩阵的位置信息,所以需要将它们在基矩阵中的原始位置放置在一个额外的索引数组中。该算法消除了译码调度中的无效周期,减少硬件停顿。
[0049]
相应的,本发明还保护经由上述设计方法所设计出的qc-ldpc译码器,该译码器的工作方式按照上述改进算法进行译码,具体过程参考上文介绍,在此不再赘述。
[0050]
将综合cnu、并行循环移位和无效元素感知改进所得到的译码器记为r-ldpc译码器(即改进译码器),将r-ldpc译码器与传统的基于hls实现的baseline-ldpc译码器(即传统译码器)的实际运行结果进行比较。如图6(a)所示为实际吞吐量随译码单元数量的变化曲线,其中,传统的baseline-ldpc译码器的规模不能超过25个译码单元,而本发明所设计的r-ldpc译码器可以扩展到48个译码单元并获得最高9.9gbps的译码吞吐量。如图6(b)所示为实际硬件消耗随译码单元数量的变化曲线,图中可看出,向相同的译码单元规模下,本发明所设计的r-ldpc译码器所消耗的硬件资源也大大低于传统的baseline-ldpc译码器,由此说明,无论是译码吞吐量还是硬件消耗,本发明所设计的r-ldpc的性能都优于传统baseline-ldpc译码器。
[0051]
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:(1) 多实例单共享的方法, 明确定义硬件单元阵列的共享部分和非共享部分,开发人员可以显式创建多个硬件实例,多实例单共享在模块内部将cnu中非共享的部分显式的结合循环展开与数组分块实现为多份,共享的部分显式的实现为一份,避免了因传统 hls 无法定义和识别模块中的共享和非共享部分,在将模块整体实现为多份时,共享部分复制多次而浪费了硬件资源并增加了编译时间;(2) 单级和多级移位器的方法,实现了移位时读取数据地址时固定循环变量和偏
移地址,减少变量寻址,不再需要位选择电路,提高了hls的综合效率,降低了硬件的消耗,加快了设计周期;(3) 无效元素感知循环调度,在编译阶段时消除译码调度中的无效周期,减少硬件停顿,提高译码的性能。
[0052]
本领域的技术人员容易理解,以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

技术特征:


1.一种基于hls的qc-ldpc译码器的设计方法,所述译码器包括译码控制器、执行并行移位的并行循环移位模块和执行校验的校验节点运算模块,外部数据输入译码器后经移位与校验的循环操作后输出译码结果,其特征在于,所述校验节点运算模块具有n个cnu,所述设计方法包括基于hls设计所述校验节点运算模块,所述校验节点运算模块的hls设计过程包括:以cnu控制器作为不同cnu的共享成员,以最小值生成器和r生成器所传输的信号作为不同cnu的非共享成员;定义一个cnu阵列类,在cnu阵列类中,以数组的形式定义每个非共享成员,当接收到输入向量q={q[0], q[1],
ꢀ……
, q[n-1]},调用作为共享成员的cnu控制器依次遍历基矩阵中的每一行有效元素并在每次遍历完当前行的有效元素后执行循环展开,所述循环展开包括调用hls的循环展开指令使非共享成员按照cnu的工作方式循环n次,实现n个cnu实例,第i个cnu实例对应处理输入向量中的元素q[i]后输出一个校验结果r[i],输入向量q经n个cnu实例处理后输出校验结果r={r[0],r[1],
……
,r[n-1]}。2.如权利要求1所述的基于hls的qc-ldpc译码器的设计方法,其特征在于,不同cnu的非共享成员包括最小值生成器向r生成器所传输的中间状态ps、最终状态fs和q符号位q_signs,其中,中间状态ps对应n维数组{ps[0],ps[1],
……
,ps[n-1]},最终状态fs对应n维数组{fs[0],fs[1],
……
,fs[n-1]},q符号位q_signs对应n维数组{q_signs [0],q_signs [1],
……
, q_signs [n-1]};当共享的cnu控制器遍历基矩阵中的任一行时,以cnu实例编号i为当前循环迭代号进行循环展开,所述循环展开包括:判断i是否小于n,若是,读取当前元素q[i],将当前行每个元素的符号记录于q符号位q_signs [i],将中间状态ps[i]赋值给最终状态fs[i]并根据最终状态fs[i]计算对应的r[i],实现第i个cnu实例,且将i+1赋值给i并重复所述循环展开直至i=n时结束循环;n次循环实现n个cnu实例;其中,fs[i]中包含当前基矩阵行中的最小绝对值以及从q_signs[i]到的当前基矩阵行中除最小绝对值以外的其他所有元素的符号进行异或得到的符号位,ps[i]表示寻最小绝对值和符号位的中间过程,r[i]等于fs[i]中的最小值与符号位相乘。3.如权利要求1所述的基于hls的qc-ldpc译码器的设计方法,其特征在于,所述设计方法包括基于hls设计所述并行循环移位模块,所述并行循环移位模块的hls设计过程包括:定义输入向量寄存数组in_reg和输出向量寄存数组out_reg,当接收到需要进行位移的输入向量时,将输入向量中的中的第j个元素ina(j)赋值给输入向量寄存数组in_reg的第j个元素in_reg(j),j=0,2,
……
,n-1,n为输入向量的元素数量;根据移位值count对寄存数组in_reg中的元素进行移位,将输入向量寄存数组中的元素in_reg[(j+count)%size]赋值幅值给输出向量寄存数组out_reg中的第j个元素out_reg (j);将输出向量寄存数组中的第j个元素out_reg (j)赋值给输出向量的第j个元素outa(j),所有元素组成最终的输出向量。4.如权利要求1所述的基于hls的qc-ldpc译码器的设计方法,其特征在于,所述设计方法包括基于hls设计所述并行循环移位模块,所述并行循环移位模块的hls设计过程包括:定义m个向量寄存数组[s1,s2,
……
,sm],m为移位值count转换为二进制数后的位数;
当接收到待移位的输入向量ina后,识别count二进制数的第1位的数值,当为“1”时,将ina移位1位后赋值给s1,当为“0”时,将ina赋值给s1;从小到达依次识别count二进制数的第2至第m-1位的数值,当第n位的数值为“1”时,将s(n-1)移位1位后赋值给sn,当为“0”时,将s(n-1) 赋值给sn,n=2,3,4,
……
,m-1;识别count二进制数的第m位的数值,当为“1”时,将s(m-1)移位1位后赋值给输出向量outa,当为“0”时,将s(m-1) 赋值给输出向量outa。5.如权利要求1所述的基于hls的qc-ldpc译码器的设计方法,其特征在于,所述设计方法还包括基于hls设计无效元素感知循环调度算法,所述无效元素感知循环调度算法的hls设计过程包括:遍历基矩阵,删除值为
“‑
1”的元素后,根据所保留的元素重新构造一个压缩矩阵,并设置索引数组来记录压缩矩阵中每个元素在原始基矩阵中的位置,以压缩矩阵作为新的基矩阵以用于读取移位值进行调度译码。6.如权利要求1所述的基于hls的qc-ldpc译码器的设计方法,其特征在于,基于hls设计的qc-ldpc译码器的工作流程包括:步骤s1:读取输入input,对input初始化形成向量p并存入存储器中;步骤s2:将向量p输入并行循环移位模块进行并行循环移位,使向量p转换为;步骤s3:利用减去存储器中的向量r得到向量q;步骤s4:将向量q输入基于hls设计的校验节点运算模块,输出并更新存储器中的向量r;步骤s5:对向量q和求和后得到求和向量;步骤s6:将求和向量输入并行循环移位模块进行并行循环移位,使求和向量转换为,将存入存储器以更新p,跳转至步骤s2重新循环直至循环结束,以最后输出的作为译码结果output。7.一种qc-ldpc译码器,其特征在于,基于权利要求1至6任一项所述的基于hls的qc-ldpc译码器的设计方法设计而成。

技术总结


本发明公开了一种基于HLS的QC-LDPC译码器的设计方法及QC-LDPC译码器,该设计方法将CNU控制器作为CNU阵列中所有CNU的共享成员,而将最小值生成器和R生成器所传输的信号作为不同CNU的非共享成员,定义一个CNU阵列类,其中,以数组的形式定义每个非共享成员,当接收到输入向量Q={q[0],q[1],


技术研发人员:

曹强 张一凡 汪少华

受保护的技术使用者:

华中科技大学

技术研发日:

2023.02.22

技术公布日:

2023/3/24

本文发布于:2024-09-22 05:28:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/78992.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:向量   译码器   元素   赋值
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议