verilog中逻辑操作语法

一级目录

二级目录

三级目录

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)
      << >> <<< >>>
      < <= > >=
      == != === !==
      & ~&
      ^ ~^
      | ~|
      &&
      ||
      ?: // 低优先级

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) 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值