Verilog运算符(Operators)

Verilog运算符(Operators)

运算符有三种形式:

  • 运算符+操作数
    • 符号运算符(+ -)
    • 逻辑非(!)
    • 按位取反(~)
    • 约简(& ~& | ~| ^ ~^ ^~)
  • 操作数+运算符+操作数
    • 算术运算(+ - * / **)
    • 取模(%)
    • 比较(> >= < <=)
    • 逻辑运算(&& ||)
    • 逻辑等(== !=)
    • 条件等(=== !===)
    • 按位(& ~& | ~| ^ ~^ ^~)
    • 移位(<< >> <<< >>>)
  • 其他运算符
    • 选择运算符(? :)
    • 连接运算({M, N})
    • 重复运算({N{M}})
    • 触发(->)
运算优先级:
+ - ! ~ (unary) // 高优先级
* / % **
+ - (binary)
<< >> <<< >>>
< <= > >=
== != === !==
& ~&
^ ~^
| ~|
&&
||
?: // 低优先级

例子
  1. A + B  
  2. A && B || C && D   // same as (A && B) || (C && D)  
  3. ~4’b1001           // Gives 4’b0110  
  4. &4’hF              // Gives 1’b1 as all bits are 1  
A + B
A && B || C && D   // same as (A && B) || (C && D)
~4'b1001           // Gives 4'b0110
&4'hF              // Gives 1'b1 as all bits are 1



本文转自:https://blog.csdn.net/QQ604666459/article/details/59496086

今日在见到一段Verilog代码,让我有些摸不着头,代码内容如下:

if (&compare_valid & rdata_valid_flag_reg & pnf_persist_compare)
    pnf_persist1 <= 1'b1;
else 
    pnf_persist1 <= 1'b0;
对于第一个运算符硬是没想起来怎么用到如此用法,实为惭愧。只好借助强大的谷歌了,经查后得知,原来这个叫一元约简运算符。具体解释是这样的:一元约简运算符是单目运算符,其运算规则类似于位运算符中的与、或、非,但其运算过程不同。约简运算符对单个操作数进行运算,最后返回一位数,其运算过程为:首先将操作数 的第一位和第二位进行与、或、非运算;然后再将运算结果和第三位进行与、或、非运算; 依次类推直至最后一位。

常用的约简运算符的关键字和位操作符关键字一样,仅仅由单目运算和双目运算的区别。

如果看到这里依然不能理解的我给出一个一元简约运算符的 Verilog 实例如下:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = &wire1;       //&即为一元约简运算符“与”

其等效为:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = wire1[0] & wire1[1] & wire1[2] & wire1[3];       //即为一元约简运算符“与” 等效效果

相信这些可以让更多人理解了吧。

本文转自:https://www.cnblogs.com/kuvon/archive/2013/04/02/2996463.html

Verilog运算符(Operators)

运算符有三种形式:

  • 运算符+操作数
    • 符号运算符(+ -)
    • 逻辑非(!)
    • 按位取反(~)
    • 约简(& ~& | ~| ^ ~^ ^~)
  • 操作数+运算符+操作数
    • 算术运算(+ - * / **)
    • 取模(%)
    • 比较(> >= < <=)
    • 逻辑运算(&& ||)
    • 逻辑等(== !=)
    • 条件等(=== !===)
    • 按位(& ~& | ~| ^ ~^ ^~)
    • 移位(<< >> <<< >>>)
  • 其他运算符
    • 选择运算符(? :)
    • 连接运算({M, N})
    • 重复运算({N{M}})
    • 触发(->)
运算优先级:
+ - ! ~ (unary) // 高优先级
* / % **
+ - (binary)
<< >> <<< >>>
< <= > >=
== != === !==
& ~&
^ ~^
| ~|
&&
||
?: // 低优先级

例子
  1. A + B  
  2. A && B || C && D   // same as (A && B) || (C && D)  
  3. ~4’b1001           // Gives 4’b0110  
  4. &4’hF              // Gives 1’b1 as all bits are 1  
A + B
A && B || C && D   // same as (A && B) || (C && D)
~4'b1001           // Gives 4'b0110
&4'hF              // Gives 1'b1 as all bits are 1



本文转自:https://blog.csdn.net/QQ604666459/article/details/59496086

今日在见到一段Verilog代码,让我有些摸不着头,代码内容如下:

if (&compare_valid & rdata_valid_flag_reg & pnf_persist_compare)
    pnf_persist1 <= 1'b1;
else 
    pnf_persist1 <= 1'b0;
对于第一个运算符硬是没想起来怎么用到如此用法,实为惭愧。只好借助强大的谷歌了,经查后得知,原来这个叫一元约简运算符。具体解释是这样的:一元约简运算符是单目运算符,其运算规则类似于位运算符中的与、或、非,但其运算过程不同。约简运算符对单个操作数进行运算,最后返回一位数,其运算过程为:首先将操作数 的第一位和第二位进行与、或、非运算;然后再将运算结果和第三位进行与、或、非运算; 依次类推直至最后一位。

常用的约简运算符的关键字和位操作符关键字一样,仅仅由单目运算和双目运算的区别。

如果看到这里依然不能理解的我给出一个一元简约运算符的 Verilog 实例如下:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = &wire1;       //&即为一元约简运算符“与”

其等效为:

wire    [3 : 0] wire1;
wire            wire2;

assign wire1 = 4'b1010;
assign wire2 = wire1[0] & wire1[1] & wire1[2] & wire1[3];       //即为一元约简运算符“与” 等效效果

相信这些可以让更多人理解了吧。

本文转自:https://www.cnblogs.com/kuvon/archive/2013/04/02/2996463.html

猜你喜欢

转载自blog.csdn.net/discoverligte/article/details/80527179