题目:
You’re already familiar with bitwise operations between two values, e.g., a & b or a ^ b. Sometimes, you want to create a wide gate that operates on all of the bits of one vector, like (a[0] & a[1] & a[2] & a[3] … ), which gets tedious if the vector is long.
The reduction operators can do AND, OR, and XOR of the bits of a vector, producing one bit of output:
& 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]
These are unary operators that have only one operand (similar to the NOT operators ! and ~). You can also invert the outputs of these to create NAND, NOR, and XNOR gates, e.g., (~& d[7:0]).
解题:
module top_module (input [7:0] in,output parity); assign parity=^in[7:0];
endmodule
结果正确:
注意点:
约简运算符可以对向量的位执行 AND、OR 和 XOR,从而产生一位输出:
& 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])。
运算操作符:各种逻辑操作符、移位操作符、算术操作符大多是可综合的 、算术操作符大多是可综合的。
+// 加
-// 减
! // 逻辑非
~ // 取反
& // 与 11
~& // 与非
| // 或
~| // 或非
^ // 异或
^~ // 同或
~^ // 同或
*// 乘,是否可综合看综合工具
/ // 除,是否可综合看综合工具
% // 取模
<< // 逻辑左移
等等