HDLBits (38) — 归约运算符
2022-02-13 01:23 作者:僚机Wingplane | 我要投稿
本题链接:
https://hdlbits.01xz.net/wiki/Reduction
您已经熟悉了两个值之间的按位操作,(例如:a & b or a ^ b)。有时,你想创建一个有一定位宽的门电路,这个门电路对一个向量的所有位都起作用,像(a[0] & a[1] & a[2] & a[3] ... ),如果数据很长,这会变得繁琐。
归约运算符可以对一个向量中的位执行 AND、 OR 和 XOR操作,从而产生一个位的输出:
上面这些是只有一个操作数的一元运算符(类似于 NOT 运算符!和 ~)。还可以将这些输出反转以创建 NAND、 NOR 和 XNOR 门,例如(~& d[7:0])。
现在可以重新构建 4-input gates 和100-input gates。

题目
在通过不稳定信道传输数据时,奇偶校验通常被用作一种检测错误的简单方法。创建一个电路,用来计算一个8位字节的奇偶校验位(这将在字节中添加第9位)。我们将使用“偶数”奇偶校验,其中奇偶校验位只是所有8个数据位的异或。
预期解决方案长度:大约1行。

答案

归约操作符包括:归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。
归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。
逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。
参考资料:
2.4 Verilog 表达式 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-expression.html