运算符是代表特定数学或逻辑动作或过程的字符。
序号 | 运算符 |
---|---|
1. | 算术运算符 |
2. | 关系运算符 |
3. | 相等运算符 |
4. | 逻辑运算符 |
5. | 按位运算符 |
6. | 移位运算符 |
7. | 条件运算符 |
8. | 约简运算符 |
9. | 连接和复制运算符 |
1. 算术运算符#
我们使用算术运算符对变量执行基本数学函数。这些运算符应该已经很熟悉,因为它们大多是常见数学符号的复制。
下表显示了 SystemVerilog 中算术运算符的完整列表。
2. 关系运算符#
运算符 | 描述 |
---|---|
a < b | a 小于 b |
a > b | a 大于 b |
a <= b | a 小于 或等于 b |
a >= b | a 大于 或等于 b |
这些运算符比较操作数并产生 1 位标量布尔值。
- 0:如果关系为 false
- 1:如果关系为 true
- x:如果任何操作数具有未知的 x 位
3. 相等运算符#
相等运算符用于比较表达式。如果比较失败,则结果为 0,否则为 1。 等式运算符有两种类型。
运算符 | 描述 |
---|---|
a === b | a 相等于 b, 包括 x 和 z |
a !== b | a 不相等于 b, 包括 x 和 z |
a == b | a 相等于 b, 结果可能是 unknown |
a != b | a 不相等于 b, 结果可能是 unknown |
如果逻辑相等 (==) 或逻辑不等 (!=) 的两个操作数都包含未知 (x) 或高阻抗 (z) 值,则比较结果将为未知 (x)。否则,要么是真,要么是假。
如果大小写相等(===)或大小写不等(!==)的操作数包含未知(x)或高阻(z)值,则将逐位计算结果。
4. 逻辑操作符#
逻辑运算符与按位运算符类似 在逻辑运算符中,这些表达式返回 1(真)或 0(假)。 为了更好地理解,只有三个逻辑运算符,请遵循下面的备忘单
5. 按位运算符#
位运算符对两个操作数执行按位运算。 它们获取一个操作数中的每一位,并与另一操作数中的相应位执行操作。如果一个操作数比另一个操作数短,它将在左侧用零扩展以匹配较长操作数的长度。
Operator | Description |
---|---|
~ | negation |
& | 和 |
| | inclusive or |
^ | exclusive or |
^~ or ~^ | exclusive nor (equivalence) |
6. 移位运算符#
有 2 种类型的移位运算符
- 逻辑移位运算符
- 算术移位运算符
Operator | Description |
---|---|
« | shift left logical |
» | shift right logical |
«< | shift left arithmetic |
»> | shift right arithmetic |
移位运算符实际上需要两个参数。第一个是我们要移动的信号的名称。第二个参数是我们要移动的位数。
当我们使用逻辑移位运算符时,在信号移位所需位数后,所有空白位置都用 0 填充。
7.条件运算符#
要使用条件运算符,我们在?之前写一个逻辑表达式。然后评估该运算符以确定它是 true 还是 false。根据表达式的真假,将输出分配给两个值之一。
条件运算符的一般语法。
output = <condition> ? <true> : <false>
8.归约运算符#
归约运算符是一元的。 它们对单个操作数执行按位运算以产生单位结果。
运算符 | 描述 |
---|---|
& | and |
~& | nand |
| | or |
~| | nor |
^ | xor |
^~ or ~^ | xnor |
9.连接和复制运算符#
运算符 | 描述 |
---|---|
{ } | 连接运算符 |
{{ }} | 复制运算符 |
- 连接运算符将两个或多个信号组合成一个向量。
- 连接使用大括号字符 { 和 } 表示, 用逗号分隔其中的表达式。
- 复制运算符用于将一组位复制 n 次。