ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:863.45KB ,
资源ID:14510864      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14510864.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《基于软核技术的嵌入式系统设计》Word格式文档下载.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《基于软核技术的嵌入式系统设计》Word格式文档下载.docx

1、使用其他开发板的同学在设置时需要做相应的改动)CRC原理及实现方法CRC的全称为Cyclic Redundancy Check code,中文名称为循环冗余校验码。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成

2、多项式。 校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。例如 1100101 表示为: 1x6+1x5+0x4+0x3+1x2+0x+1,即 x6+x5+x2+1。设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。发送方

3、编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以G(x),所得余式即为R(x)。用公式表示为: T(x)=xr P(x)+R(x)接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。举例来说:设信息码为1100,生成多项式为1011,即P(x)=x3+x2,G(x)=x3+x+1,计算CRC的过程为 XrP(x) x3(x3+x2) x6+x5 x = = = (x3+x2+x) + G(x) x3+x+1 x3+x+1 x3+x+1即: R(x)=x。注意到G(x)最高幂次r=3,得出CRC为010。如果用竖式除法,计算过程为

4、1110 - 1011 /1100000 (1100左移3位) 1011 - 1110 - 1010 0010 0000 010因此,T(x)=(x6+x5)+(x)=x6+x5+x, 即 1100000+010=1100010 。 如果传输无误, T(x) x6+x5+x = = x3+x2+x , G(x) x3+x+1 无余式。再看一下前述的竖式除法,如果被除数是1100010,显然在商第三个1时,就能除尽。下面是一个典型的PPP帧。最后两个字节称为FCS(Frame Check Sequence),是前面11个字节的CRC。FF 03 C0 21 04 03 00 07 0D 03 0

5、6 D0 3A我们来计算这个PPP帧的CRC,并验证它。 byte ppp13 = 0xFF, 0x03, 0xC0, 0x21, 0x04, 0x03, 0x00, 0x07, 0x0D, 0x03, 0x06, 0x00, 0x00; int i,j; u16 result; / 以下计算FCS / 初始化 crcInitRegisters(); / 逐位输入,每个字节低位在先,不包括两个FCS字节 for(i = 0; i 11; i+) for(j = 0; j j) & 1); / 得到CRC:将寄存器组的值求反 result = crcGetRegisters(); / 填写FCS

6、,先低后高 ppp11 = result & 0xff; ppp12 = (result 8) & / 以下验证FCS / 逐位输入,每个字节低位在先,包括两个FCS字节 13; / 得到验证结果 result = crcGetRegisters();可以看到,计算出的CRC等于0x3AD0,与原来的FCS相同。验证结果等于0。初始化为全1,以及将寄存器组的值求反得到CRC,都是CRC-ITU的要求。事实上,不管初始化为全还是全0,计算CRC取反还是不取反,得到的验证结果都是0。实现方式一:软件方法在本实验中我们使用的CRC-ITU的生成多项式为G(x)=x16+x12+x5+1,简记式为10

7、21。生成多项式的最高幂次项系数是固定的1,故在简记式中,将最高的1统一去掉了。CRC-ITU的计算算法如下:a.寄存器组初始化为全(0xFFFF)。b.寄存器组向右移动一个字节。c.刚移出的那个字节与数据字节进行异或运算,得出一个指向查找表值(注:本实验是利用函数来产生查找表)的索引。d.索引所指的表值与寄存器组做异或运算。e.数据指针加1,如果数据没有全部处理完,则重复步骤b。f.寄存器组取反,得到CRC,附加在数据之后。CRC-ITU的验证算法如下:c.刚移出的那个字节与数据字节进行异或运算,得出一个指向查找表值的索引。e.数据指针加1,如果数据没有全部处理完,则重复步骤b (数据包括C

8、RC的两个字节)。f.寄存器组的值是否等于0xF0B8(CRC-ITU定义),若相等则通过,否则失败。实现方式二:用户指令的使用在Altera的Nios II嵌入式处理器中,用户可以在Nios II指令系统中增加用户自定义指令,以增强对强实时软件算法的处理能力。用户自定义指令可以通过单周期或多周期操作来完成复杂的处理任务。采用用户自定义指令是一个把复杂的标准指令序列简化为一条用硬件实现的单个指令的方法,最多可以定制256个用户指令。定制指令处理器还是处理复杂的算术运算和加速逻辑的最佳途径。完整的用户自定义指令包括:用户自定义逻辑完成用户操作的硬件部分;软件宏提供软件接口使用户能够访问用户自定义

9、逻辑。本实验将一个CRC-ITU算法的逻辑块(包含了4个子逻辑块)作为一个用户定制指令,将它们添加到Nios II CPU的指令中,可以比用软件实现快几倍。4个子逻辑快分别实现字位转换、数据相乘、数据寄存和移位异或的功能。向Nios II ALU中增加用户自定义指令由于用户自定义指令需要直接连到ALU上,所以Nios II提供一套预先定义好名称和功能的接口如下图:Nios II配置向导会扫描用户自定义指令,搜索需要的端口,把这些端口连到ALU上。因此用户自定义指令必须指定所有需要的端口类型(如单周期或多周期),必须使用预先定义的端口名称,端口才能连到正确的接口上。例如,在本实验中自定义指令逻辑

10、快的顶层文件CRC的原理图如下,可以看到所定义的端口符合上面提到的原则(本实验未使用prefix端口)。这样只用一个函数就可实现CRC。unsigned short crcCompute(unsigned short *data_block, unsigned int nWords) unsigned short* pointer;unsigned short word; word = ALT_CI_CRC(0xFFFF, 1); / initialise crc reg to 0xFFFF for (pointer = data_block; pointer (data_block + nW

11、ords); pointer +) word = ALT_CI_CRC(*pointer, 0); return (word); /* crcCompute() */其中的ALT_CI_CRC函数就是调用自定义指令的C语言的宏定义。实现方式三:用户添加外设IP COREAltera公司提供了CRC校验码的IP core,此core是基于CRC-ITU的,用户可以使用SOPC Builder中的用户逻辑接口向导,将其集成到Nios II处理器系统中。这种自动化工具能够校验Verilog或VHDL源代码,识别顶层端口并将这些端口连接到合适的处理器总线信号上,整个过程用户介入很少。SOPC Buil

12、der也会为该外设生成定制的C和汇编函数库,方便用户直接在IDE中使用与该外设相关的函数操作。添加外设之后,再用SOPC Builder中的添加向导,把加速逻辑和DMA通道添加到系统中,可以比用软件实现快数百倍。CRC的IP core的源文件为crc_peripheral.v(vhd)。通过SOPC Builder的用户定义逻辑接口向导可以把该程序编译生成为在SOPC Builder中能够调用的外设器件文件,添加到Nios II CPU之后就可以利用对应的C函数库,再配合DMA模块我们就能够用自定义外设实现CRC。以下就是调用自定义外设的函数。volatile alt_u16 crcCompute(unsigned long *data_block, unsigned int nWords, int hex) alt_u16 word; IOWR(CRC_PERIPH_BASE,0,0x0000FFFF);/通过对外设写数据,实现初始化 alt_dma_txchan_ioctl(tx, ALT_DMA_RX_STREAM_ON, (void*)(CRC_PERIPH_BASE + 0x4); alt_avalon_dma_send (tx, data_block, nWords , /dma_done, NULL, NULL); while (IORD_A

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1