Verilog 按位或 ("|") monadic

Zhe*_* Hu 3 verilog

我见过使用按位或运算符(“|”)的 Verilog 代码。目的是什么?

例如

| address[15:14]==0
Run Code Online (Sandbox Code Playgroud)

或者

|address[15:14]? io_din : ramrd
Run Code Online (Sandbox Code Playgroud)

我们不能省略“|”吗?在这些情况下?

Mor*_*gan 8

在这种情况下,它充当归约运算符,例如:

|4'b1000 => 1'b1 (OR)
&4'b1000 => 1'b0 (AND)
^4'b1000 => 1'b1 (XOR)

|4'b0000 => 1'b0
&4'b1111 => 1'b1
^4'b1111 => 1'b0
Run Code Online (Sandbox Code Playgroud)

将整个总线 OR 到 1 位值,或对整个总线应用 AND/XOR。

这被称为“一元”运算符,因为它只接受右手参数。它们在 SystemVerilog IEEE1800-2012 的第 11.4.9 节中有介绍。