Nios SoC系统中的BCH编解码IP核的设计

发布者:VelvetSoul最新更新时间:2007-07-24 来源: 电子工程师关键字:代码  驱动  寄存  映射 手机看文章 扫描二维码
随时随地手机看文章
  0 引 言

  循环码是最重要的一类线性分组纠错码,而BCH码又是目前发现的性能很好且应用广泛的循环码,它具有严格的代数理论,对它的理论研究也非常透彻。BCH码的实现途径有软件和硬件两种。软件实现方法灵活性强且较易实现,但硬件实现方法的工作速度快,在高数据速率和长帧应用场合时具有优势。FPGA(现场可编程门阵列)为DSP算法的硬件实现提供了很好的平台,但如果单独使用一片FPGA实现BCH编解码,对成本、功耗和交互速度都不利。最新的SoC(片上系统)设计方法可以很好地解决这个问题。

  本文基于Altera公司的Nios软核+可编程资源的SoC平台设计了BCH编解码IP核,这样,在Nios系统中可以将BCH码作为一种片内资源进行调用,在工程设计上具有积极的意义。

  1 BCH码

  BCH码于1960年前后发明,可以纠检多个错误。通常的二进制BCH码元是取自加罗瓦域GF(2m)。对于参数m和可纠错码元数目t,BCH码的码长为n=2m-1,对于m≥3,t<2m-1的BCH码,监督码元数目n-k=mt;dmin≥2t+1。同时,BCH码元多项式的根为GF(2m)中的元素α,α3,…,α2t+1。例如一个m=6,t=3的BCH码,其参数为:n=63,n-k=18,dmin=7。这就构成了可以纠正3个错误的(63,45)BCH码。

  BCH码基于加罗瓦域,BCH编解码的运算也是域内的闭合运算。加罗瓦有限域产生于一个本原多项式,GF(2m)有限域内有2m个元素。以GF(23)域为例,它的本原多项式p(x)假定为p(x)=x3+x+1,基本元素α定义为p(x)=0的根,GF(23)中的元素可以计算如下:

  BCH码的编码取决于其生成多项式,令φ2i-1(x)是加罗瓦域元素α2i-1的最小多项式,则可以纠正t个错误的BCH码的生成多项式为:



  有了生成多项式,BCH编码与普通的循环码编码相同,使用除法电路可以实现。
一个复杂度较低的BCH译码算法对于BCH码的应用有着重要的意义。BCH译码可以分为伴随式计算和Berlekamp迭代译码两部分。设接收码元多项式为r(x),由于生成多项式的性质,如果传输过程中信道没有引入错误,α,α2,α3,…,α2t应是r(x)的根。因此,伴随式计算即将加罗瓦域中的元素代入接收码元多项式,如果所有伴随式结果都为0,则说明没有错误,否则就有错误。如果只使用BCH码进行检错,则译码过程就结束了。

  伴随式计算结束后,如果有错,首先需要计算错误位置多项式δ(x),译码的核心主要集中在这一步上。Berlekamp迭代算法不仅求解了错误位置多项式的关键方程,而且运算速度快,可以说它解决了BCH码译码的工程实用问题。其次,使用钱搜索找出δ(x)的根,即错误位置。最后,由于是二进制编码,只需把相应位置的码元取反就完成了整个译码过程。

  2 BCH编解码IP核的设计

  2.1 整体设计及CPU接口

  在NiosⅡ系统中,平台免费提供了各种常用接口IP核以及对这些外设的驱动程序包,例如UART接口、Flash接口等。作为一个自行设计的IP核,需要挂接在NiosⅡ系统的Avalon总线上。这个过程使用Sopc Builder工具中的Interface t0 user logic模块可以方便地进行设计。NiosⅡ处理器和BCH IP核之间通过Avalon总线使用寄存器映射方式进行交互。图1是整个IP核的实现方框图。

  其中与NiosⅡ的接口分为控制接口和数据接口两部分。控制接口包括复位、编解码控制、存储器状态报告和编解码状态报告等。数据接口为FPGA内部的RAM,分为发送和接收两部分,它在NiosⅡ中映射成存储空间。在NiosⅡ和BCH码IP核之间设置简单的数据协议,控制寄存器的起始控制位设置后,写入数据缓存的第1个字节为编解码输入数据的长度字节。BCH编解码模块从数据缓存中读入数据进行相应处理。其中,加罗瓦域的运算主要通过对域元素的查表得到。

  2.2 BCH编码

  BCH码属于系统码,其编码与一般循环码的编码形式基本相同,即为信息码元多项式与生成多项式之间的除法电路实现。除法电路采用带反馈的移位寄存器完成。信息码元发送完后,寄存器内存储的就是监督码元,再接着发送即可。其中反馈抽头连接为生成多项式控制。其基本结构见图2。

  信息码元首先从数据缓存中被读出,然后通过并/串变换进入编码器后,一方面直接输出,同时送入除法电路,当信息码元输入结束后,开关进行相应的变换,存在寄存器中的监督码元输出。图3为(31,16)BCH编码的RTL(寄存器传输级)仿真结果。

  2.3 BCH译码

  前面已经介绍了BCH迭代译码的基本步骤。译码过程中的运算都为有限域运算,在运算过程中经常计算加罗瓦域的元素是不明智的,查表实现是通用的方法。例如GF(23)中,可以设计表1所示的表格来实现域元素的查找,同时,运算中还经常需要通过元素值反查元素类型,因此需要设计两张表格来正向和反向查找。图1中的GF域查表RAM模块就完成了这个功能。通过以上查表方法可以轻松实现有限域的加、减和乘运算。


  首先进行伴随式计算,在设计中利用片内较高的工作频率和FPGA的并发实现优势,同时完成所有伴随式的计算。图4为伴随式计算的RTL仿真结果,当传输引入错误后,伴随式相或的结果Data_Out输出高电平,表示需要进行纠错。

  然后进行迭代译码,迭代过程可以通过表2表示。其中μ为算法迭代的次数,第1次为了表示方便,可以认为初始值是0。δμ(x)就是错误位置多项式。dμ是一种差值,用于运算。ιμ是第μ次运算时δμ(x)的多项式阶数,2μ-ιμ是运算中应用的变量。

  算法流程步骤如下:
a) 按如上μ为0和-1/2时初始化各个变量。

b) 如果dμ=0,此时,则往下进行。

c) 如果dμ≠0,则寻找以前运算的某一行ρ,其具有2μ-ιμ最大(正值),且dρ≠0。

此时,



如果μ=t-1,则算法结束。
d)ιμ+1=deg(δμ+1(x)),即δμ+1(x)的多项式阶数。
e) dμ+1 =s2μ+3+δ1μ+1s2μ+2+δ2μ+1s2μ+1+…+δLμ+1s2μ+3-L,其中,L为ιμ+1,δu(x)的第i阶系数。

f) 增加μ,从步骤b开始。

得到错误多项式后,通过钱搜索和取反即可完成整个译码工作。

  3 结束语

  SoC技术以其低成本、低功耗和小体积已经成为电子设计领域的一个重要发展方向。BCH码是一种经典的分组纠错码,在通信系统中应用较为广泛。通过这两者的结合,本文设计的BCH码IP核嵌入NiosSoC中,使得BCH编解码在单片系统中可以自由调用,对SoC中的应用软件而言,调用接口简单,IP核屏蔽了所有算法细节。同时,由于采用硬件实现,具有高速、稳定的特点。

关键字:代码  驱动  寄存  映射 引用地址:Nios SoC系统中的BCH编解码IP核的设计

上一篇:利用FPGA实现UART的设计
下一篇:基于FPGA的数字交换系统的设计与实现

推荐阅读最新更新时间:2024-05-13 18:37

TE Connectivity亮相慕尼黑上海电子展 以科技创新驱动不凡未来
  今日,全球连接和传感领域领军企业  TE  Connectivity(以下简称“ TE ”,纽约交易所代码: TE L)亮相2017 慕尼黑上海电子展 ,以“无创想,不奇迹”为主题,全方位展示其在交通、工业、数据通信、家居和新能源方面的连接与传感解决方案,集工程创想、创新、创造之力,驱动未来的不凡互联世界。下面就随半导体小编一起来了解一下相关内容吧。    TE亮相 2017 慕尼黑上海电子展   此次在TE展台上,观众们将可以通过增强现实(AR)和虚拟现实(VR),体验驾驶电动方程式锦标赛的乐趣。该VR内容展示了TE与安德雷蒂车队的技术合作,将赛车运动的极端环境作为技术孵化基地,共同探索电动汽车技术的未来。   “一年
[半导体设计/制造]
在音频放大电路中采用D类放大器提高效率
D类音频放大器已在电路中被广泛采用,它和过去人们熟悉的AB类放大器在原理上有很大不同,设计人员必须了解其中的区别才能更好应用在实际设计中。本文将对AB类与D类放大器进行比较,讨论D类放大器高效率实现原理,并解释了输出为脉宽调制(PWM)波形时还可通过扬声器听到正常声音的原因。 目前在移动电话、平面电视、LCD显示器以及便携式游戏设备等消费类电子产品中,已越来越多采用高效率D类放大器,但在很多情况下,设计人员并不明白消费类电子产品内部D类放大器的基本工作情况,必须将原来对AB类或线性放大器的有关知识扩展至D类放大器,对放大器理论进行重新认识。 效率对比 D类放大器比AB类放大器的效率要高很多,图1显示了两类放大器在输出功率
[模拟电子]
投资75亿元 德赛电池储能电芯项目:从动力电池到3C电池,储能产业双轮驱动
10月12日,位于望城经开区的德赛电池储能电芯项目(以下简称德赛电芯)电芯联合厂房主楼正式封顶,为一个月后的设备进场安装打下基础,更是为项目2023年一季度正式投产运营提供了保障。而这也意味着,长沙储能材料产业,将实现从动力电池到3C电池比翼双飞的格局,也 ...
[新能源]
嵌入式平台ARM的C代码优化方法
本文介绍了ARM平台的C代码优化方法,从数据类型选择、数据结构组织、局部变量选择、函数inline内联、编译器选项、循环展开、条件执行、数据操作的转化、存储器的优化、代码尺寸的优化等角度给出常用的优化方法。 C数据类型 C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。在默认的情况下,armcc是全部优化功能有效的,而GNU编译器的默认状态下优化都是关闭的。ARM C编译器中定义的char类型是8位无符号的,有别于一般流行的编译器默认的char是8位有符号的。所以循环中用char变量和条件 i 0时,就会出现死循环。为此,可以用fsigned - char(for gcc)或者-zc(for
[单片机]
Diodes推出简化低功率照明的LED驱动
Diodes 公司为领先业界的高质量特定应用标准产品全球制造商与供货商,其产品涵盖广泛领域,包括独立、逻辑、模拟及混合讯号半导体市场。该公司扩展其在汽车 LED 驱动器系列,推出 BCR4xxUQ 系列,以简化低功率照明的驱动。LED 技术正在取代汽车使用的传统灯泡:包括从侧灯、迎宾灯、踏板灯等外部照明,到车顶灯、环境灯、仪表板灯及按钮背光等内部照明。BCR4xxUQ 系列专为符合这些应用需求而打造,提供简单、小巧、灵活的方式以驱动低功率 LED 灯条。 BCR4xxUQ 系列中的每个装置都能提供默认的电流输出,不需要任何外部组件,或者也能提供介于 10mA 与 100mA ( BCR401UQ 、 BCR402UQ 、 BC
[电源管理]
CTSD精密ADC—第4部分:轻松驱动ADC输入和基准电压源
CTSD精密ADC—第4部分:轻松驱动ADC输入和基准电压源,简化信号链设计 本文重点介绍新型连续时间Sigma-Delta (CTSD)精密ADC最重要的架构特性之一:轻松驱动阻性输入和基准电压源。实现最佳信号链性能的关键是确保其与ADC接口时输入源或基准电压源本身不被破坏。使用传统ADC时,为实现输入和基准电压源与ADC的无缝接口,需要复杂的信号调理电路设计——称为前端设计。CTSD ADC的独特架构特性可简化并创新这种ADC与输入和基准电压源的接口。首先,我们快速回顾一下传统ADC的前端设计。 传统ADC的前端设计 在本文中, 传感器 和 输入信号 可以互换使用,代表ADC信号链的任何类型的电压输入。ADC信号链
[模拟电子]
CTSD精密ADC—第4部分:轻松<font color='red'>驱动</font>ADC输入和基准电压源
Tiny4412之蜂鸣器驱动与led灯驱动
  一:LED驱动编写   要编写LED驱动,首先的知道开发板的构造;开发板分为核心板与底板;编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字;第一步就要查看核心板电路图,以及底板电路图;最后就是查看开发板手册,然后进行程序编写:   通过看开发板我们可以知道LED灯的位置的核心板上,在核心板上找到LED的电路图,Ctrl+F可以在文档中快捷查找:    通过电路图我们可以看出: LED灯的一端已经接高电平,只要给另一端加低电平LED就会被点亮。 然后查看LED在核心板上的引脚: 由上图我们可以看出,LED1对应的是GPM4_0 然后通过芯片数据手册可以查到它的具体用
[单片机]
Tiny4412之蜂鸣器<font color='red'>驱动</font>与led灯<font color='red'>驱动</font>
片机驱动LED数码管显示方式
针对多关节工业机械手的比例和开关控制,以PLC作为其控制器,通过无线数传模块进行数据传输,实现远程无线遥控操作。 手持操作器采用16位单片机,对检测到的按钮和摇杆操作进行数据编码后通过无线的方式发送至PLC,PLC对其解码后获得指令实现对机械手各关节运动的控制。该方案成本低,具有良好的通用性和可扩展性。 前言 可编程序逻辑控制器(ProgrammableLogicController,PLC)是一种适用性强的工业用控制器,广泛应用于各类工业生产线,移动机械设备的控制等环境较恶劣的工业场合。其工作性能稳定,可扩展性强,应用简便。根据不同的模块配置,可以进行逻辑及算数运算,对数字开关量、模拟量等进行控制和采集,同时具有丰富的总线
[电源管理]
小广播
最新应用文章

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved