奇偶校验器

数字IC经典电路设计
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。
个人主页链接
1.数字分频器设计
2.序列检测器设计
3.序列发生器设计
4.序列模三检测器设计
5.奇偶校验器设计
6.自然二进制数与格雷码转换
一、前言
奇偶校验是一种简单、实现代价小的检错方式,常用在数据传输过程中。对于一组并行传输的数据(通常为8比特),可以计算岀它们的奇偶校验位并与其一起传输。接收端根据接收的数据重新计算其奇偶校验位并与接收的值进行比较,如果二者不匹配,那么可以确定数据传输过程中岀现了错误;如果二者匹配,可以确定传输过程中没有出错或者出现了偶数个错误(出现这种情况的概率极低)。
需要指出当出现偶数个错误时,奇偶校验是无法检测此时电路出现传输错误。例如,发送的数据为8’b1010_1011此时计算出的偶校验值是1。如果在传输中后两位从11跳变为00,那么此时接收到的数据为8’b10100100,接收的偶校验值仍然为1。对接收的数据进行偶校验计算,得到的结果仍然为1,这与收到的校验值是相同的,接收电路无法检测出接收数据中岀现的错误。
奇偶校验位有两种类型:偶校验位与奇校验位。
以偶校验位来说,如果一组给定数据位中1的个数是奇数,补一个bit为1,使得总的1的个数是偶数。例:0000001, 补一个bit为1, 00000011。
以奇校验位来说,如果给定一组数据位中1的个数是奇数,补一个bit为0,使得总的1的个数是奇数。例:0000001, 补一个bit为0, 00000010。

简单理解奇偶校验:
奇校验:原始码流+校验位 总共有奇数个1
偶校验:原始码流+校验位 总共有偶数个1
二、XOR法
2.1 XOR法
题目:采用XOR法试写一个发送端奇偶校验器,在发送端会输入一段8bit的数据,可以选择切换奇数校验或者偶数校验,并且将校验值附在末位输出。
2.2 verilog代码
//使用XOR法设计奇偶校验器
module parity_checker01(
input clk,
input rst_n,
input parity_odd, //是否为奇校验:奇数校验为1,偶数校验位0
input [7:0] data_in, //输入的八位数据
output [8:0] data_out, //输出的九位数据
output reg even_bit, //偶数校验码
output reg odd_bit //计数校验码
);
//使用按位异或确定偶数校验码和奇数校验码
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
even_bit <= 1'b0;
odd_bit <= 1'b0;
end
else begin
even_bit <= ^data_in; //偶校验条件下计算出来的校验位
odd_bit <= ~(^data_in);

文章介绍了奇偶校验的基本概念及其在数据传输中的作用,详细讲解了使用XOR法和计数器法设计奇偶校验器的Verilog代码实现,并提供了相应的Testbench和仿真结果。两种方法中,XOR法简洁,计数器法直观,均能判断数据中1的奇偶性来实现奇偶校验功能。
1万+

被折叠的 条评论
为什么被折叠?



