3.3. 运算符及表达式
Verilog HDL语言的运算符范围很广,其运算符按其功能可分为以下几类:
25
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
1) 算术运算符(+,-,×,/,%)
2) 赋值运算符(=,<=)
3) 关系运算符(>,<,>=,<=)
4) 逻辑运算符(&&,||,!)
5) 条件运算符(?
6) 位运算符(~,|,^,&,^~)
7) 移位运算符(<<,>>)
8) 拼接运算符({ })
9) 其它
在Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为三种:
1) 单目运算符(unary operator):可以带一个操作数,操作数放在运算符的右边。
2) 二目运算符(binary operator):可以带二个操作数,操作数放在运算符的两边。
3) 三目运算符(ternary operator):可以带三个操作,这三个操作数用三目运算符分隔开。
见下例:
clock = ~clock; // ~是一个单目取反运算符, clock是操作数。
c = a | b; // 是一个二目按位或运算符, a 和 b是操作数。
r = s ? t : u; // ?: 是一个三目条件运算符, s,t,u是操作数。
下面对常用的几种运算符进行介绍。
3.3.1.基本的算术运算符
在Verilog HDL语言中,算术运算符又称为二进制运算符,共有下面几种:
1) + (加法运算符,或正值运算符,如 rega+regb,+3)
2) - (减法运算符,或负值运算符,如 rega-3,-3)
3) × (乘法运算符,如rega*3)
4) / (除法运算符,如5/3)
5) % (模运算符,或称为求余运算符,要求%两侧均为整型数据。如7%3的值为1)
在进行整数除法运算时,结果值要略去小数部分,只取整数部分。而进行取模运算时,结果值的符号
位采用模运算式里第一个操作数的符号位。见下例。
模运算表达式 结果 说明
10%3 1 余数为1
11%3 2 余数为2
12%3 0 余数为0即无余数
-10%3 -1 结果取第一个操作数的符号位,所以余数为-1
11%3 2 结果取第一个操作数的符号位,所以余数为2.
注意: 在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x。
3.3.2.位运算符
Verilog HDL作为一种硬件描述语言,是针对硬件电路而言的。在硬件电路中信号有四种状态值
1,0,x,z.在电路中信号进行与或非时,反映在Verilog HDL中则是相应的操作数的位运算。Verilog
HDL提供了以下五种位运算符:
1) ~ //取反
2) & //按位与
3) | //按位或
4) ^ //按位异或
5) ^~ //按位同或(异或非)
26
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
说明:
• 位运算符中除了~是单目运算符以外,均为二目运算符,即要求运算符两侧各有一个操作
数.
• 位运算符中的二目运算符要求对两个操作数的相应位进行运算操作。
下面对各运算符分别进行介绍:
1) "取反"运算符~
~是一个单目运算符,用来对一个操作数进行按位取反运算。
其运算规则见下表:
~
1 0
0 1
x x
举例说明:
rega='b1010;//rega的初值为'b1010
rega=~rega;//rega的值进行取反运算后变为'b0101
2) "按位与"运算符&
按位与运算就是将两个操作数的相应位进行与运算,
其运算规则见下表:
& 0 1 x
0 0 0 0
1 0 1 x
x 0 x x
3) "按位或"运算符|
按位或运算就是将两个操作数的相应位进行或运算。
其运算规则见下表:
| 0 1 x
0 0 1 x
1 1 1 1
x x 1 x
4) "按位异或"运算符^(也称之为XOR运算符)
按位异或运算就是将两个操作数的相应位进行异或运算。
其运算规则见下表:
^ 0 1 x
0 0 1 x
1 1 0 x
x x x x
5) "按位同或"运算符^~
按位同或运算就是将两个操作数的相应位先进行异或运算再进行非运算.
其运算规则见下表:
^~ 0 1 x
27
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
0 1 0 x
1 0 1 x
x x x x
6) 不同长度的数据进行位运算
两个长度不同的数据进行位运算时,系统会自动的将两者按右端对齐.位数少的操作数会在
相应的高位用0填满,以使两个操作数按位进行操作. |