16位的奇偶校验器设计
- 格式:doc
- 大小:48.50 KB
- 文档页数:5
实验一汉字编码与校验设计实验一、实验目的本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换电路,能批量获取汉字机内码并用点阵形式进行显示。
通过设计16 位数据的海明编解码电路,16 位数据的CRC 并行编解码电路,帮助同学们理解校验码传输过程。
通过校验码流水传输实验帮助大家提前建立流水线的基本概念二、实验原理、内容与步骤实验原理、实验内容参考:1、汉字编码原理1)机内码与区位码区位码转换为十六进制+2020H得到国标码,国标码+8080H得到机内码。
区位码(十六进制)+A0A0H=机内码机内码-A0A0H=区位码(十六进制)2)存储器数据编辑使用实验里附带的十六进制编辑器,在使用ASCII码保存的记事本编辑,记得得到。
2、汉字编码电路设计国标转区位码汉字显示3、海明编码原理与设计1)编码原理若有效消息b1b2b3b4=1011,则先将它分别填入第3,5,6,7位,再分组进行奇偶统计,分别填入校验位P1,P2,P3的值。
这里分组采用偶校验,因此,要保证3组校验位的取值都满足偶校验规则。
各校验码的取值如下:P1=H3⊕H5⊕H7=b1⊕b2⊕b4=1⊕0⊕1=0P2=H3⊕H6⊕H7=b1⊕b3⊕b4=1⊕1⊕1=1P3=H5⊕H6⊕H7=b2⊕b3⊕b4=0⊕1⊕1=0这样就得到了海明码2)分组原理在海明码H1~Hn中,位号数(1,2,3,。
,n)为2的权值的那些位,即1(20),2,4,。
,2r-1位,作为奇偶校验码,并记作P1,P2,P3,。
,P r,余下各位则为有效信息位。
与N=11,k=7,r=4相应海明码可示意为位号 1 2 3 4 5 6 7 8 9 10 11P i占位P1P2 b1 P3 b2 b3 b4 P4 b5 b6 b7其中,b i均为有效信息。
3)校验位逻辑与电路设计海明编码4、海明解码原理与设计1)检错码原理与作用海明编码在解码过程中,被分作3组校验,每组可产生一个检错消息,3组共3个检错消息便可构成一个指错字,由G3 G2 G1组成,其中G3=P3⊕b2⊕b3⊕b4,G2=P2⊕b1⊕b3⊕b4,G1=P3⊕b1⊕b2⊕b4,3个指错字共表示8种状态,在没有出错的情况下,G3 G2 G1=000.由于在分组时就确定了每组校验位参与校验的组别,所以,指错字能准别地知错错误所在位2)错误逻辑原理与设计当目的部件接收到一-组海明码后,送人电路进行分组并检测,得到检错字信息G,G2G,这组信息通过译码电路译码,给出出错(或无错)的信号,这个信号就是纠错的依据。
实验二奇偶检验器
一、实验目的
参照实验原理中介绍的例子,用loop语句设计并实现一个8位代码奇偶校验器。
二、实验原理
奇偶校验代码是在计算机中常用的一种可靠性代码。
它由信息码和一位附加位——奇偶校验位组成。
这位校验位的取值(0或1)将使整个代码串中的1 的个数为奇数个(奇校验代码)或为偶数(偶校验代码)。
奇偶校验位发生器就是根据输入信息码产生相应的校验位。
下图是8421码奇偶校验位发生器电路,它是基于“异或”门的“相同得0、相异得1”的原理设计的。
三、实验连线
D对应SW1—SW8
P、NP分别对应IO9、IO10 (IO9、IO10用导线连接L1、L2)
功能选择位M[3..0]状态为0001,即16位拨码SW1—SW16被选中输出到总线D[15..0] 改变拨码开关的状态,观察实验结果。
四、实验代码。
五、实验记录
记录实验结果,参照表21-1将实验结果制表,得到8位代码奇偶校验的真值表。
16位循环冗余校验码_CRC_的原理和性能分析16位循环冗余校验码(CRC)是一种广泛应用于数据传输中的错误检测码。
它通过使用除法运算和异或运算来生成一个冗余校验码,并将其附加到数据上。
接收方在接收到数据后,通过同样的计算方式对数据进行校验,然后与接收到的校验码进行比较,从而判断数据是否存在错误。
CRC的原理如下:1.选择一个特定的多项式作为生成器多项式G(x),通常以二进制方式表示。
2.将数据D(x)乘以x的n次方,其中n为生成器多项式的次数。
3.将上述结果除以生成器多项式G(x),并将余数作为冗余校验码。
具体的计算过程如下:1.将生成器多项式转换为二进制数,作为一个校验位模型。
2.将数据与n个0相接,使其长度与生成器多项式的次数一致。
3.将上述结果除以生成器多项式,并将余数作为冗余校验码。
性能分析:1.理论上,CRC能够探测所有偶数个错误位和绝大多数奇数个错误位。
但由于CRC运算时使用的是模2除法,因此会漏掉部分奇数个错误位。
2.CRC的检错性能与生成器多项式的选择相关。
选择一个好的生成器多项式很重要,能够提高CRC的检错能力。
3.16位的CRC校验码相对于32位或更多位的CRC校验码来说,冲突概率较高。
这意味着可能存在不同的数据产生相同的校验码。
因此,在应用中,需要根据实际情况选择合适的CRC位数。
总结:16位循环冗余校验码通过除法运算和异或运算生成一个冗余校验码,用于检测数据传输中的错误。
它的性能取决于生成器多项式的选择,能够探测大部分的错误位。
然而,由于CRC采用模2除法,可能会漏掉部分奇数个错误位。
在应用中,需要根据实际情况选择合适的CRC位数。
奇偶校验电路设计一、实验目的1.熟悉QuartusII的使用;2. 学习在QuartusII中;3. 学习原理图方式自定义元件的输入,封装,调用;4. 掌握奇偶校验原理;5. 学会使用现成的芯片搭建目标电路。
二、实验内容和原理实验内容:(1)在QuartusII环境下以原理图方式建立顶层文件工程。
利用多个74386芯片搭建一个奇偶校验电路。
74386提供四个2输入异或门(2)建立仿真文件,观察输出结果。
实验原理:奇偶校验码是最简单的数据校验码,其码距为2,可以检测出一位错误,但无法指出错误的位置。
具体校验实现方法为将有效信息位和校验位读入,判断其1的个数是奇数个还是偶数个,在奇校验的情况下正常情况下个数应该为奇数个,偶校验正常情况下应该是偶数个。
校验码的生成:对于奇校验,判断有效信息位1的个数,若为偶数则校验位为1,奇数则校验位为0;偶校验反之。
具体实现的逻辑表达式如下:三、 实验设计原理图以及综合结果记录逻辑单元<Le>的消耗情况等。
原理图如下: 76543210校奇形成偶校验出错奇校验出错偶形成A B =1=1=1=1=1=1=1=111经过设计后用74386实现的原理图如下:综合结果如下图所示:四、仿真波形图画出波形图以及波形图中仿真信号的说明。
并分析结果(实验现象结论)。
仿真波形图如下所示:其中,D0-7为信息位,Djiao为校验位。
实验结果如下:说明:波形信息位为奇数个1,校验位为0时,输出的奇校验位为0,偶校验位为1,奇校验错误为0,偶校验错误为1(即有错)。
同理其他测试分别测试了信息位为奇数个1,校验位为1、信息位为偶数个1,校验位为1、信息位为偶数个1,校验位为0的情况,图中波形的测试完全符合预期要求。
五、实验中遇到的问题和解决方法。
在实验中遇到的主要问题:(1)操作不熟悉导找不到部分功能元件(2)由于连线有误,在仿真时结果出现错误。
解决方法:(1)寻找芯片时双击面板在搜索的框内打入全名(打入部分名字不显示)(2)仿真结果与预期不一致时,可以分析错误波形,从而准确找到出错的地方。
一、实验目的1. 理解奇偶校验的基本原理及作用。
2. 掌握奇偶校验的实现方法。
3. 学会使用Verilog语言设计奇偶校验电路。
4. 通过仿真验证奇偶校验电路的正确性。
二、实验原理奇偶校验是一种简单的错误检测码,用于检测数据在传输过程中是否发生错误。
其基本原理是在数据末尾添加一个校验位,使得数据位和校验位中1的个数为奇数或偶数。
如果接收方收到的数据位和校验位中1的个数不是奇偶性相同,则说明传输的数据出现了错误。
奇偶校验分为奇校验和偶校验两种:1. 奇校验:数据位和校验位中1的个数为奇数。
2. 偶校验:数据位和校验位中1的个数为偶数。
三、实验环境1. FPGA开发板:如Xilinx、Altera等。
2. Verilog开发工具:如Vivado、Quartus等。
3. 仿真工具:如ModelSim等。
四、实验步骤1. 设计奇偶校验电路(1)根据实验要求,设计一个同步时序电路,对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。
(2)定义输入信号和输出信号:- 输入信号:serial_in(串行输入)- 输出信号:parity_out(奇偶校验输出)(3)编写Verilog代码实现奇偶校验电路:```verilogmodule parity_checker(input wire [4:0] serial_in,output reg parity_out);always @(posedge serial_in[0]) beginif (serial_in == 5'b11111) beginparity_out = 1'b1; // 5位输入中1的数目为奇数,输出1end else beginparity_out = 1'b0; // 5位输入中1的数目为偶数,输出0endendendmodule```2. 仿真验证(1)使用ModelSim进行仿真,验证奇偶校验电路的正确性。
竭诚为您提供优质文档/双击可除奇偶校验实验报告篇一:奇偶校验实验项目四:数据的校验(2学时)一、实验目的:1.了解数据的校验机制。
*2.掌握海明码校验实施过程(选做)。
*3.掌握循环冗余码校验实施过程(选做)。
二、实验要求:1.设计一个程序模拟奇偶校验实施过程(提示:主函数、发送函数、传输函数、校验函数)。
首先奇偶校验过程的基本过程:奇偶校验位有两种类型:偶校验位与奇校验位。
如果一组给定数据位中1的个数是奇数,那么偶校验位就置为1,从而使得总的1的个数是偶数。
如果给定一组数据位中1的个数是偶数,那么奇校验位就置为1,使得总的1的个数是奇数。
偶校验实际上是循环冗余校验的一个特例,通过多项式x+1得到1位cRc。
*2.设计一个程序模拟海明码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。
*3.设计一个程序模拟循环冗余码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。
三、实验报告:1.给出源程序和执行结果。
#include#include#includevoidproduct();voidtrans();voidpop();intp1,p2;inta[8]={0};intmain(){product();//产生一个随机的八位二进制的数trans();//设置传输出错一位或者没有出错的情况pop();//判断有无出错的情况return0;}voidproduct(){inti,data;intcount1=0;srand((unsigned)time(0));data =0+rand()%128;//产生0-127的随机数printf("随机的产生一个128以内的十进制数为%d\n",data);for(i=0;iif(count1%2==0)//奇校验奇数个1校验位为0,偶数个1为1a[7]=1;}for(i=0;i elsea[7]=0;p1=a[7];printf("初始二进制校验位放在最高位它为:%d\n",p1);printf("产生随机二进制数为");/*while(i>=0)printf("%d",a[--i]);*/for(i=7;i>=0;--i){printf("%d",a[i]);}printf("\n");}voidtrans(){inti;srand((unsigned)time(0));i=0+rand()%9;//产生0-8的随机数if(i==0)printf("机器内部设置传输过程中没有出错\n");else{a[i-1]=(a[i-1]==0)?1:0;printf("传输过程将机器内部的数据进行了一位改动,改动位为%d\n",i);}voidpop(){printf("接收数据计算出的校验位为:%d\n",p2);if(p2!=a[7])printf("通过校验位p1与p2的比较得出传输过程中数据出错了。
奇偶校验发生器/检测器奇偶校验发生器/检测器是用来检查数据传输和存取过程中是否产生错误的组合逻辑电路。
奇偶校验发生器/检测器是同一个逻辑器件:当作为奇偶校验发生器使用时,它可产生奇偶校验位,与数据一起传输或保存;当作为奇偶校验检测器使用时,它可以检验所接受数据的正确性。
⑴奇偶校验发生器①工作原理被校验的数据和1位校验位组成校验码。
以 8421 码为例, 当采用奇校验时,被校验的数据和校验位满足奇数个 1 ,组成 5 位奇校验码奇校验位逻辑值的表达式当采用偶校验时,被校验的数据和校验位满足偶数个 1,组成 5位偶校验码偶校验位逻辑值的表达式②电路实现由以上两个表达式看出:电路采用异或门实现,非常简单;奇校验位逻辑值电路是在偶校验位逻辑值电路输出端加非门实现。
⑵奇偶校验检测器①工作原理校验码被送到检测电路,该电路能够检测奇偶错。
工作原理是校验码送到检测电路,发生一位错或奇数位错时,输出为 1,否则为 0.②电路实现和发生器电路相同,只不过增加了 1 个输入端。
实际应用中,发生器电路和检测器电路是同一电路,作在一个 IC 片上。
逻辑表达式Jqi 是奇检测输出当Jqi = 0 时,校验码无错,允许输出;当Jqi=1时,校验码有错,禁止输出。
逻辑表达式Jou 是偶检测输出当Jou = 0 时,校验码无错,允许输出;当Jou = 1 时,校验码有错,禁止输出。
⑶奇偶校验实际应用意义①能够检测一位错或奇数位错,但不能确定错误位置,因此,不能纠错;②由逻辑表达式看出,电路不能检测偶数位错,当发生偶数位错时,电路显示正确;③数据在存储或传送过程中,发生一位错误的可能性占96%以上;④电路简单,容易实现,且有实际应用意义。
课程设计报告
学生姓名学号
班级电子信息工程
院系信院电子系
题目16位的奇偶校验器设计
指导教师
2012 年 5 月
题目一:设计一个16位的奇偶校验器,并仿真验证其功能。
(1班1组)
(要求:输入一个16位的矢量数值,统计矢量中“1”的个数;并判断16位数中1的个数的奇偶性)
1、设计思路
2、VHDL程序(或原理图)
3、仿真波形(图片)
4、程序分析
1,设计思路如下:
可以使用FOR_LOOP语句,语法格式如下:
[LOOP标号: ] FOR 循环变量,IN 循环次数范围LOOP
顺序语句
END LOOP [LOOP标号];
FOR后的“循环变量”是一个临时变量,属LOOP语句的局部变量,不必事先定义。
“循环次数范围”规定LOOP语句中的顺序语句被执行的次数。
循环变量从循环次数数范围的初值开始,每执行完一次顺序语句后递增1,直至达到循环次数范围指定的最大值。
其中定义输入端口十六位的数据总线为a, 输出端口y将其奇偶校验的结果输出, 输出端c统计1 的个数
2,VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY parity_check IS
PORT (a:IN STD_LOGIC_VECTOR (15 DOWNTO 0); y:OUT STD_LOGIC;
c:out integer range 0 to 16);
END parity_check;
ARCHITECTURE arch OF parity_check IS
BEGIN
PROCESS(a)
V ARIABLE temp:STD_LOGIC;
V ARIABLE m: INTEGER RANGE 0 TO 16; BEGIN
temp:='0';
m:=0; --偶校验初始值设为0,奇校验初始值设为1 FOR i IN 0 TO 15 LOOP
temp:=temp XOR a(i);
IF (a(i)='1') THEN m:=m+1;
END IF;
END LOOP;
y<=temp;
c<=m;
END PROCESS;
END arch;
原理图如下:
3,仿真波形如下:
程序分析
实体:
实体名parity_check
输入端口十六位的数据总线a:IN STD_LOGIC_VECTOR (15 DOWNTO 0)
输出端口y:OUT STD_LOGIC;将其奇偶校验的结果输出
若为奇数个1 输出为高电平;若为偶数个1输出为低电平
输出端c:out integer range 0 to 16)统计1 的个数
结构体:
结构体名arch
在进程PROCESS(a)中定义变量
V ARIABLE temp:STD_LOGIC;
V ARIABLE m: INTEGER RANGE 0 TO 16; 并进行变量的赋值
temp:='0';
m:=0;
loop循环
FOR i IN 0 TO 15 LOOP
temp:=temp XOR a(i);
IF (a(i)='1') THEN m:=m+1;
END IF;
END LOOP;
Temp与a(i)异或将其结果赋给temp
If语句
若a(i)为1 m加1计数
将其m的计数结果赋给c c 即为a中1 的个数。