Verilog学习笔记-——运算符
按功能分包括:算数运算符、逻辑运算符、关系运算符、等式运算符、缩减运算符、条件运算符、位运算符、移位运算符和位拼接运算符。
按运算符所带操作数的个数来区分,可分为三类:
单目运算符:运算符只带一个操作数。
双目运算符:运算符可带两个操作数。
三目运算符:运算符可带三个操作数。
算数运算符(Arithmetic operators)—双目运算符
常用算术运算符包扩:
+(加)、-(减)、*(乘)、/(除)、%(求模)
逻辑运算符(Logical operators)
&&(逻辑与)、||(逻辑或)、!(逻辑非)
其中 “&&、||”为双目运算符,“!”为单目运算符
位运算符(Bitwise operators)—双目运算符
~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、 ^ ~ 或 ~ ^(按位同或)
当两个不同长度的数据进行位运算时,会自动将两个操作数按右端对齐,位数少的操作数会在高位用0补齐。
关系运算符(Relational operators)—双目运算符
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)
等式运算符(Equality Operators)—双目运算符
= = == ==(等于)、!=(不等于)、 = = = === ===(全等)、!==(不全等)
相等运算符(==)和全等运算符(
=
=
=
===
===)的区别是:参与比较的两个操作数必须逐位相等,其相等比较结果才为1,如果某些位是不定态或高阻值,其相等比较得到的结果是不定值;而全等比较(
=
=
=
===
===)则是对这些不定态或高阻态的位也进行比较,两个操作数必须完全一致,其结果才是1,否则结果是0。
例a = 5'b11x01,b=5'b11x01
则a==b
的结果为不定值"x",a===b
的结果为"1".
缩减运算符(Reduction operators)—单目运算符
&(与)、~&(与非)、|(或)、 ~|(或非)、^(异或)、 ^ ~或 ~ ^ (同或)
缩减运算符将一个矢量缩减为一个标量。
移位运算符(Shift operators)
>
>
>>
>>(右移)、
<
<
<<
<<(左移)、
>
>
>
>>>
>>>(算数右移)、
<
<
<
<<<
<<<(算数左移)
在Verilog-1995的移位运算符只有两个,左移和右移。其用法为
A>>n或 A<<n
表示把操作数A右移或左移n位,该移位是逻辑移位,移出的位用0添补。
在Verilog-2001中增加了算术运算符">>>“和”>>>",对于有符号数,执行算术移位操作时,将符号位填补移出的位,以保持数值的符号。
例 A=8'b10100011
A>>3; //逻辑右移后其值为8'b00010100
A>>>3; //算术右移后其值为8'b11110100
指数运算符(Power operator)—双目运算符
Verilog-2001标准中增加了指数运算符" ** ",例如
2
8
2^8
28表示为2**8
条件运算符(Conditional operator)—三目运算符
格式:信号=条件?表达式1:表达式2;
例如:
out = sel ? in1 :in0; //sel=1时 out=in1;sel=0时 out=in0;
位拼接运算符(Concatenation operators)—双目运算符
格式:{信号1的某几位,信号2的某几位,... ... ,信号n的某几位}
位拼接可以嵌套使用
例如:
{{2{a,b}},{3{c,d}}} //等价于{a,b,a,b,c,d,c,d,c,d}