精华内容
下载资源
问答
  • 第9关:CRC编码流水传输实验.txt sadassaasdasdasdasdasdasdsdadasdas
  • 设置一个d位的数据D, r+1位的多项式G,编写程序生成CRC码,并把此...编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。
  • CRC编码解码 matlab仿真

    2016-05-19 17:27:14
    CRC编码的matlab仿真,内含文档和代码。
  • 绍了循环冗余校验(CRC)编码器的设计及FPGA实现过程,采用原理图输入法对整个系统进行了编译和仿真,并在芯片 EPlK30TCl44.3中对该设计的核心部分进行了测试验证。结果表明,试验数据与理论分析结果完全相符。 ...
  • CRC编码

    千次阅读 2020-04-08 23:32:15
    循环冗余校验(Cyclic Redundancy Check, CRC) 原理:先在要发送的帧后面附加一个二进制数,(用来校验的校验码);生成一个新帧发送给接收端 附加的二进制数要求:使所生成的新帧能与发送端和接收端共同选定的某个特定...

    循环冗余校验(Cyclic Redundancy Check, CRC)

    原理:先在要发送的帧后面附加一个二进制数,(用来校验的校验码);生成一个新帧发送给接收端
    附加的二进制数要求:使所生成的新帧能与发送端和接收端共同选定的某个特定数整除
    运算:这里的除是指“模2除法”
    过程:到达接收端后,把接收到的新帧除以选定的除数
    因为在发送端发送数据帧之前加了一个数,做了“去余”处理,所以结果应该没有余数
    如果有余数,代表出现错误

    模2加法:1+1=(1)0 ;0+1=1;0+0=0 —— 满2进1,保留当前位
    模2减法:0-1=1;1-1=0;1-0=1;0-0=0 —— 借1当2,保留当前位
    约等于异或
    模2乘法:不进位
    例子:
    模2乘法
    模2除法:在求余数时用模2减
    例子:
    模2除法
    步骤
    • 选择除数,即一个二进制比特串或者多项式
    • 得到CRC校验码,即FCS(帧校验序列)
    • 组装新帧,发送给接受端;接收端 模2除,没有余数则无差错
    • 图示:
    过程
    多项式除数转换:
    多项式例子
    注意:余数的位数只能比除数得位数少一位,否则前面补零;FSC规定最高位最低位必须为1

    计算题:

    1.(搜狗百科例题) 被校验的数据M(x)=1000,选择生成多项式为G(x)=x3+x+1,问,循环冗余校验码时多少?
    答:G(x)=x3+x+1对应二进制数为1011;四位
    得余数:1000000 B 除 1011B–>余数得101B,即校验码为101B;
    (B代表二进制)
    所以循环冗余校验码为:1000101B
    (验证:1000101B 除 1011B–> 余数 = 0)
    2. 假设CRC生成多项式为G(X)=X4+X3+1,求二进制序列10110011得CRC校验码?
    答:G(X)=X4+X3+1对应二进制数为11001
    101100110000B 除 11001B 得余数 0100B
    所以:101100110100B
    3. (牛客网)要发送的数据为11001001,采用CRC的生成多项式是P(X)=X3+X+1,则应添加在数据后面的余数为?
    答:1011;11001001000B除1011B余数得001B

    参考文档:
    1、通俗易懂的CRC校验
    2、[搜狗百科]模2除法

    如有错误,欢迎指正!

    展开全文
  • 云大软院基于CRC编码的检错程序的实验报告,详细步骤,实验总结
  • crc编码代码matlab CRC编码器和解码器 第1部分– CRC校验实现(12个标记)。 您将使用生成多项式g(x)= x5 + x3 + 1,其中(n,k)=(20,15)。 使用MATLAB,Python或您选择的语言,编写以下两个函数: •crc_...
  • CRC编码MATLAB

    2017-06-08 20:35:20
    CRC 可视化 界面,编码,译码,纠错
  • matlab实现CRC编码

    热门讨论 2012-06-02 09:47:10
    matlab实现CRC循环校验,内含7个matlab .m文件 分别实现不同方式的CRC编码
  • C语言实现CRC编码

    千次阅读 2019-12-31 15:28:01
    一、CRC编码简介 CRC 的英文全称为 Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。 二...

    先做简单介绍

     

    一、CRC编码简介

    CRC 的英文全称为 Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。

    二、CRC编码过程

    以下步骤将描述 6 字节红外控制码生成过程:

    1.从二维码的中依次顺序提取2 个英文字母、最后 2 个英文字母(X、x 除外,取英文字母 ASCII 值为原始数据),并从中提取出多项式 g(x)(多项式的最高位为 x16,最低为 1);

    2.预置 1 个 16 位的寄存器为十六进制 FFFF(即全为 1),称此寄存器为 CRC 寄存器;

    3.把第一个 8 位二进制数据(既原始数据的第一个字节)与 16 位的 CRC 寄存器的低8 位相异或,把结果放于 CRC 寄存器,高八位数据不变;

    4.CRC 寄存器向右移一位,MSB(最高位)补零,并检查右移后的移出位 LSB(最低位)。

    5.如果 LSB 为 0,重复第 4 步;若 LSB 为 1,CRC 寄存器与多项式码相异或。

    6.重复第 4 与第 5 步直到 8 次移位全部完成。此时一个 8-bit 数据处理完毕。

    7.重复第 3 至第 5 步直到将剩下 3 个原始数据全部处理完成。

    8.最终 CRC 寄存器的内容即为 CRC 值。

    9.取 CRC 的得高八位作为红外控制码的第一字节,按顺序取原始数据为红外控制码的二、三、四、五字节,取 CRC 值的低八位为红外控制码的第六字节。

    三、算法示例

    从二维码中提取的字符串数据为:<Aa12x16,Fg.5tx15/x2+\1/hgBb>,则提取出的 4 个英文字符为 AaBb,多项式 g(x)=x16+x15+x2+1;

    提取原始数据为 0x41、 0x61、 0x42 、0x62,多项式码为 0xA001(由多项式忽略了最高位的"1",得到生成项是 0x8005,其中 0xA001 为 0x8005 按位颠倒之后的结果);计算得到的 CRC 码值为 0x8FF4; 所得 6 字节红外控制码为:0x8f 0x41 0x61 0x42 0x62 0xf4。

    依据算法示例写出代码为:

    需要说明一下,多项式提取可能有问题,因为这个文档中没有说明多项式提取的具体过程和要求,所以就按照我自己的理解写出了多项式提取办法。

    如:字符串:<Aa12x16,Fg.5tx15/x2+\1/hgBb>

    我会认为这个字符串中有很多x开头,并且后面有数字的情况,也就是说这个字符串可能是这样的:<Ax23a12x16,Fx15g.125tx15/x2+\1/hgBb>

    那么我的理解是这样的,可以提取为:x23+12+x16+x15+125+x15+x2+1,经过整合就是这样子的:

    x16+x15+x2+1。说明:因为没有x23,所以就留有23,但最后都做了归一化处理,所以每一项前面的系数都被设置为1

     

    代码如下:

    #include <stdio.h>
    #include <string.h>
    
    unsigned short CRC = 0XFFFF;				//	CRC 寄存器 预置为全F
    unsigned short Polynomial_Code = 0X0000;	//	多项式码
    unsigned short Polynomial = 0X0000;			//	多项式码之前的正序码
    
    unsigned char source[4] = {0x41,0x61,0x42,0x62};	//	原始数据
    unsigned char Infrared_Control_Code[6]={0};			//	红外控制码
    
    unsigned char cnt = 0;
    
    unsigned char str[100]= "<Aa12x16,Fg.5tx15/x2+\1/hgBbxxxxXXXXxxx>";    //Aa12x15,Fg.5tx15/x2*x1*x13/x2+\1/hgBbXxx  <Aa12x15,Fg.5tx15/x2*x1*x13/x2+\1/hgBbXx>;"<Aa12x16,Fg.5tx15/x2+\1/hgBb>";
    
    void string_CRC(unsigned char str[]);		//	函数的声明
    void main()
    {	
    	puts(str);
    	string_CRC(str);
    }
    
    void string_CRC(unsigned char str[])
    {
    	int len;
    	int i,n=0;
    	int cnt_x=0;
    	unsigned char str_temp[50];
    	char str_temp2[50] = {0};
    	unsigned char LSB = 0;
    	len = strlen(str);
    	
    	for(i=0;i<len;i++)
    	{
    		if('x' == str[i] || 'X' == str[i])
    		{
    			continue;
    		}
    		if((str[i]<='z'&&str[i]>='a') || (str[i]<='Z'&&str[i]>='A'))
    		{
    			str_temp[n] = str[i];
    			n++;
    		}
    	}
    		4字节提取源码    start     /
    	source[0] = str_temp[0];
    	source[1] = str_temp[1];
    	source[2] = str_temp[n-2];
    	source[3] = str_temp[n-1];
    		4字节提取源码    end      /
    	n = 0;
    	
    	for(i=0;i<len;i++)
    	{
    		if('x' == str[i])
    		{
    			if(str[i+2]>='1' && str[i+2]<='6')
    			{
    				if('1' == str[i+1])
    				{
    					str_temp2[n] = (str[i+1]-'0')*10 + (str[i+2]-'0');
    					i = i+2;
    					n++;
    				}
    			}
    			else
    			{
    				if(str[i+1]>='1' && str[i+1]<='9')
    				{
    					str_temp2[n] = str[i+1]-'0';
    					i = i+1;
    					n++;
    				}
    			}
    			
    		}
    		else if((str[i] >'0' && str[i] <='9') || (str[i] >0 && str[i] <=9))		//	这里(str[i] >0 && str[i] <=9)是为了解决C语言中转义问题
    		{
    			str_temp2[n] = -1;
    			n++;
    		}
    	}
    	
    	for(i=0;i<=n-1;i++)
    	{
    		printf("%d ",str_temp2[i]);	
    	}
    	printf("\n");
    	
    	for(i=0;i<=n;i++)
    	{
    		switch(str_temp2[i])
    		{
    			case 16:
    				break;
    			case 15:
    				Polynomial = Polynomial|0X8000;
    				Polynomial_Code = Polynomial_Code|0X0001;
    				break;
    			case 14:
    				Polynomial = Polynomial|0X4000;
    				Polynomial_Code = Polynomial_Code|0X0002;
    				break;
    			case 13:
    				Polynomial = Polynomial|0X2000;
    				Polynomial_Code = Polynomial_Code|0X0004;
    				break;
    			case 12:
    				Polynomial = Polynomial|0X1000;
    				Polynomial_Code = Polynomial_Code|0X0008;
    				break;
    			case 11:
    				Polynomial = Polynomial|0X0800;
    				Polynomial_Code = Polynomial_Code|0X0010;
    				break;
    			case 10:
    				Polynomial = Polynomial|0X0400;
    				Polynomial_Code = Polynomial_Code|0X0020;
    				break;
    			case 9:
    				Polynomial = Polynomial|0X0200;
    				Polynomial_Code = Polynomial_Code|0X0040;
    				break;
    			case 8:
    				Polynomial = Polynomial|0X0100;
    				Polynomial_Code = Polynomial_Code|0X0080;
    				break;
    			case 7:
    				Polynomial = Polynomial|0X0080;
    				Polynomial_Code = Polynomial_Code|0X0100;
    				break;
    			case 6:
    				Polynomial = Polynomial|0X0040;
    				Polynomial_Code = Polynomial_Code|0X0200;
    				break;
    			case 5:
    				Polynomial = Polynomial|0X0020;
    				Polynomial_Code = Polynomial_Code|0X0400;
    				break;
    			case 4:
    				Polynomial = Polynomial|0X0010;
    				Polynomial_Code = Polynomial_Code|0X0800;
    				break;
    			case 3:
    				Polynomial = Polynomial|0X0008;
    				Polynomial_Code = Polynomial_Code|0X1000;
    				break;
    			case 2:
    				Polynomial = Polynomial|0X0004;
    				Polynomial_Code = Polynomial_Code|0X2000;
    				break;
    			case 1:
    				Polynomial = Polynomial|0X0002;
    				Polynomial_Code = Polynomial_Code|0X4000;
    				break;
    			case -1:
    				Polynomial = Polynomial|0X0001;
    				Polynomial_Code = Polynomial_Code|0X8000;
    				break;
    			default:
    				break;
    		}
    	}
    	printf("source = ");
    	for(i=0;i<4;i++)
    	{
    		printf("%X ",source[i]);
    	}
    	printf("\n");
    	printf("Polynomial = %X",Polynomial);
    	printf("\n");
    	printf("Polynomial_Code = %X",Polynomial_Code);
    	printf("\n");
    
    	///  CRC 计算
    	for(n=0;n<4;n++)
    	{
    		CRC = CRC^source[n];
    		for(i=0;i<8;i++)	
    		{	
    			LSB = CRC&0X0001;
    			CRC = CRC>>1;
    			cnt++;
    			if(0 == LSB)
    			{
    				continue;
    			}
    			else		//	当LSB为1时
    			{
    				CRC = CRC^Polynomial_Code;
    			}
    			if(8 == cnt )
    			{
    				cnt=0;
    				break;
    			}
    			
    		}
    	}
    	printf("CRC = %X \n",CRC);
    	///红外控制码计算
    	Infrared_Control_Code[0] =  (unsigned char)(CRC>>8) ;
    	Infrared_Control_Code[1] = source[0]; 
    	Infrared_Control_Code[2] = source[1];
    	Infrared_Control_Code[3] = source[2];
    	Infrared_Control_Code[4] = source[3];
    	Infrared_Control_Code[5] = (unsigned char)CRC;
    	printf("Infrared_Control_Code = ");
    	for(i=0;i<6;i++)
    	{
    		printf("%X ",Infrared_Control_Code[i]);
    	}
    	printf("\n");
    }
    

     

    实现的效果为:

     

     

    展开全文
  • 基于Logisim的CRC编码电路实现.pdf实验内容 基于 Logisim 的 CRC 编码电路实现 基于 Logisim 的 CRC 编码电路实现 专业 班级 学号 姓名 电话 邮件 报告日期2015-6-10 指导教师 2015 计算机组成原理课程论文计算机...

    基于Logisim的CRC编码电路实现.pdf

    实验内容 基于 Logisim 的 CRC 编码电路实现 基于 Logisim 的 CRC 编码电路实现 专业 班级 学号 姓名 电话 邮件 报告日期2015-6-10 指导教师 2015 计算机组成原理课程论文计算机组成原理课程论文 计算机科学与技术学院计算机科学与技术学院 目录目录 1 实验目的.1 2 实验环境.1 3 实验内容.1 4 实验原理.1 4.1 CRC 码.1 4.2 CRC 编码原理.2 4.3 生成多项式选择. 3 5 方案设计.3 5.1 (7,4)CRC 编码 3 5.1.1 (7,4)CRC 编码电路图.4 5.2 (21,6)CRC 编码 4 5.2.1 (21,6)CRC 编码电路.5 6 过程与调试.5 6.1 实验实现步骤. 5 6.2 实验测试用例. 6 6.3 结果与分析. 7 6.3.1 测试结果7 6.3.2 结果分析7 6.4 故障与调试. 7 6.4.1 故障 1.7 6.4.2 故障 2.8 7 总结与心得.8 7.1 实验总结. 8 7.2 实验心得. 8 8 参考文献.9 1 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 1 实验目的 熟悉 Logisim 软件平台。 掌握运算器基本工作原理 掌握循环冗余编码CRC的原理 利用 Logisim 平台上已有的模块组成 CRC 编码电路 2实验环境 Logisim 是一款数字电路模拟的教育软件,每一位用户都可以通过它来学习如 何创建逻辑电路,方便简单。 它是一款基于 Java 的应用程序,可运行在任何支持 JAVA 环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim 中的主要组 成部分之一就在于设计并以图示来显示 CPU。当然 Logisim 中还有其他多种组合分 析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还可以 重新利用小规模的电路来作为大型电路的一部分。 3实验内容 学习使用 Logism 工具栏上的功能 学会使用子电路,并能将子电路放到 main 电路中使用 学习使用时钟,并能使用时钟单步或自动运行 学会使用分线器,理解线宽的概念 掌握循环冗余编码CRC的原理 完成(7,4)CRC 编码 完成(21,6)CRC 编码 4实验原理 4.1 CRC 码 2 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 循环冗余校验码(cyclic redundancy cheek,CRC)简称循环码或 CRC 码。二进 制信息沿一条信号线逐位在设备之间传送称为并行传送。 CRC 的编码格式如图所示,是在 K 位有效数据之后添 r 位校验码,形成总长度 为 n 的 CRC 码,简写作 Cn,k码。CRC 编码的关键技术在于如何从 k 位信息简便 得到 r 位校验码。 图 4.1 设被校验的数据 0121 .DDDDD kk 是一个 k 位的二进制代码, 将它表示为一个 k-1阶的多项式 Mx 0 1 1 2 2k 1 1k .DxDxDxDD kk 1-1 多项式1-1中的系数 D 取值为 0 或 1,与被校验的数据 M 一一对应,式中的 x 是一个伪变量,用 i x 指明各位的位置。 设校验码 p 的长度为 r,将被校验数据 D 左移 r 位后的结果为 位r DxDxDxD kk 0000 0 1 1 2 2k 1 1k 将 D 左移 r 位的目的是给 D 右边添 r 个 0,形成kr位长度的二进制代码,其 多项式形式为 r xxM。 如图 4.1 所示, CRC 码由 K 位数据 D 和 r 位校验码 P 组成, 求校验码 P 的多项式 Rx的方法如下 xG xR xQ xG xxM 1-2 Qx是商,Rx是余数,Rx所对应的二进制代码是校验码 P。可以证明存在一 个最高次幂为 n-kr 的多项式 Gx,即式1-2中 Gx成为生成多项式。 由式(1-2)可以推出 xM xG xRxxM 4.2 CRC 编码原理 3 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 CRC 编码是基于模 2 乘除法和减法来实现编码过程的。 模 2 加减运算就是按位 加减运算,即不带进位和借位的二进制加法和减法运算。模 2 加与模 2 减的结果相 同。运算规则如下 000,011,101,110 模 2 乘运算按模 2 加求部分积之和,无进位。 模 2 除运算即按模 2 减求部分余数,不借位。其上商原则是 1)部分余数首位为 1 时,商为 1,减除数。 2)部分余数首位为 0 时,商为 0,减 0。 3)当部分余数的位数小于除数的位数时,该余数为最后余数。 4.3 生成多项式选择 (1)生成多项式的最高位和最低位必须是 1。 (2)当被传送信息CRC 码任何一位发生错误时,被生成多项式进行模 2 后余 数应不为 0。 (3)不同位发生的错误,余数不同。 (4)对余数继续做模 2 除,应使余数循环。 5 方案设计 5.1 (7,4)CRC 编码 (7,4)CRC 编码可实现 16 位有效数据的编码。电路输入 4 位将要进行 CRC 编码的 01 串,通过时钟时序控制下在一个周期内完成 4 位数据的 CRC 编码,输出 7 位编码后的数据。根据上述实验原理,4 位有效数据,所以其生成多项式为 4 位, 所以只需要第一次将原数据与生成多项式异或得到余数,然后再根据余数的高位判 断是否为 0 来计算下一个余数,如果高位为 0,则只需要将该余数左移 1 位,然后 直接将数据通过二路选择器作为下一次的余数;如果高位为 1,则需要再次将左移 的数与生成多项式异或得到余数作为下一次的余数。因为编码的结果为 7 位,也就 是相当于在有效数据后面补 3 个 0 然后除以生成多项式,需要完整的运算 4 次才能 4 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 得到结果,所以在经过 4 次之后,才能得到最终的编码结果。并且在编码结束之后 自动停止电路。 时钟控制部分,因为要经过 4 次之后才完成整个运算,而且原始的有效数据只 用一次,所以在这个里面,我设计了 D 触发器来解决有效数据只进行刚开始的运算 这么一个功能,刚开始使能端为 0,所以二路选择端选择的是原始数据,后来 D 触 发器的使能端打开,而且设置 D 为 1,这时候就可以保证以后都是选择 1,也就是 经过移位后的数据,最后通过或门与计数器的进位来达到当计数为 3 进位时,时钟 保持高电平,也就是寄存器不再工作,这样就达到了锁存的目的。 5.1.1 (7,4)CRC 编码电路图 图 5.1.1 5.2 (21,6)CRC 编码 5 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 (21, 6) CRC 编码可实现 16 位有效数据的编码。 电路输入 16 位将要进行 CRC 编码的 01 串, 通过时钟时序控制下在一个周期内完成 16 位数据的 CRC 编码, 输出 21 位编码后的数据。16 位的编码与 4 位的编码难点在于有 16 位数据,所以每次要 通过移位计数器来进行逻辑右移, 还有每次如果得到异或后余数的高 2 位为 0 的话, 就需要把余数接上原始数据的后一位, 然后与 000000 进行异或, 得到下一次的余数, 如果结果为 1 的话, 需要将移位后的余数与生成多项式进行异或得到下一次的余数, 而且还有和第一个一样的问题,就是前 6 个必须全部用原始数据的高 6 位进行异或 运算得到余数后, 再判断下一次是和 000000 还是和生成多项式进行异或, 所以在这 里就设计了两个二路选择器,一个用来由 D 触发器控制只使初始数据进去,一个是 控制哪一个余数作为下一轮的余数。 然后通过时钟驱动, 在进行 16 次完整的周期之 后,也就得到了最后编码的结果。并且在编码结束之后自动停止电路。 5.2.1 (21,6)CRC 编码电路 图 5.2.1 6 过程与调试 6.1 实验实现步骤 6 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 1、 实验之前实现在草稿纸上写好整体实现的方法、 步骤和所需要用到的模块以 及大概连接的思路。在草稿纸上预先画出电路的示意图,便于实验操作的快速、准 确进行。 2、按照设计连接电路图,注意各模块连接的引脚是否正确相连,导线是否发生 交叉断路现象。 可以从 Logisim 软件的自动检测中可以很好地了解电路的连接情况。 若所有模块连接完成后,电路中出现红色、黄色或者灰色的导线,说明电路的连接 出现了问题。针对颜色异常的导线两段进行仔细地检查。修改电路直到不再出现异 常颜色导线。 3、利用测试数据进行测试,查看结果是否和预期一样,以判断电路图是否链接 正确,功能是否能准确实现。 6.2 实验测试用例 项目测试通过输入以下 4 组 4 位数据,4 组 16 位数据,分别记录电路输出值。 并在草稿纸上手算理想 CRC 编码结果进行比较。 生成多项式选取1011 表 6.1 CRC 编码用例及结果 输入待编码电路输出编码结果理论结果 1100010001011000101 2110011000101100010 3010101011000101100 4101010100111010011 生成多项式选取100011 表 6. 2 CRC 编码用例及结果 输入待编码电路输出编码结果理论结果 11010101111010100101010111101010000010101010111101010000010 200110101110101000011010111010100 001000011010111010100 00100 300101001010101000010100101010100 010000010100101010100 01000 401010010101001010101001010100101 111010101001010100101 11101 7 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 6.3 结果与分析 6.3.1 测试结果 利用测试用例进行测试,得到的结果均和预期保持一致,现将其中的两组结果 截图如下 (7,4)CRC 编码 图 6.3.1 (21,6)CRC 编码 图 6.3.2 6.3.2 结果分析 在电路中由于进行了计数器锁定,所以在最后运算完成之后,编码的结果将不 会再因为时钟的驱动产生变化,即得到最终的编码结果。 6.4 故障与调试 6.4.1 故障 1 在进行 4 位和 16 位 CRC 编码的时候,都需要刚开始直接输入一组数据,然后 8 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 直接每次逻辑移动一位,但这样的电路如何实现,并没有想到一个很好的办法,然 后就联想到在做组原的实验的时候用过的二路选择器,所以就考虑到用二路选择器 来在输入 0 的端口接上原始输入的数据,然后接下来只要保证控制端始终为高电位 就可以使得再输入的数据就不再是这个初始数据,所以就很容易联想到了在学习数 字逻辑的时候学到的 D 触发器,其输出状态和 D 的状态保持一致,所以,刚好在刚 开始输入原始数据的时候,让使能端为 0,这时候就是低电位,在其他的情况下, 就都是高电位了。就可以解决这个问题。 6.4.2 故障 2 在 16 位编码的时候,遇到了最后的余数到底是生成多项式与原始数据异或而 来,还是 000000 和原始数据异或而来的问题,这就取决于上一组余数的高 2 位是 0 还是 1,如果为 1,则是第一种,反之为第二种,这样就想到了继续用二路选择器来 选择哪一个作为下一个余数,而用该组余数的高 2 位作为控制端。 7 总结与心得 7.1 实验总结 本次实验主要作了如下几点工作 1) 熟悉使用了 logisim 隧道、寄存器、分离器、时钟、计数器、数据选择器 和移位寄存器,D 触发器等部件。 2) 利用异或门和二路选择器来实现取余功能 3) 设置生成多项式 Gx1011,Gx10010,作为项目测试用例, 分别选用 4 组 有代表性的数据进行了 CRC 编码电路测试,所得到的测试结果与理论结 果一致,所以在一定程度上认为电路是正确的。 4) 利用通道,把输入数据,生成多项式,编码结果放到一起,便于观察。 7.2 实验心得 9 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 对于本次实验的实验环境来说,熟悉 Logisim 里面的各种器件,比如移位寄存 器, 多路选择器,还有以前学过的 D 触发器,对于实验的最终完成有很大的好处, 当你知道要实现什么功能之后, 知道去从原件库里面拖出来, 然后设置好各种参数, 直接使用即可。 对于实验来说,明确实验要完成的功能,然后首先在草稿纸上写出表达式,分 析电路的时序控制,然后构思用什么器件,如何实现,这样对于最后实验的最终完 成有很大的好处,刚开始就是有一些问题并没有考虑清楚,所以直接画电路,导致 出现了一些问题,结果不正确的时候不知道哪里出现了问题,最后将整个实验的思 路再理一遍,也再次明确了实验的原理之后,最后耐心的修改,最终才得到正确的 结果。 最后就是在试验过程中出现了问题,一定要静下心来思考,完整的考虑到这种 可能出现的问题,然后加以解决。 8 参考文献 1 秦磊华, 王小兰. 计算机组成原理实验指导及课程设计指导书基于 EDA 平台. 武汉华中科技大学出版社,2010 年. 2 秦磊华,吴非,莫正坤.计算机组成原理. 北京清华大学出版社,2011 年. 3 DAVID A.PATTERSON美.计算机组成与设计硬件/软件接口原书第 3 版.北 京机械工业出版社. 2007 年. 4 袁春风编著. 计算机组成与系统结构. 北京清华大学出版社,2011 年. 1 华 中 科 技 大 学 课 程 实 验 报 告华 中 科 技 大 学 课 程 实 验 报 告 一、原创性声明 本人郑重声明本实验的实验报告内容,是由作者本人独立完成的。有关观点、方 法、数据和文献等的引用已在文中指出。除文中已注明引用的内容外,本报告不包含 任何其他个人或集体已经公开发表的作品成果,不存在抄袭行为。 特此声明 作者签字作者签字 二、对实验的学术评语 三、对实验的评分 评分项目 (分值) 报告撰写 (30 分) 实验过程 (70 分) 最终评定 (100 分) 得分 指导教师签字指导教师签字年月日年月日

    展开全文
  • 按照生成多项式完成crc-16的编码,matlab、simulation
  • 实验九基于CRC编码的检错程序的实现.doc云南大学软件学院实 验 报 告课程 计算机网络原理实验 任课教师 刘春花,刘宇 姓名 学号 专业 成绩 实验九、链路层实验基于 CRC 编码的检错程序的实现实验报告一、实验目的1、...

    实验九基于CRC编码的检错程序的实现.doc

    云南大学软件学院实 验 报 告课程 计算机网络原理实验 任课教师 刘春花,刘宇 姓名 学号 专业 成绩 实验九、链路层实验基于 CRC 编码的检错程序的实现实验报告一、实验目的1、通过实验,掌握 CRC 编码和解码的原理。2、掌握基于 CRC 编码的差错检测技术。二、实验指导现在计算机网络广泛采用的差错检测技术是基于 CRC(cyclic redundancy check)循环冗余检测编码,CRC 也称为多项式编码(polynomial code) ,CRC算法非常容易用硬件实现。CRC 编码操作如下对给定的数据 D,发送者选择 r 个附加位,追加到 D 的末尾,形成 dr 位的新位型,该位型正好能被 G 模 2 除尽。其中,G 称为生成器。CRC 编码算法实现1、选择生成多项式 G,其最高次方为 r,即 r1 位的二进制位串2、计算 D2r, 即在数据 D 后面补 r 个 0,构成 dr 位的位串3、按模 2 除法求(D2 r/G)的余数 R,即4、从 D2r中模 2 减去 R,得到新的数据 T,即加了 CRC 的帧三、实验要求 1、设置一个 d 位的数据 D,r1 位的多项式 G,生成 CRC 码,并把此 CRC 码作为数据帧进行传送。2、编写两个子程序,分别实现 CRC 编码和 CRC 解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。3、要求分别以正确和错误的数据来检验此检错程序。4、将编写程序的源代码加必要注释和程序运行结果一起填入实验报告中。提示1、编写程序时数据直接用二进制数,可能用到位操作符异或和include void crcint A,int G, int x,int n编码程序int i,j,k;printf“ntt“;for k0;kx-1;kprintf“ d“,Ak; 输出补后的数for i0;ix-n1;iif Ai1 当首位为时进行异或for j0;jn-1;jif AijGjAij0; 异或运算,相同为,不同为else Aij1;printf“ntt“; 输出每次异或后的结果for k0;kx-1;kprintf“ d“,Ak; 输出余数void crlint M,int A,int m,int n检验解码程序int k0,i;fori0;im-1;iifMiAiprintf“nnt 第d 位出现错误n“,i1;k;ifk0printf“nnt 数据完全正确n“;void main int m,n;int A20,M20,G20,i,j;printf“ntn“;printf“nnt 请输入生成器的长度 m“;scanf“d“,printf“nnt 请输入原始数据的长度 n“;scanf“d“,printf“nnt 请输入生成器“;for i0;im-1;iscanf“d“,printf“nnt 请输入原始数据“;for j0;jn-1;jscanf“d“,for i0;im-1;iAiMi;for im;imn-2;iAi0; 对被除数进行补crcA,G,mn-1,n; 调用异或函数for i0;im-1;iAiAiMi;printf “nnt 结果为“;for i0;imn-2;iprintf “d“,Ai;int a;printf“nnt 是否继续 1/21 代表 yes,2 代表 no “;printf“ntn“;scanf“d“,getchar;ifa1 继续system“cls“;printf“ntn“;printf“nnt 请输入需要解码的数据“;for i0;im-1;iscanf“d“,crlM,A,m,n;printf“ntn“;elsesystem“cls“;printf“ntn“;printf“ntt*按任意键退出n“;printf“ntn“;getchar;exit0;

    展开全文
  • Java实现CRC编码

    千次阅读 2020-01-15 10:54:46
    一、CRC编码简介 CRC 的英文全称为 Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。 二、...
  • CRC编码详解

    千次阅读 2019-03-12 23:34:22
    2.18已知数据位D4D3D2D1=1001,生成多项式G=1101,求CRC编码。 结题步骤: 发送方: D:1001 d=4 G:1101 r=3(4-1) @1. 将D左移r位-&gt;D1:1001000(d+r位) @2. D1模2除G得到余数 R点这里查看运算 @3. CRC=...
  • 基于Matlab的GUI的CRC编码译码和海明编码译码 含GUI界面,CRC编码程序和译码程序,海明编码和译码程序
  • 我搜了两天才从网站上收集的crc校验相关的资料。现在打包拿出来分享,希望对需要的人有点帮助。
  • CAN协议中CRC编码的硬件实现、电子技术,开发板制作交流
  • crc编码代码matlab PolarCode-3GPP-MEX 这段代码是用C编程语言实现的,然后将其转换为由matlab脚本调用的mex函数。 Polar编码器和Polad解码器功能遵循3GPP最新TSG版本“ 3GPP TS 38.212 V15.3.0(2018-09),复用和...
  • 设原报文码为:1000100101,指定进行检验的多项式为:![图片说明](https://img-ask.csdn.net/upload/201910/11/1570760182_314336.png) 计算待传的报文编码
  • crc编码代码matlab EE290C蓝牙低功耗基带 本文档适用于EE290C @加州大学伯克利分校2018年秋季学期的蓝牙低功耗(BLE)基带小组工作。 课程说明 由Borivoje Nikolic教授教授的2018年秋季EE290C提供电路设计的高级主题...
  • CRC编码流水传输实验的实验要求同海明编码流水实验要求是相同的 因此其解题思路也是相同的,电路设计在这里也是相同的,因此就不给出解题思路了(可到海明编码流水的那篇文章看)。 1.电路设计: 2.通过测试
  • .m 中的代码以通过多项式和通用数据生成废物
  • CRC编码生成多项式对应的代码

    千次阅读 多人点赞 2019-03-21 11:21:38
    如题:代码10110011 对应的多项式为 X7+X5+X4+X+1; 解题思路: 1就是有,0就是没有。倒着开始看从1到x的n次方。比如x2+x,没有1,那么代码就是110;再比如x3+1,没有x2和x,即1001。 找了很多资料都没说到点上, ...
  • 目的研究CRC编码中模2除法运算的规则,解决CRC编解码过程中的延时问题。方法对CRC编码中模2除法进行变换,得出一种无延时、简单、实用的编码算法。结果采用Verilog语言设计一个经过验证的16位无延时的cRc一16软核。...
  • crc编码代码matlab 劳拉 LoRaPHY是物理层的完整MATLAB实现,包括基带调制,基带解调,编码和解码。 LoRaPHY被组织为单个文件LoRaPHY.m以易于使用(将其复制并在任何地方运行)。 可以通过访问基于GNU Radio的实时SDR...
  • crc编码

    2011-11-13 01:52:50
    crc...........................................
  • 该函数返回CRC编码的数据,该数据是输入数据的副本,其中附加了CRC奇偶校验位。有关相关多项式的详细信息,请参见TS 38.212第5.1节[1] (2)blkcrc = nrCRCEncode(blk,poly,mask) blkcrc = nrCRCEncode(blk,poly,...
  • FPGA实现CRC编码

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,896
精华内容 11,158
关键字:

crc编码