标签:编码(180)RS(99)

摘要:RS(Reed—Solomon)编码是一种具有较强纠错能力的多进制BCH编码,其既可纠正随机错误,又可纠正突发错误。RS编译码器广泛应用于通信和存储系统,为解决高速存储器中数据可靠性的问题,文中提出了RS编码的实现方法,并对编码进行了时序仿真。仿真结果表明,该译码器可实现良好的纠错功能。

RS(Reed—Solomon)码是差错控制领域中的一种重要线性分组码,既能纠正随机错误,又能纠正突发错误,且由于其出色的纠错能力,已被NASA、ESA、CCSDS等空间组织接受,用于空间信道纠错。本文研究了RS码的实现方法,并基于Xilinx的FPGA芯片Spartan-6 XC6SLX45完成了RS编译码器的设计,同时对其进行了仿真和在线调试,并给出了功能仿真图和测试结果。时序仿真结果表明,该编译码器能实现预期功能。

1 RS编码的实现方法

RS码是一种多进制BCH(Bose—Chaudhuri—Hocquenghem)码,在给定每个码字所具有多少冗余量的情况下,RS码具有极大的最小距离。即RS码的最小距离d、信息长度k以及码字长度n满足d=n-k+1。而RS(255 239)码是在伽罗华(Galois Field)GF(28)中运算得到的,编码器实现的关键是伽罗华域乘法器的设计。设计中的乘法是2个有限域中元素的指数相加与255取模。GF(28)编码参数如下:码长n=255;信息位个数k=239;校验位r=n-k=16;纠错能力t=8;码距d=17。生成多项式为

根据式(3)画出RS编码的电路图,如图1所示。

n-k级RS编码器主要由一组线性反馈移位寄存器和控制电路组成,其是n-k=16级编码器,亦是线性反馈寄存器的反馈系数,reg16寄存器的值与当前输入的信息码元异或得到的结果即为feedback寄存器的值。

编码步骤:

步骤1 将所有寄存器清零,开关放到1上,则239个信息码元一边依次进入除法电路,一边依次输出。

步骤2 当最后一个信息码进入电路后,将开关放到2上,第一个校验位输出。

步骤3 校验码按时钟节拍载入寄存器,并依次输出。当最后一个校验位输出时,编码结束。

2 RS编码的仿真结果及分析

设计的RS(255 239)编码器使用Verilog HDL对整个模型进行描述,以Xilinx FPGA芯片Spartan-6XC6SLX45为硬件平台进行实现,并利用ISim仿真工具对RS编码进行仿真。

设计的RS(255,239)编码器,信息位239位编码为0,1,2,…,238,则16位校验位的值为58,236,152,44,88,31,20,168,121,60,32,10,191,166,4,101。设计的RS(255,239)编码器的仿真图如图2所示,当DI_VAL=0时,输出239个信息位;当DI_VAL=1时,输出16个校验位。该编码器实现了预期的编码功能。

3 RS译码的实现方法

RS译码主要有时域译码和频域译码,时域译码一般采用BM迭代算法或欧式算法(Euclid's Algorithm)。RS译码中最重要的环节是求解关键方程,欧式算法在求解关键方程时需进行多项式次数的判断,因此造成硬件电路复杂,译码速度下降,BM迭代算法具有快速、消耗资源少、控制电路较为简单等优点。文中改进后的BM迭代原理及以该算法为基础的RS译码器的FPGA实现。RS译码可分为4步:(1)由接收到的码组计算伴随式。(2)求关键方程。(3)计算出错误图样。(4)由错误图样和接收码组计算出可能发送的码字。图3给出了RS译码器的一般步骤框图。

以上运算均可用流水线结构硬件实现。

初始化时,所有寄存器置零。经255个周期,接收完所有255个符号后,便可得到全部16个伴随式。因整个译码器采用流水线结构,所以在伴随式计算完后,产生一个时钟周期有效的“sc_done”信号,用以启动后续电路进行新的计算。由于在BM模块中,用到了A(x)与S的卷积求和,因此本模块将计算出的伴随式序列串行输出。

关键方程的计算采用BM算法,BM算法不仅在RS码的译码中起着关键作用,且也是目前已知的求序列线性复杂度最快且最佳的方法之一。该算法采用规整的脉动阵列,硬件实现更为方便。通过求解关键方程,得到A0~A8,其为后续的Chien搜索模块提供了参数。

该过程完全实现流水线结构,其中包括伴随式计算、关键方程求解、Chien搜索、Forney算法等模块并行工作。在经过295个固有延迟后,每个时钟周期均可连续输出经校正的码字。

4 RS译码的仿真结果及分析

因设计的译码器最大纠错能力为8个符号,该文设定错误情况是第140位到第147位全错,正确值为140,141,142,143,144,145,146,147,错误值为5,11,56,98,35,15,132,159,图7是输入到译码器中含8个连续错误码字的255位编码序列,图8是译码器输出全部纠错以后的编码序列,由ISim仿真波形图可知,Err_Indicator表示错误标志,设计的译码器能实现最大的纠错能力。

5 结束语

文中阐述了RS(255,239)编译码器的设计原理,并对编码器给出了在ISim中的时序仿真结果,其结果证明了该编码器设计的正确性。而在对译码器的设计中,假定出现连续8个误码的情况,并用ISim对所设计的译码器进行验证,由时序仿真结果表明,设计的RS(255,239)译码器能实现最大的纠错能力。设计的RS(255,239)编译码器达到了预定的目标,且该编译码器可应用于数据通信和数据存储系统的差错控制中。

bch verilog代码_基于FPGA的多进制BCH编码相关推荐

  1. lms算法的verilog实现_基于FPGA和LMS算法的系统建模

    © 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.    http://www.c ...

  2. (90)FPGA面试题-使用Verilog实现可预置初值的7进制循环计数器

    1.1 FPGA面试题-使用Verilog实现可预置初值的7进制循环计数器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-使用Verilog实现可预置初 ...

  3. 基于MATLAB的多进制数字调制信号的矢量星座图分析

    1 前言 通信即传输信息,进行信息的时空转移.通信系统的作用就是将信息从信源发送到一个或多个目的地.实现通信的方式和手段很多,如手势.语言.旌旗.烽火台和击鼓传令,以及现代社会的电报.电话.广播.电视 ...

  4. 基于单片机(AT89C51)的进制转换及进制计算器

    基于单片机(AT89C51)的进制转换及进制计算器 闲来无事,用手头51单片机做个进制计算器 成品功能:能实现十进制带负数.带小数点的加减乘除,不同进制之间的转换,同一进制之间的加减乘. 材料 AT8 ...

  5. 74ls390设计任意进制计数器,基于74LS192的任意进制计数器的设计

    基于74LS192的任意进制计数器的设计 [摘要]利用集成二.十进制计数器采用置数法.置零法设计任意进制计数器,分析设计方法,给出设计案例.以集成计数器74LS192为例,运用置零法和置数法设计八进制 ...

  6. 用JavaScript写代码将硬盘序列号从16进制字符串转换为ASCII字符串,兼谈EditPlus和Edge浏览器对JavaScript脚本支持的一点差别

    之前写的系统信息收集报告程序SysInfo的一个功能就是收集并报告系统中的硬盘序列号.在之前的测试中这项功能表现不错,但前两天用SysInfo收集一台电脑的信息时,显示的硬盘序列号与其它硬盘序列号读取 ...

  7. verilog 算法加速模块设计流程_基于FPGA的图像加速器的设计

    基于 FPGA 的图像加速器的设计 摘 要 介绍了一种基于 FPGA 的图像加速器的设计.本文硬件加速器的实质是通过流水线 设计来减少多余的操作达到加速的目的的, 内存是由 DMA 控制器访问, 之后 ...

  8. matlab基于dct的图像压缩编码解码_基于FPGA的扩频系统设计(下)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  9. halcon旋转后坐标_基于FPGA的图像旋转设计

    该项目是参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.利用国产的紫光同创公司的FPGA芯片作为开发平台,视频图像从摄像头实时采集,经过算法旋转后,通过hdmi接口显示.该项 ...

最新文章

  1. 【UWB】数学建模 E 题目个人解题答案 - 2021年第十八届华为杯
  2. 24.指针和引用的区别
  3. CreateThread
  4. 【机器学习基础】八种应对样本不均衡的策略
  5. 终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
  6. 宝塔挂载linux硬盘,宝塔移动硬盘挂载Linux服务器挂载ntfs移动硬盘
  7. 说说 C 语言中的变量与算术表达式
  8. MASK LBP代币拍卖共募集近4000万美元
  9. 做游戏,学编程(C语言) 1 实现弹跳小球
  10. python自动化办公真的好用吗-用 Python 自动化办公能做到哪些有趣或有用的事情?...
  11. 基于modbus协议的工业自动化网络规范_一种基于Modbus的工业通信网关设计
  12. dataframe数据按行做线性拟合
  13. mysql 部署最佳实践_MySQL安装脚本最佳实践
  14. Failed installing 'Tomcat9' service
  15. win10 悬浮日历_win10系统桌面上添加自带日历小工具的设置办法
  16. 人工智能技术及其应用初探
  17. 三极管分压共射放大电路
  18. python-decouple简介
  19. 门店私域流量运营怎么做?
  20. 2015年我的国庆节

热门文章

  1. When you gather it, things would be counted. ​​​​
  2. CentOS7 阻止笔记本合盖时休眠
  3. 基于ssm的房屋出租网
  4. Win11桌面右键菜单栏怎么回到Win10的样子(直接命令执行便可完成,简单快捷)
  5. fastjson 是反射吗_6种超声检测灵敏度,你都知道吗?
  6. JavaScript实现外溢动态的心
  7. 【前端程序员的中秋节】中秋节,送你千盏孔明灯,万家灯火故事长
  8. Spark 和hadoop的一些面试题(准备)
  9. telegram自动发信息_创建telegram 机器人 并发送消息
  10. D2D第一个程序详解