HDLBITS笔记12:利用异或创建奇偶校验电路(reduction operators)

您已经熟悉两个值之间的按位运算,例如,a & b 或 a ^ b。有时,你想创建一个宽门,对一个向量的所有位进行操作,比如(a[0] & a[1] & a[2] & a[3] ... ),如果向量很长,就会变得乏味。

约简运算符可以对矢量的位执行 AND、OR 和异或,从而产生一个位输出:

& a[3:0]     // AND: a[3]&a[2]&a[1]&a[0]. Equivalent to (a[3:0] == 4'hf)
| b[3:0]     // OR:  b[3]|b[2]|b[1]|b[0]. Equivalent to (b[3:0] != 4'h0)
^ c[2:0]     // XOR: c[2]^c[1]^c[0]

这些是只有一个操作数的一运算符(类似于 NOT 运算符 ! 和 ~)。您还可以反转这些门的输出以创建NAND,NOR和XNOR门,例如(~&d[7:0]))。

题目要求:

奇偶校验通常用作通过不完全通道传输数据时检测错误的简单方法。创建一个电路,该电路将计算 8 位字节的奇偶校验位(这将向字节添加第 9 位)。我们将使用"偶数"奇偶校验,其中奇偶校验位只是所有8个数据位的异或。

奇偶检验器的原理:

奇偶检验器的功能是检测数据中包含“1”的个数是奇数还是偶数。奇偶校验包含两种方式:奇检验和偶检验。奇校验保证传输数据和校验位中“1”的个数为奇数。如果数据中包含奇数个“1”,则校验位置0,如果数据中包含偶数个1,则校验位置1。偶检验保证传输数据和校验位中1的总数为偶数。如果数据中包含奇数个1,则校验位置1;如果数据中包含偶数个1,则校验位置0。

例如对8bit的奇偶校验(实际为9bit,1bit为校验位):10001101,如果采用偶检验,则偶校验位置0,对100011010取异或,得到的异或结果应当是:1。则此时的Fod=1,Fev = 0。(Fod表示偶校验,Fev表示奇校验)。

代码如下:

module top_module (
    input [7:0] in,
    output parity); 
   assign  parity = ^ in[7:0];
endmodule

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值