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

发布者:Howard_Sun最新更新时间: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核的设计

上一篇:基于DSP的软件无线电基频发射机的设计
下一篇:瞄准视频监控和视频服务器的达芬奇DSP

推荐阅读最新更新时间:2024-05-02 20:37

AB类功率放大器驱动电路的研究与设计
1 AB类功放驱动电路设计目标 在实用电路中,往往要求放大电路的末级(即输出级)输出一定的功率,以驱动负载。能够向负载提供足够信号功率的放大电路称为功率放大电路,简称功放。经典功率放大器有4种类型:A类,AB类,B类和C类,他们的主要差别在于偏置的情况不同。理想的4类经典放大器的最大效率的理论值与导通角的函数关系如图1所示。 A类功率放大器的线性度好,功率传递能力差,效率最大值为50%,导通角为360°;B类功率放大器通过减少一个周期中晶体管工作的时间来提高效率(最好可达78.5%),保持了实现线性调制的可能性,工作周期为半周期;C类功率放大器提供了接近100%的效率,但同时归一化的功率传递能力和功率增益都趋于零,线性度差
[模拟电子]
msp430学习的深度解析和总结
一、MSP430开发环境建立 1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。 2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET 3.建立一个工程,选择 option 选项,设置 a、选择器件,在 General 项的 Target 标签选择目标器件 b、选择输出仿真,在 Linker 项里的 Output 标签,选择输出 Debug information for C-SPY ,以输出调试 信息用于仿真。 c、若选择 Other ,Output下拉框选择 zax-m 即可以输出hex文件用以烧录,注意,此时仿真不了。 d、选择 Debugger 项的 Setup 标签, Drive
[单片机]
msp430学习的深度解析和总结
DSP编程技巧-使用代码优化时必须考虑的五大问题
我们书写的符合ANSI/ISO C/C++ 的代码能被高效执行,我们在写代码时也要考虑到一些必要的原则,从而既能实现代码的优化,也能保证代码的安全,使得优化操作不会让我们的代码产生预期之外的结果。下面我们就来看一下在使用 代码优化 时,必须考虑的五大问题。 1. 小心使用汇编表达式   在 C/C++ 代码中,有时候一些操作难免会对某些CPU寄存器进行操作,此时要使用内嵌的汇编表达式,例如asm("EALLOW"),或者重置某个中断的掩码寄存器等。在优化代码时,编译器会重新调整某些代码段的顺序,自己决定使用某些寄存器(例如AR0-AR7这样的辅助寄存器),甚至删除某些编译器认为无用的变量、函数等,但是编译器一般情况下并
[嵌入式]
stm32f407之基本定时器TIM6&TIM7(操作寄存器)
基本定时器TIM6和TIM7包括一个由可编程分频器驱动的16位自动重载计数器。它可以用作普通的定时器,也可以用来驱动DAC。这两个定时器是完全独立的,不共享任何资源。更多时候是与DAC平配合使用。 作为定时器的配置步骤: 1.设置中断优先级分组(如果之前没有设置),这个最好一个程序里只在开头设置一次。 2.使能相关时钟。 3.设置分频。 4.清空计数器的值。 5.设置自动重装寄存器的值。 6.是否允许中断。 7.如果允许中断,设置中断优先级,使能中断。 8.使能计数器。 程序: /************************************ 标题:定时器TIM7
[单片机]
马凯强调 以创新驱动中国制造高质量发展
国务院副总理马凯12日在北京调研国家制造业创新中心建设情况,并主持召开国家制造强国建设领导小组第七次会议暨创新中心建设现场会。他强调,要认真贯彻落实党的十九大和中央经济工作会议精神,以习近平新时代中国特色社会主义思想为指导,坚持稳中求进工作总基调,坚持新发展理念,按照高质量发展的要求,以供给侧结构性改革为主线,强化创新驱动,推动中国制造加快质量变革、效率变革、动力变革。 马凯指出,《中国制造2025》实施以来,经过各方面共同努力,制造强国建设取得积极进展,创新体系不断健全,转型升级明显提速,新动能加快成长,重点领域取得一批标志性成果,制造业综合实力又上了一个新台阶,为我国经济发展取得历史性成就、发生历史性变革作出重要贡献。
[半导体设计/制造]
MEGA8单片机驱动LCD1602液晶
个头文件,搞了好久都没成功!都快到心灰意冷的边缘了,突然灵光一闪:会不会是mega8的Flash不行了?这片mega8陪伴了我好几年,也应该退休了。抱着试试看的想法换了一片新的mega8,一切ok!自己觉得奇怪,之前在烧程序时,并没有报错啊? 调试过程总结一下: 1)由于找不到的1620资料,不知道它的操作时序。看到一些帖子说1620和1602没区别,还是有点将信将疑。后面用网友编写的1602程序试验,才知道它们俩没啥区别 2)关于是否检测LCD处于空闲,觉得还是最好在写指令和写数据时都加上。不检测,会导致显示结果不正常。 3)由于连线很多14根(加上背光就是16根),如果有一根除了问题就会影响到显示。所以我是用万用表一根线一根线
[单片机]
PHY1070 VCSEL驱动器/带数字诊断后置放大器
    概述 该PHY1070 - 01是一种结合VCSEL驱动器和限幅内的数字为小尺寸模块使用光纤通道应用诊断监测支持放大器。发送器集成了一个可编程的偏置电流和调制电流通过2线串行接口控制,高速输出级。 ,平均功率控制回路允许在双方共同阴极和共阳极配置连接。一个丢失信号丢失(LOS)检测器是包含在检测的基础上无论是接收器光电探测器平均电流或接收信号调制幅度。当处于模式数字诊断使用,集成了A / D转换器测量温度,发射偏置,电源电压,接收信号强度,平均权力是通过2线串行接口读取。外部微控制器单元(MCU)是用于校准的实时监控和告警发生诊断 关键特性 多速率从1Gbps至4.25Gbps VCSEL驱动器
[模拟电子]
东芝推出带有嵌入式微控制器的SmartMCD™系列栅极驱动IC
系列首款产品可实现3相直流无刷电机的无感控制 中国上海,2024年3月28日—— 东芝电子元件及存储装置株式会社(“东芝”)今日宣布,开始批量出货带有嵌入式微控制器(MCU)的SmartMCD™系列栅极驱动IC 。 首款产品“TB9M003FG”适用于汽车应用中使用的无感控制3相直流无刷电机的水泵和油泵、风扇和鼓风机等设备。 TB9M003FG将微控制器(Arm® Cortex®-M0)、闪存、电源控制功能和通信接口功能统一集成到栅极驱动IC中,控制和驱动3相直流无刷电机中的N通道功率MOSFET。 这一集成将减小系统尺寸和组件数量,同时实现各种汽车电机应用中的先进和复杂电机控制。此外,新产品还搭载了东芝自研的矢量引
[嵌入式]
东芝推出带有嵌入式微控制器的SmartMCD™系列栅极<font color='red'>驱动</font>IC
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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