Verilog的运算符及优先级

Verilog运算符按功能可以分为八类。

1. 基本算数运算符

运算符中文名举例举例结果说明
+加法运算符或正值运算符12+315同普通加法
-减法运算符或负值运算符12-39同普通减法
*乘法运算符12*336同普通乘法
/除法运算符12.5/34结果为4,小数部分省去
%模运算符12%40可整除,余数为0

注:若进行基本运算操作时,某一操作数有不确定数X,则结果也为X;

2. 赋值运算符

a. 连续赋值:用于对线网型变量进行赋值,而不能对寄存器变量进行赋值。

基本语法格式为:线网型变量类型 [线网型变量位宽] 线网型变量名;

                                assign #(延时量) 线网型变量名 = 赋值表达式;

举例:wire  [2:0]  a;

            wire  [3:0]  b; 

            assign   a = 3'd4;

            assign   b [3] = 1'b1;

b. 过程赋值:主要用于两种结构化模块(initial 模块和always模块)中的赋值语句,在过程块中只能使用过程赋值语句,过程赋值语句只能对寄存器类型的变量(reg、integer、real、time)进行操作,经过赋值后,上面这些变量的取值将保持不变,直到另一条赋值语句对变量重新赋值为止。

基本格式为:<被赋值变量><赋值操作符><赋值表达式>

举例: reg  c;

            always. @(c)

            begin

                   c = 1'b0;

            end

3. 关系运算符

在进行关系运算时,如果操作数之间的关系成立,则返回值为1;关系不成立,则返回0;若某一个操作数的值不定,则关系是模糊的,返回的是不定值X;关系运算符共有以下8种:

>>=<<===!====!==
大于大于等于小于小于等于逻辑相等逻辑不相等实例相等实例不相等

4. 逻辑运算符

对运算符两边操作数进行操作,返回“True”或“FALSE”。

&&||!
逻辑与逻辑或逻辑非

逻辑运算符的真值表

ab!a!ba&&ba||b
110011
100101
011001
001100

5. 条件运算符

条件运算符格式如下:

y = x ? a : b;      // 若y = x为True,返回操作数a,否则返回第三个操作数b。

嵌套的条件运算符可以多路选择:

assign s = (a >= 2) ? 1: (a < 0) ? 2:0;   //当a >= 2时,s = 1 ; 否则继续执行下一个条件选择选择;即当a < 0时,s = 2;若0 <= a < 2时,s = 0;

6 . 位运算符

位运算对其自变量的每一位进行操作,如S1 & S2 的含义就是S1 和 S2 的对应位相与。

&^^~~&~|
异或同或与非或非

7. 移位运算符

移位运算符有两种: “<<”(左移)和“>>”右移,左移相当于乘2,右移一位相当于除2。

S1 << N,其含义是将第一个操作数S1向左移位,所移动的位数由N决定,且用0来填补移出的空位。

8. 拼接运算符

拼接运算符可以将两个或多个信号的某些位拼接起来进行运算操作,格式如下:

{S1, S2, ......, Sn}

例: 拼接符的Verilog实现

reg [15:0] shiftreg;

always @(posedge clk)

          shiftreg [15:0] <= {shiftreg [14:0],data_in} ;

优先级总结: 

名称运算符优先级
求非,求反~ !
乘,除,取模*,/,%
加,减+,-
移位<< , >>
关系< , < = , > , > =
等式= = , != , = = = , != =
按位与&,~&
按位异或^ , ~^
按位或| , ~ |
逻辑与&&
逻辑或||
选择? :

注:由上至下,优先级由高到低;

参考: 《无线通信FPGA设计》田耕 徐文波 张廷伟等.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值