表达式
表达式由运算符和操作数构成,其目的是根据操作符的意义得到一个计算结果。表达式可以在出现数值的任何地方使用。操作数可以是任意的数据类型,只是某些特定的语法结构要求使用特定类型的操作数。操作数可以为常数,整数,实数,线网,寄存器,时间,位选,域选,存储器及函数调用等。
运算符
算术运算符
在常用的算术运算符主要是 :
- 加法(二元运算符):“+”;
- 减法 (二元运算符): “–”;
- 乘法(二元运算符):“*”;
关系运算符
关系运算符有:
- ?>(大于)
- ?<(小于)
- ?>=(不小于)
- ?<=(不大于)
- = = (逻辑相等)
- ! = (逻辑不等)
关系操作符的结果为真( 1 )或假( 0 )。如果操作数中有一位为X 或Z ,那么结果为X 。
逻辑运算符
逻辑运算符有:
- && (逻辑与)
- || (逻辑或)
- ! (逻辑非)
用法为:(表达式1) 逻辑运算符 (表达式2) ….
这些运算符在逻辑值0(假) 或1(真) 上操作。逻辑运算的结果为0 或1 。
位逻辑运算符
按位运算符有:
- ~(一元非):(相当于非门运算)
- &(二元与):(相当于与门运算)
- |(二元或): (相当于或门运算)
- ^(二元异或):(相当于异或门运算)
- ~ ^, ^ ~(二元异或非即同或) :(相当于同或门运算)
这些操作符在输入操作数的对应位上按位操作。 例如:
A = 'b0110;
B = 'b0100;
那么:A | B
结果为0 1 1 0A & B
结果为0 1 0 0
如果操作数长度不相等, 长度较小的操作数在最左侧添0 补位。例如 'b0110 ^ 'b10000
与 'b00110 ^ 'b10000
结果相同都为‘ b 1 0 11 0 。
下图给出了位运算符的真值表。
&(与) | 0 | 1 | x | |(或) | 0 | 1 | x | |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 1 | x | |
1 | 0 | 1 | x | 1 | 1 | 1 | 1 | |
x | 0 | x | x | x | x | 1 | x |
^(异或) | 0 | 1 | x | ~^(同或) | 0 | 1 | x | |
---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | x | 0 | 1 | 0 | x | |
1 | 1 | 0 | x | 1 | 0 | 1 | x | |
x | x | x | x | x | x | x | x |
条件运算符
条件操作符根据条件表达式的值选择表达式,形式如下:cond_expr ? expr1 : expr2
如果cond_expr 为真(即值为1 ),选择expr1 ;如果cond_expr 为假(值为0 ),选择expr2 。如果cond_expr 为x 或z ,结果将是按以下逻辑expr1 和expr2 按位操作的值: 0 与0 得0 , 1 与1 得1 ,其余情况为x 。
如下所示:wire [2:0] Student = Marks > 18 ? Grade_A : Grade_C;
计算表达式Marks > 18; 如果真, Grade_A 赋值为Student; 如果Marks < =18, Grade_C 赋值为Student 。
连接运算符
连接操作是将小表达式合并形成大表达式的操作。形式如下:{expr1, expr2, . . .,
exprN}
实例如下所示:
wire [7:0] Dbus;
assign Dbus [7:4] = {Dbus [0], Dbus [1], Dbus[2], Dbus[ 3 ] } ;
/ /以反转的顺序将低端4 位赋给高端4 位。
assign Dbus = {Dbus [3:0], Dbus [ 7 : 4 ] } ;
/ /高4 位与低4 位交换。
由于非定长常数的长度未知, 不允许连接非定长常数。例如, 下列式子非法:{Dbus,5} / /不允许连接操作非定长常数。
运算符的优先级
不同运算符之间,优先级是不同的。下表列出了操作符优先级从高至低的排列顺序。当没有圆括号时,Verilog 会根据操作符优先级对表达式进行计算。为了避免由操作符优先级导致的计算混乱,在不确定优先级时,建议用圆括号将表达式区分开来。
运算符 | 运算符号 | 优先级 |
---|---|---|
单目运算 | + – ! ~ | 最高 |
乘、除、取模 | * / % | |
加减 | + – | |
移位 | << >> | |
关系 | < <= > >= | |
等价 | == != === !=== | |
归约 | & ~& | |
^ ~^ | ||
| ~| | ||
逻辑 | && | |
|| | ||
条件 | ?: | 最低 |
没有回复内容