一级目录
二级目录
三级目录
1. 单目运算符
+ // Unary plus
- // Unary minus
! // Logical NOT
~ // Bitwise NOT
& // Reductive AND
~& // Reductive NAND
| // Reductive OR
~| // Reductive NOR
^ // Reductive XOR
^~ // Reductive XNOR
~^ // Reductive XNOR
单目运算符中包含缩减运算符(Reductive )
这是单目运算符,也包括与、或、非运算。运算规则与位运算相似,不过是对单个运算符的每一位逐步运算,最后的运算结果是一位的二进制数。
c=&B; //意思同c=((B[0]&B[1]) &B[2] ) & B[3];
2. 双目运算符
** // Power
* // Multiply
/ // Divide
% // Modulo
+ // Plus
- // Minus
<< // Shift Left (Logical)
>> // Shift Right (Logical)
<<< // Shift Left (Arithmetic)
>>> // Shift Right (Arithmetic)
< // Less Than
<= // Less Than or Equal To
> // Greater Than
>= // Greater Than or Equal To
== // Logical Equality (any x or z results in an x result)
!= // Logical Inequality (any x or z results in an x result)
=== // Case Equality (x and z match exactly, result 1 or 0)
!=== // Case Inequality (x and z match exactly, result 1 or 0)
& // Bitwise AND
~& // Bitwise NAND
^ // Bitwise XOR
^~ // Bitwise XNOR
~^ // Bitwise XNOR
| // Bitwise OR
~| // Bitwise NOR
&& // Logical AND
|| // Logical OR
or // Logical OR for event expressions
关于其中的移位运算符
1) 逻辑移位:<< ,>>
特点:不带符号位,逻辑移位时都是补0
<< 、 >> a>>n其中a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。
4'b1001<<1=5'b10010; 4'b1001<<2=6'b100100; (左移会使得位数增加)
1<<6=32'b1000000; 4'b1001>>1=4'b0100; (右移不会改变位数)
4‘b1001>>4=4'b0000;
2) 算术移位:<<< ,>>>
特点:带符号位移位
算术右移,移位时最高位补符号位
算术左移,低位补0和逻辑左移操作相同
3. 条件运算符
(expression) ? (true_value_expr) : (false_value_expr)
4.拼接运算符
{信号1的某几位,信号2的某几位,…信号n的某几位} 将某些信号的某些为列出来,中间用逗号分开,最后用大括号括起来表示一个整体的信号。
在位拼接的表达式中不允许存在没有指明位数的信号。
{a,b[3:0],w,3’b101} //等同于{a,b[3],b[2],b[1],b[0],w,1b’1,1’b0,1’b1}
{4{w}} //等同于{w,w,w,w}
{b,{3{a,b}}} //等同于{b,a,b,a,b,a,b} 这里面的3、4必须是常量表达式。
注意:拼接信号总线时复制如{3{a,b}},复制常量3外部必须带{}
5.运算优先级
运算优先级:
-
- ! ~ (unary) // 高优先级
- / % **
-
- (binary)
<< >> <<< >>>
< <= > >=
== != === !==
& ~&
^ ~^
| ~|
&&
||
?: // 低优先级
- (binary)
6. 注意事项
注意
• 并不是所有仿真器都遵从用== != < > <= >=进行未知和不明确比较的规则 请注意
• 请注意一元归约运算符和按位逻辑运算符的差别 其意义由上下文和包含特殊解释的方括号给
出
合并
• 逻辑 按位和移位运算符被作为逻辑运算符合并
• 条件运算符被作为多路复用器或三态使能端来合并
• 运算符+ - * < <= > >= == !=被分别作为加法器 减法器 乘法器和比较器合并
• 运算符/和%只作为移位或在常数表达式中合并 例如 /2 表示右移
• 所有工具都不合并其他运算符
提示
用括号而不是运算符优先级来组成表达式 这样能防止错误而且使不是很懂 Verilog 语言的人可以理解你的表达式
举例
-16'd10 // 一个表达式 不是一个带符号数!
a + b
x % y
Reset && !Enable // 和 Reset && (!Enable)一样
a && b || c && d // 和(a && b) || (c && d)一样
~4'b1101 // 结果是 4'b0010
&8'hff // 结果是 1'b1 (所有位都是 1)