[0030] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0031] 相反,本发明涵盖任何由权利要求定义的在本发明的精髓和范围上做的替代、修改、等效方法以及方案。进一步,为了使公众对本发明有更好的了解,在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。
[0032] 参见图1,为本发明实施例的步骤流程图,本发明的技术方案为基于FPGA的QR码译码方法,包括以下步骤:
[0033] S10,数据选择模块将接收码字转换成三种不同码字;
[0034] S20,分别送入三条流水线中进行并行译码;
[0035] S30,数据选择模块根据译码情况最后输出译码结果;
[0036] S20中,三条并行流水线均包含两个步骤,每个步骤均包含两个单元:校验子检查单元和纠错单元,其中,所述校验子检查单元用于产生一系列不同的校验子,并且检查这些校验子是否满足译码条件;纠错单元接收来自校验子检查单元的指示序列,决定是否触发译码。
[0037] 具体实施例中,在S10中三种不同码字分别为,原码字r,原码字r循环左移15位产生的码字cr,原码字第15位取反得到的码字nr。
[0038] S20中,三条并行流水线均包括以下两个步骤,
[0039] S21,产生接收码字的校验子S,并对错误全在校验位的情况进行纠错;
[0040] S22,产生16种校验子,纠正信息位中有1位错误的情况。
[0041] 校验子检查单元包括,校验子计算模块S201,重量计算模块S202,指示序列生成模块S203。校验子检查单元用于生成一系列校验子,对于S21,该单元产生校验子对于S22,该单元产生 种校验子组合s∧sm,i,i=0,1,…,15,其中,p是r中的校验位部分,rm,i是信息位的第i位,sm,i是信息位中只有一个错误的错误图样对应的校验子,∧代表异或运算。
[0042] 重量计算模块S202,用于对前级生成的各种校验子进行重量计算,进而确定各种校验子是否满足译码条件,为生成指示序列做准备,对于S21,译码条件为s的重量w(s)≤3,对于S22,译码条件为w(s∧sm,i)≤2。
[0043] 指示序列生成模块S203,根据重量计算结果生成一个指示序列,用以驱动纠错单元,其每位指示相应的校验子重量是否满足解码条件,满足置1,不满足置0。
[0044] 纠错单元包括:触发模块S301和译码模块S302。
[0045] 触发模块S301,同时接收来自校验子检查单元的指示序列和来自前级的译码结果信号,根据其逻辑关系给触发信号赋值,用于触发译码电路。
[0046] 译码模块S302,根据触发信号,启动或停止译码电路,用于译码的错误位置信息包含在指示序列当中,将待译码的码字和指示序列异或即可得到正确码字。
[0047] 其顶层模块架构如图2所示,该架构包括:
[0048] 码字转换模块S101将接收到的31位长的码字转换成三种不同码字。
[0049] 一般的,码字转换模块将接收码字分别转换为原码字r,原码字r循环左移15位产生的码字cr,原码字第15位(最低位为第0位)取反得到的码字nr,分别送入流水线1S102,流水线2S103,流水线3S104中。
[0050] 码字选择模块S105将三条流水线中译码完成指示信号switch置1的那条流水线作为译码输出:对于流水线1S102、流水线3S104截取其输出的高16位作为译码结果,对于流水线2S103,将其输出循环左移16位后再截取其高16位作为译码输出结果。
[0051] 下面具体介绍各流水线模块的组成。
[0052] 各条流水线都包括两个步骤,S21,产生接收码字的校验子s,并对错误全在校验位的情况进行纠错。S22,产生16种校验子,纠正信息位中有1位错误的情况。
[0053] 进一步的,每个步骤包含两个单元:校验子检查单元和纠错单元。校验子检查单元又有三个部分,校验子计算模块S201,重量计算模块S202,指示序列生成模块S203。
[0054] 具体的,因为图2中S102的流水线1和S104的流水线3的结构完全相同,下面结合图示,给出它们的具体硬件结构。
[0055] 对于S21,校验子检查单元结构如图3所示,按公式 所述,通过异或运算,校验子计算模块S201对码字r或cr计算得到校验子s。对于重量计算模块S202,如果w(s)≤3,则S21中的指示序列置1,反之指示置0,送入S21的纠错单元。
[0056] 对于S21,其纠错单元如图4所示,指示序列传入触发模块S301,译码触发条件为sequence==1,同时switch置1,反之switch置0。由于步骤1仅仅对校验位进行译码,所以不论switch信号是否为1,都直接传递前级码字。
[0057] 对于S22,校验子检查单元结构如图5所示,校验子计算模块S201通过S21传来的s,通过异或运算,产生 种校验子组合s∧sm,i,i=0,1,…,15。重量计算模块S202计算各组合的重量,只要w(s∧sm,i)≤2,即代表信息位的第i位出错,由指示序列生成模块S203将各位拼接成错误指示序列,送入S22的纠错单元。
[0058] 对于S22,其纠错单元结构如图6所示,触发模块S301的译码触发逻辑为前级switch==0且sequence中有1。当该逻辑为真时switch置1,并且触发译码模块S302进行译码,反之,switch信号传递前级switch值。当触发译码时,译码模块S302直接将前级codeword与sequence异或即可,反之,不触发纠错,直接传递前级codeword。
[0059] 可以看出,流水线1S102、流水线3S104仅仅对信息位进行纠错,而不对校验位进行纠错。对于流水线2S103,由于需要将输出码字循环左移16位,所以对其信息位和校验位都要纠错。
[0060] 除S22的纠错单元部分,流水线2S104的结构和流水线1S102、流水线3S104完全相同,下面针对流水线2S104的步骤S22的纠错单元进行介绍。如图7所示,纠错单元中触发模块S301和前述完全相同,译码模块S302中信息位纠错方法和前述完全相同,而校验位纠错方法为rp∧s∧sm,i,其中w(s∧sm,i)≤2,i=0,1,…,15。
[0061] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。