目录
Verilog中的运算符
按照功能可以分为下述类型:
- 1、算术运算符、
- 2、关系运算符、
- 3、逻辑运算符、
- 4、条件运算符、
- 5、位运算符、
- 6、移位运算符、
- 7、拼接运算符。
1、算术运算符
算术运算符,简单来说,就是数学运算里面的加减乘除,数字逻辑处理有时候也需要进行数字运算,所以需要算术运算符。
符号 | 使用方法 | 说明 |
---|---|---|
+ | a + b |
a加上b |
– | a – b | a减去b |
* | a * b | a乘以b |
/ | a / b | a除以b |
% | a % b | a模除b |
Verilog实现乘除比较浪费组合逻辑资源,尤其是除法。一般2的指数次幂的乘除法使用移位运算来完成运算,详情可以看移位运算符章节。非2的指数次幂的乘除法一般是调用现成的IP,QUARTUS/ISE等工具软件会有提供,不过这些工具软件提供的IP也是由最底层的组合逻辑(与或非门等)搭建而成的。
2、关系运算符
关系运算符主要是用来做一些条件判断用的,在进行关系运算符时,如果声明的关系是假的,则返回值是0,如果声明的关系是真的,则返回值是1;所有的关系运算符有着相同的优先级别,关系运算符的优先级别低于算术运算符的优先级别
符号 | 使用方法 | 说明 |
---|---|---|
> | a > b | a大于b |
< | a < b | a小于b |
>= | a >= b | a大于等于b |
<= | a <= b | a小于等于b |
== | a == b | a等于b |
!= | a != b | a不等于b |
3、 逻辑运算符
逻辑运算符是连接多个关系表达式用的,可实现更加复杂的判断,一般不单独使用,都需要配合具体语句来实现完整的意思
符号 | 使用方法 | 说明 |
---|---|---|
! | !a | a的非,如果a为0,那么a的非是1。 |
&& | a && b | a 与上 b,如果a和b都为1,a&&b结果才为1,表示真 |
|| | a || b | a 或上 b,如果a或者b有一个为1,a||b结果为1,表示真。 |
4、 条件运算符
条件操作符一般来构建从两个输入中选择一个作为输出的条件选择结构,功能等同于always中的if-else语句。
符号 | 使用方法 | 说明 |
---|---|---|
? : | a ? b : c | 如果 a 为真,就选择 b,否则选择 c |
5、位运算符
位运算符是一类最基本的运算符,可以认为它们直接对应数字逻辑中的与、或、非门等逻辑门。
符号 | 使用方法 | 说明 |
---|---|---|
~ | ~a | 将 a 的每个位进行取反 |
& | a & b | 将 a 的每个位与 b 相同的位进行相与 |
| | a | b | 将 a 的每个位与 b 相同的位进行相或 |
^ | a ^ b | 将 a 的每个位与 b 相同的位进行异或 |
位运算符的与、或、非与逻辑运算符逻辑与、逻辑或、逻辑非使用时候容易混淆,逻辑运算符一般用在条件判断上,位运算符一般用在信号赋值上。
6、 移位运算符
移位运算符包括左移位运算符和右移位运算符,这两种移位运算符都用0来填补移出的空位。
符号 | 使用方法 | 说明 |
---|---|---|
<< | a << b | 将 a 左移 b 位 |
>> | a >> b | 将 a 右移 b 位 |
假设a有8bit数据位宽,那么a<<2,表示a左移2bit,a还是8bit数据位宽,a的最高2bit数据被移位丢弃了,最低2bit数据固定补0。如果a是3(二进制:00000011),那么3左移2bit,3<<2,就是12(二进制:00001100)。一般使用左移位运算代替乘法,右移位运算代替除法,但是这种也只能表示2的指数次幂的乘除法。
7、 拼接运算符
Verilog中有一个特殊的运算符是C语言中没有的,就是位拼接运算符。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。
符号 | 使用方法 | 说明 |
---|---|---|
{} | {a, b} | 将 a 和 b 拼接起来,作为一个新信号 |
8、运算符的优先级
运算符 | 优先级 |
---|---|
! 、 ~ | 最高 |
* 、 / 、% | 次高 |
+ 、 – |
优 先 级 依 次 降 低 |
<< 、 >> | |
< 、 <= 、 > 、 >= | |
== 、 != 、 === 、 !== | |
& | |
^ 、 ^~ | |
| | |
&& | |
|| | 次低 |
? | 最低 |