`assign` 操作中的操作优先级?
Operation priorities in `assign` operation?
通常,assign
语句简单明了。但是假设有一个复杂的,它有括号和连接以及一堆不同的运算符; assign
语句右侧的运算符的评估优先级的确切顺序是什么?
有许多不同的运算符类型:
arithmetic
logical
relational
equality
bitwise
reduction
shift
concatenation
replication
conditional
换句话说,如果您要将 assign
语句转换为 always
块,组织操作的确切顺序是什么?
回答
感谢 @dave_59,根据 IEEE 的文档,降序排列的优先级是:
运算符
关联性
()
、[]
、::
、.
左
+
, -
, !
, ~
, &
, ~&
, |
, ~|
、^
、~^
、^~
、++
、--
(一元)
**
左
*
、/
、%
左
+
、-
(二进制)
左
<<
、>>
、<<<
、>>>
左
<
、<=
、>
、>=
、inside
、dist
左
==
、!=
、===
、!==
、==?
、!=?
左
&
(二进制)
左
^
、~^
、^~
(二进制)
左
|
(二进制)
左
&&
左
||
左
?:
(条件运算符)
对
–>
, <–>
对
=
, +=
, -=
, *=
, /=
, %=
, &=
, ^=
, \|=
, <<=
, >>=
, <<<=
, >>>=
, :=
, :/
, <=
None
{}
,{{}}
串联
IEEE 1800-2017 SystemVerilog LRM 的第 11.3.2 节运算符优先级对此进行了详细定义。
通常,assign
语句简单明了。但是假设有一个复杂的,它有括号和连接以及一堆不同的运算符; assign
语句右侧的运算符的评估优先级的确切顺序是什么?
有许多不同的运算符类型:
arithmetic
logical
relational
equality
bitwise
reduction
shift
concatenation
replication
conditional
换句话说,如果您要将 assign
语句转换为 always
块,组织操作的确切顺序是什么?
回答
感谢 @dave_59,根据 IEEE 的文档,降序排列的优先级是:
运算符 | 关联性 |
---|---|
() 、[] 、:: 、. |
左 |
+ , - , ! , ~ , & , ~& , | , ~| 、^ 、~^ 、^~ 、++ 、-- (一元) |
|
** |
左 |
* 、/ 、% |
左 |
+ 、- (二进制) |
左 |
<< 、>> 、<<< 、>>> |
左 |
< 、<= 、> 、>= 、inside 、dist |
左 |
== 、!= 、=== 、!== 、==? 、!=? |
左 |
& (二进制) |
左 |
^ 、~^ 、^~ (二进制) |
左 |
| (二进制) |
左 |
&& |
左 |
|| |
左 |
?: (条件运算符) |
对 |
–> , <–> |
对 |
= , += , -= , *= , /= , %= , &= , ^= , \|= , <<= , >>= , <<<= , >>>= , := , :/ , <= |
None |
{} ,{{}} |
串联 |
IEEE 1800-2017 SystemVerilog LRM 的第 11.3.2 节运算符优先级对此进行了详细定义。