Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别

文章目录

  • 前言
  • 一、单目运算符、双目运算符和三目运算符
  • 二、位运算符
  • 三、逻辑运算符
  • 四、缩减运算符
  • 五、总结


前言

我们在学习和理解Verilog HDL中的一些运算符的意义时,可能会对一些运算符的使用产生混乱,因此本文整理了Verilog HDL中&与&&、|与||、!与~等容易造成误解的运算符的区别。


一、单目运算符、双目运算符和三目运算符

在介绍这几种运算符之间的差别之前需要先介绍一个概念。在Verilog HDL中运算符被分为3种,单目运算符、双目运算符和三目运算符。

1、单目运算符就是运算符只有右边有一个操作数。

例如: a = ~2’b01 ==> a = 2’b10

2、双目运算符则要求运算符两侧各有一个操作。

例如: a = 2’b01 | 2’b11 ==> a = 2’b11;

3、三目运算符则要求运算符有三个操作数。

例如: out = sel ? a : b;


二、位运算符

运算符&、| 和 ~ 都是位运算符,当然了,还包括按位异或运算符^ 和按位同或运算符 ^~。在本篇文章中,主要介绍的前三种,也为了说明它们和逻辑运算符的区别。
这三个运算符都是按位操作,原操作数位宽为几位,运算结束之后还是几位。

例如:
a = 2’b01 & 2’b11 ==> a = 2’b01;
a = 2’b01 | 2’b11 ==> a = 2’b11;
a = ~2’b01 ==> a = 2’b10;


三、逻辑运算符

逻辑与 &&
逻辑或 ||
逻辑非 !
逻辑运算符和上面介绍的位运算符最大的区别就是输出结果是一个逻辑结果,是一位的,如果是”1“就代表逻辑”真“,如果是”0“就代表逻辑”假“。

例如:
log = (x>y)&&(a 若真,则 log=1;若假,则 log=0;
log = (x>y)||(a log = !(x>y);


四、缩减运算符

还有一种运算符,它们和位运算符十分相像,但是使用的方式却不一样,它们就是缩减运算符,也是一种单目运算符,它们包括&、|、&、|、^ 和 ~^。

例如:
out = & 4’b0101; ==> out = ((( 1’b0 & 1’b1) & 1’b0) & 1’b1);

最终会得到一个一位宽的逻辑值。


五、总结

在本篇博文中,比较了位运算符、逻辑运算符和缩减运算符的区别,这在Verilog HDL的学习中很容易造成错误。

你可能感兴趣的:(Verilog,HDL系列文章,fpga开发)