精华内容
下载资源
问答
  • 计算机网络crc校验实验报告,CRC校验实现-实验报告(附主要实现代码)
    2021-06-23 00:49:04

    计算机网络

    实验报告

    班级:03计算机B班

    实验名称:CRC校验实现

    姓名:kikikind

    学号:086

    指导老师:何怀文

    日期:2006-4-22

    1.学习CRC循环冗余检验原理

    2.掌握实现方法

    WindowXp+sp2 , VC++ 6.0/MFC

    三.实验任务

    1.通过学习CRC原理,验证,检错,掌握其工作原理;

    2.编写CRC编码程序;

    3.总结实验过程,编写提交实验报告:方案、编程、调试、结果、分析、结论。

    四.CRC编程实现

    1.程序设计

    1.以图型界面方式显示,可选择编码方式

    i.CRC16

    ii.CRCCCIT

    iii.CRC32

    iv.自定义多项式

    2.MFC实现

    3.自定义编码数据(十进制方式)

    4.显示生成编码与余数

    5.检验正确性

    2.十进制转二进制(以下是具体函数)

    具体算法:

    //1.找不出大于转换数的最大2^n

    //2.转换数减去2^n,再找不大于新的当前数

    //3.当前数大于2^n时置1,小于时置0,同时2^n/2

    void CCRC::DecToBinary( CString & ChangeString )

    {

    if ( ChangeString.IsEmpty())

    return;

    unsigned long num = atol(ChangeString.GetBuffer(ChangeString.GetLength()));

    unsigned long temp = 1;

    int k = 0;

    //求出最大不超过当前数的2次幂,设置字符串长度

    while ( temp < num )

    {k++; temp*=2; }

    //设置字符串长度

    ChangeString.GetBufferSetLength(k);

    ChangeString.SetAt(0,'1');

    temp /= 2;

    num -= temp;

    //num为当前数, temp保存不大于num的最大2^n数,

    k = 1;

    while( num >= 0 && temp != 0)

    {

    //这句很重要,每设一位0 or 1 temp都要/2

    temp /= 2;

    //当前数比2^n少时,就置0

    while( num < temp )

    {

    ChangeString.SetAt(k++,'0');

    temp /= 2;

    }

    //如果减尽,即当前数num=0的话,最后一位置0,其它情况时是num > temp所以置一

    if ( num != 0)

    ChangeString.SetAt(k++,'1');

    num -= temp;

    }

    }

    3.转换编码(以下是具体函数)

    //编码

    //strChange编码的字符串strPoly生成多项式SaveRadius保存余数字符串

    bool CCRC::CRC_Code(CString strChange, CString strPoly, CString & SaveRadius, bool isTest )

    {//除数,每次运算的模2数,余数

    char * Buf;

    int ChangeLen,PolyLen;

    int StrPos, Pos, BufPos;

    bool isLast = false;

    ChangeLen = strChange.GetLength();

    PolyLen = strPoly.GetLength();

    //初始化各数组长度(保存多项式的二进制字符串长度即为最高次数,+1位是用来保存结束符)

    Buf = new char[PolyLen+1];

    //如果不是用于测试,是在多项式后尾添0

    if ( !isTest )

    {

    strChange.GetBufferSetLength( ChangeLen + PolyLen);

    StrPos= ChangeLen;

    ChangeLen = ChangeLen + PolyLen - 1;

    while ( StrPos < ChangeLen )

    strChange.SetAt(StrPos++,'0');

    strChange.SetAt(StrPos,'/0');

    }

    //进行模2除

    StrPos = PolyLen;

    Pos = 0;

    while( Pos < PolyLen )

    {

    Buf[Pos] = strChange.GetAt(Pos);

    Pos++;

    }

    //从多项式长开始向右扫

    while( StrPos <= ChangeLen )

    {

    Pos = 0;

    isLast = false;

    //单次多项式除

    while ( Pos < PolyLen)

    {

    if ( Buf[Pos] == strPoly.GetAt(Pos) )

    Buf[Pos++] = '0';

    else

    Buf[Pos++] = '1';

    }

    //调整buf,如不是最后一次,则将buf中从第一个不为0的数开始将数向前移

    BufPos = 0;

    Pos = 0;

    //找出第一个不为1的字符,如果全为0,表示已除完

    while ( Buf[BufPos++] != '1' && BufPos< PolyLen);BufPos--;

    if ( StrPos == ChangeLen -1 && BufPos > 1)

    {

    BufPos = 2;

    isLast = true;

    }

    //本身转移

    if ( BufPos > ( ChangeLen - StrPos ))

    {

    BufPos = ChangeLen - StrPos + 1;

    isLast = true;

    }

    while( BufPos < PolyLen )

    Buf[Pos++] = Buf[BufPos++];

    //如果是最后一次就跳出去

    if ( StrPos == ChangeLen )

    break;

    //填充从转换串的新字符

    while( Pos < PolyLen && StrPos < ChangeLen )

    Buf[Pos++] = strChange.GetAt(StrPos++);

    //控制最后一轮

    if ( isLast )

    break;

    }

    Buf[PolyLen-1] = '/0';

    SaveRadius = CString(Buf);

    delete [] Buf;

    return ( atol(SaveRadius.GetBuffer(SaveRadius.GetLength())) == 0 );

    }

    4.检查正确性

    设置编码函数最后一个参数isTest为TURE,则不会在转换串后添0,重新计算一次,保存返回值,如果为0,则表示编码成功!

    五.附件

    l附件有实现程序,可直接运行

    l可能存有不足,测试基本正常

    l完整源程序

    六.程序介绍

    l采用计算法,以数组方式存放二进制字符串模拟手工计算

    l可自定义校检多项式

    l生成校检码检查,验证生成式的正确性

    (由于水平有限,可能程序仍然存在很多不足,请老师多多指教!如有任何问题或疑问可发邮件至邮箱:与我联系,谢谢)

    更多相关内容
  • 第9关:CRC编码流水传输实验.txt sadassaasdasdasdasdasdasdsdadasdas
  • 1、汉字编码实验(用 HXD.EXE 将 ROM 内容换成自我简介,姓名,籍贯,年 龄) 2、奇偶检验码应用实验 3、海明码编码设计实验(22,16) 5、编码流水传输实验 完成国标转区位码、汉字显示、海明编码,海明解码电路,...
  • CRC编码流水传输实验(计算机数据表示实验

    千次阅读 多人点赞 2020-04-23 00:57:30
    CRC编码流水传输实验实验要求同海明编码流水实验要求是相同的 因此其解题思路也是相同的,电路设计在这里也是相同的,因此就不给出解题思路了(可到海明编码流水的那篇文章看)。 1.电路设计: 2.通过测试

    CRC编码流水传输实验的实验要求同海明编码流水实验要求是相同的
    因此其解题思路也是相同的,电路设计在这里也是相同的,因此就不给出解题思路了(可到海明编码流水的那篇文章看)。
    1.电路设计:
    在这里插入图片描述
    2.通过测试
    在这里插入图片描述

    展开全文
  • CRC编码解码 matlab仿真

    2016-05-19 17:27:14
    CRC编码的matlab仿真,内含文档和代码。
  • FPGA实现CRC编码

    2018-03-15 22:31:00
    那么对于信道不理想产生的影响可以用均衡的方法进行改善或者消除,而噪声干扰的数据误码通过差错控制消除,而差错控制的核心是差错编码,其中CRC由于编码和解码简单,检错和纠错能力强得到广泛应用。对随机错误和...

    首先CRC应用的主要场景:

    在数据通信中要求数据的高度可靠性,但实际上由于信道不理想或者噪声干扰都会导致数据的误码率

    那么对于信道不理想产生的影响可以用均衡的方法进行改善或者消除,而噪声干扰的数据误码通过差错控制消除,而差错控制的核心是差错编码,其中CRC由于编码和解码简单,检错和纠错能力强得到广泛应用。对随机错误和突发错误都能以较低冗余度进行严格检验

    其特征是信息段和校验字段的长度可以任意选定。



    在数据存储和数据通信领域,CRC无处不在:著名的通信协议X.25的FCS(帧检错序列)采用的是CRC/CCITT,ARJ/LHA等压缩工具软件采用的是CRC32,磁盘驱动器读写采用的日式CRC16,通常用到的图像存储格式GIF/TIFF等也是采用CRC作为检错手段的

    传输差错分为两种:1、比特差错(1可能变成0,0可能变成1);2、收到的帧没有出现差错,但出现了帧丢失、帧重复等。故在数据链路层使用CRC校验,能够实现无比特差错的传输,但这还不是可靠传输。 数据的可靠传输用哪个到了TCP协议,(

    可靠数据传输的原理

     

    2.CRC校验的基本原理:

      CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如:(7,3)码:110 1001,前三位110为信息码,1001为校验码。

    3.校验码的生成规则:

      1)将原信息码左移r bit,右侧补零,如 110--> 110 0000;

      2)用110 0000除以g(x)  (注意,使用的是模2除法,见下文),得到的余数即为CRC校验码;

      3)将校验码续接到信息码的尾部,形成CRC码。

    4.关于生成多项式g(x)

      在产生CRC校验码时,要用到除法运算,一般来说,这是比较麻烦的,因此,把二进制信息预先转换成一定的格式,这就是CRC的多项式表示。二进制数表示为生成多项式的系数,如下:

      

      所有二进制数均被表示为一个多项式,x仅是码元位置的标记,因此我们并不关心x的取值,称之为码多项式。(我没研究过CRC代数推理过程,没体会到用多项式计算的方便之处,这里要学会的就是给出生成多项式g(x),能写出对应的二进制即可)

      常见的生成多项式如下: CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码用途有限。校验码的位数越多,差错检测能力越高

       

    实现的过程已经明确,那么对多项式做模2除法如何实现呢?这里就需要涉及到一种叫LFSR(线性反馈移位寄存器)的使用http://www.cnblogs.com/BitArt/archive/2012/12/22/2827005.html讲的很详细,是一种伪随机数产生的方式,

    有所改进的地方就是,可以将伪随机数发生器看作一个Moore型状态机,它的输出只与当前的状态有关;而此时利用LFSR电路,需要引入数据输入端,输出不仅取决于当前的状态,还取决于输入信号,相当于Mealy型状态机,如下图:

      

     

     

    注意对比与伪随机数产生器中该反馈支路的区别!

      反馈项gr+1gr……g0为生成多项式的系数,依然是1代表存在反馈,0代表不存在反馈;此电路可以完成上述的模2除法操作,若我们要求0xaa的CRC校验码,则从高位到低位顺序输入0xaa共8 bit后,D15……D0中的数据即为所要求的余数,即CRC校验位。

     附上代码:实现的是一个有4位信息码,5位校验码的数据编码

    module CRC5_GEN(
    input rst,
    input clk,
    input [3:0] data_in,
    input d_valid,
    output reg[4:0] crc
    );

    integer i;
    reg feedback;
    reg [4:0] crc_tmp;
    always @(posedge clk or negedge rst)
    begin
    if(!rst)
    crc <= 5'b0;
    else if(d_valid==1'b0)
    crc <= 5'b0;
    else
    crc <= crc_tmp;
    end


    always@( data_in or crc)
    begin
    crc_tmp = crc;
    for(i=3; i>=0; i=i-1)
    begin
    feedback = crc_tmp[4] ^ data_in[i];
    crc_tmp[4] = crc_tmp[3];
    crc_tmp[3] = crc_tmp[2];
    crc_tmp[2] = crc_tmp[1] ^ feedback;
    crc_tmp[1] = crc_tmp[0];
    crc_tmp[0] = feedback;
    end

    end

    endmodule

    Verilog 实现http://www.cnblogs.com/BitArt/archive/2012/12/26/2833100.html

    ​      由上面的分析大家应该可以写出串行的code。但是并行的怎么写,以及具体的原理可以参考

          写过之后的验证可以使用参考这个网址。​好了,就写这些了。

    转载于:https://www.cnblogs.com/Dinging006/p/8576829.html

    展开全文
  • 基于CRC编码的检错程序实验报告
  • logisim计组实验CRC校验电路

    千次阅读 2020-04-24 16:15:14
    文章目录CRC(7,3)串行编码电路CRC(21,16)并行编码电路CRC(21,16)并行解码电路 CRC(7,3)串行编码电路 CRC(21,16)并行编码电路 由公式:2^r-1>=N=k+r k = 16 得 r = 5,共需要21位。为了后续检验两位错...


    CRC校验电路的logisim设计,有什么问题就提出来吧~
    电路文件已经托管至Github,欢迎star:点这里

    CRC(7,3)串行编码电路

    具体设计教材中已经给出,这里没有验证修改。
    在这里插入图片描述

    CRC(21,16)并行编码电路

    由公式:2^r-1>=N=k+r k = 16 得 r = 5,共需要21位。为了后续检验两位错,我们需要另外加一位总偶校验位。 因为多项式的G(x)最高次幂等于校验位的位数,最低次幂等于0,选择多项式100101。 这里和串行电路部分是一样的。 并行编码和串行编码不同的地方在于:并行编码使用异或运算的结合律将时序电路转换为了纯逻辑电路,增加了运算速度。

    先得出每一位的余数表格,之后数据位为0取0非0取余数
    之后就可以设计电路了。
    如下图所示:

    在这里插入图片描述
    一看就是老电工了

    CRC(21,16)并行解码电路

    将传输过来的16位数据位与多项式100101进行模2除法,得到的余数再和传输的CRC校验和进行异或,即可得到出错位置相对应的余数。记为W。

    将得到的余数W和每一位相对应的余数进行异或。若最后得到的值全为0,即表示这一位出错。
    得到的三部分电路如图所示:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    总体图如下所示:
    在这里插入图片描述
    难顶啊,做了一整天,有个错误找了三四个小时
    emmm最后突然就过了
    在这里插入图片描述

    展开全文
  • 云大软院基于CRC编码的检错程序的实验报告,详细步骤,实验总结
  • data实验.circ

    2020-05-02 12:55:12
    包含计算机数据表示实验的全部编码(九关)分别是 1.汉字国标码转区位码实验 2.汉字机内码获取实验 3.偶校验解码电路设计 4.偶校验编码设计 5.16位海明编码电路设计 6.16位海明解码电路设计 ...9.CRC编码流水传输实验
  • 1.了解汉字的机内码、区位码、字形码的区别。 2.了解海明编码和解码的原理。 3.了解流水传输机制。 华中科技大学《计算机硬件系统设计》
  • 首先,了解实验的大体要求,该实验要求我们对16位数据进行CRC编码,生成22位数据;再将22位CRC编码进行解码成16位数据,且判断数据是否在传输过程中发生一位错,两位错的情况,若出错,则必须对数据进行纠正。因此该...
  • 计算机数据表示实验 前五关 1.汉字国标码转区位码实验 2.汉字机内码获取实验 3.偶校验解码电路设计 4.偶校验编码设计 5.16位海明编码电路设计
  • XXXXXXXX大学(计算机网络)实验报告实验名称 CRC校验实验时间 年 月 日专 业 姓 名 学 号预 习 操 作 座 位 号教师签名 总 ...
  • 计算机网络实验报告班级:03计算机B班实验名称:CRC校验实现姓名:kikikind学号:086指导老师:何怀文日期:...2.编写CRC编码程序;3.总结实验过程,编写提交实验报告:方案、编程、调试、结果、分析、结论。四....
  • [计算机组成原理]CRC校验及其实现

    千次阅读 2019-08-08 21:09:12
    文章目录一、CRC校验的基本原理1、增加冗余码(校验位)2、生成多项式G(x)3、G(x) 应满足的条件二、模 2 除运算三、CRC编码方法四、CRC的检错与纠错五、CRC编码的实现 一、CRC校验的基本原理 1、增加冗余码(校验...
  • XXXXXXXX大学(计算机网络)实验报告实验名称 CRC校验实验时间 年 月 日专 业 姓 名 学 号预 习 操 作 座 位 号教师签名 总 ...
  • 16位CRC并行编码电路设计 16位CRC并行解码电路设计 内容较多,我分成了三部分,局部更加清晰。...CRC编码流水传输实验 计算机数据表示实验九关内容都上传了,感觉做完了这些,自己已经是个废人了。 ...
  • CRC编码电路

    千次阅读 2011-10-15 23:04:26
    Redundancy Check)原理:信息码为K位,其后添加R位的冗余校验码,整个编码长度为N(N=K+R),即是一种(N,K)码。CRC码的生成需要指定一个生成多项式G(x),且G(x)为(R+1)次的多项式。对于码M(x),CRC码校验值R(x)=
  • CRC校验 海明编码

    2014-04-09 19:41:49
    本资源用matlab实现了CRC校验编码、译码和海明编码、译码,并把相关代码封装成GUI界面。
  • 基于Logisim的CRC编码电路实现.pdf实验内容 基于 Logisim 的 CRC 编码电路实现 基于 Logisim 的 CRC 编码电路实现 专业 班级 学号 姓名 电话 邮件 报告日期2015-6-10 指导教师 2015 计算机组成原理课程论文计算机...
  • 开放式CPU设计 实验程序 编码实验CRC码 所有程序均编译测试通过 请放心下载
  • 基于C语言的CRC编码与解码的实现

    千次阅读 2020-01-21 22:02:38
    基于C语言的CRC编码与解码的实现 实验目的 设置一个d位的数据D, r+1位的多项式G,编写程序生成CRC码,并把此CRC码 作为数据帧进行传送。 编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用...
  • 偶校验编码设计第4关:偶校验解码电路设计第5关:16位海明编码电路设计第6关:16位海明解码电路设计第7关:海明编码流水传输实验第8关:16位CRC并行编解码电路设计第9关:CRC编码流水传输实验实验结果: 实验目的 本...
  • 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以...
  • 数据表示实验 国标转区位码 要求用加法器实现 回顾:区位码+2020H=国标码 那么根据补码原理,国标-2020H = 国标+FFFFH-2020H+1 = 国标+DFDFH+1 = 国标+DFE0H 如图,模运算意义下加法和减法是等价的 海明...
  • 数据表示实验.circ

    2020-06-10 12:50:45
    华中科技大学数据表示实验的全部电路图都有,有需要的小伙伴自己下载,这些电路都是经过本人测试,是可以通关的!!!
  • 实验九基于crc编码的检错程序的实现 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分云南大学软件学院云南大学软件学院 实实 验验 报报 告告课程: 计算机...
  • 华中科技大学计算机组成原理实验计算机数据表示,第五关海明编码,第六关海明解码。因为是初入手,忘了把这两关和前面的放在一起。
  • 实验九基于CRC编码的检错程序的实现.doc云南大学软件学院实 验 报 告课程 计算机网络原理实验 任课教师 刘春花,刘宇 姓名 学号 专业 成绩 实验九、链路层实验基于 CRC 编码的检错程序的实现实验报告一、实验目的1、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,344
精华内容 1,337
关键字:

crc编码实验