Verilog-A 运算符
运算符种类比 C/Perl 少,注意位运算与逻辑运算的区别。
一元运算符(优先级 1)
| 运算符 |
定义 |
操作对象 |
+ |
正数 |
integer, real |
- |
负数 |
integer, real |
! |
逻辑反(0→1,非0→0) |
integer, real |
~ |
按位取反 |
integer |
& |
按位与(归约) |
integer |
~& |
按位与非(归约) |
integer |
| |
按位或(归约) |
integer |
~| |
按位或非(归约) |
integer |
^ |
按位异或(归约) |
integer |
^~ |
按位异或非(归约) |
integer |
示例:
a = 101; !a is 0
a = 0; !a is 1
a = 101; // 0b1100101
~a = 0b0011010
二元运算符
算术(优先级 2~3)
| 运算符 |
优先级 |
定义 |
对象 |
* |
2 |
乘法 |
int, real |
/ |
2 |
除法 |
int, real |
% |
2 |
取余 |
int, real |
+ |
3 |
加法 |
int, real |
- |
3 |
减法 |
int, real |
关系(优先级 5)
< > <= >= — 返回 0 或 1
相等(优先级 6)
| 运算符 |
定义 |
| == |
等于 |
!= |
不等于 |
| === |
恒等(包含 X/Z 判断) |
!== |
恒不等(包含 X/Z 判断) |
位运算(优先级 7~9)
| 运算符 |
优先级 |
定义 |
& |
7 |
按位与 |
^ ^~ |
8 |
按位异或 / 同或 |
| |
9 |
按位或 |
逻辑运算(优先级 10~11)
| 运算符 |
优先级 |
定义 |
&& |
10 |
逻辑与 |
|| |
11 |
逻辑或 |
三元运算符(条件运算符)
condition ? expr_true : expr_false;
- 类似 C 语言,条件成立取前者,否则取后者。
- 例:
vout = (vin > vth) ? vdd : 0.0;
其他运算符
运算符优先级总表(从高到低)
- 一元:
+ - ! ~ & ~& | ~| ^ ^~
- 乘除余:
* / %
- 加减:
+ -
- 移位:
<< >>
- 关系:
< > <= >=
- 相等:
== != === !==
- 按位与:
&
- 按位异或:
^ ^~
- 按位或:
|
- 逻辑与:
&&
- 逻辑或:
||
- 条件:
?:(最低)
易错提醒
- =/! 与 ==/!= 的区别:前者把 X/Z 也当值比较,后者遇 X/Z 返回未知。
- 连续书写运算符有次序问题:
A*B/C 结果相同,但含 real/integer 转换时易错。
i++ 不支持,用 i = i + 1。
相关笔记