HDLBits 系列(6)(Reduction)缩位运算符

举报
李锐博恩 发表于 2021/07/15 03:48:29 2021/07/15
【摘要】 目录   抛砖引玉 Reduction在奇偶校验中的应用 抛砖引玉 您已经熟悉两个值之间的按位运算,例如a&b或a ^ b。 有时,如果向量很长,您想创建一个对一个向量的所有位进行操作的宽门,例如(a [0]&a [1]&a [2]&a [3] ...)。 缩位运算符可以对向量的位进行AND,OR和XOR,产生一位输出: &a [3:0] // AN...

目录

 

抛砖引玉

Reduction在奇偶校验中的应用


抛砖引玉

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

缩位运算符可以对向量的位进行AND,OR和XOR,产生一位输出:

&a [3:0] // AND:a [3]&a [2]&a [1]&a [0]。 相当于(a [3:0] == 4'hf)
| b [3:0] //或:b [3] | b [2] | b [1] | b [0]。 相当于(b [3:0]!= 4'h0)
^ c [2:0] // XOR:c [2] ^ c [1] ^ c [0]

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

上述操作中,可以用相应的其他方法来等效替代缩位运算,但是如果位数较多,你怎么做呢?可见,缩位运算符,必不可少。

例如:

Build a combinational circuit with 100 inputs, in[99:0].

There are 3 outputs:

  • out_and: output of a 100-input AND gate.
  • out_or: output of a 100-input OR gate.
  • out_xor: output of a 100-input XOR gate.

此时,用缩位运算符就比较方便:


  
  1. module top_module(
  2. input [99:0] in,
  3. output out_and,
  4. output out_or,
  5. output out_xor
  6. );
  7. assign out_and = ∈
  8. assign out_or = |in;
  9. assign out_xor = ^in;
  10. endmodule

代入HDLBits中验证:

Reduction在奇偶校验中的应用

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

对于偶校验来说,通过将所有校验位进行异或,如果最后结果为1,则代表传输无误,否则有误。

这是什么意思呢?

如果一个变量中有偶数位1,则所有位进行异或,肯定得到1,否则得到0;
如下进行验证:


  
  1. module top_module (
  2. input [7:0] in,
  3. output parity);
  4. assign parity = ^in;
  5. endmodule

很简单,缩位运算符很方便,如果能在该用它的地方用到它,会简化很多。


参考链接

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/103204171

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。