Menu Close

verilog 运算符分类

Verilog 运算符比常规的软件编程语言的运算符要复杂的多,也比较难以掌握,不仅涉及到广泛的位操作,还涉及到多值的运算结果。如在Verilog中不仅有数据运算,还涉及到X,Z的与0,1 等的运算结果。本节内容将尽量详细介绍这些运算符的运算规则,并以各种实例展示运算过程和结果,希望帮助大家理解。

Verilog 运算符的分类:

1.按照操作数的多寡分类,可以分为:

单目与多目运算符,具体按照运算符操作数的多少可以将运算符分为三种:

(1)单目运算符(unary operator):

可以带一个操作数,操作数放在运算符的右边。操作数可以为变量,表达式或数值。

单目运算符有: ~ ! +   – 

~是取反运算符(对向量按位取反)。

!取非运算符,对变量整体评估,

如 wire [3:0] a=4’b1010;  ~a的值为4’b0101;

而!a的值为0,或1’b0。对于!a可以这样理解:判断a的是否为零,如果为零,则!a的值为1, 或1’b1; 否则为0,或1’b0。

例:

`timescale 10ns/1ns
 
module tb ( );
 
reg  [3:0] ta, tb;
wire [3:0] tc, td;
 
initial
begin
    #100
 
    ta = 4'b0101;
    tb = 4'b0101;
    #20
 
    ta = 4'b0000;
    tb = 4'b0000;
    #20
 
    ta = 4'b1111;
    tb = 4'b1111;
end
 
test test_inst
(
    .a (ta),
    .b (tb),
    .c (tc),
    .d (td)
);
 
endmodule

 

module test 
( 
    input  [3:0] a, 
    input  [3:0] b, 
    output [3:0] c, 
    output [3:0] d 
); 
 
assign c = ~a; 
assign d = !b; 
 
endmodule

 

仿真结果如图1,

%title插图%num

图1

单目运算符在单个bit变量求值时,运算结果位宽仍然是一位。在对向量求值时,~按位取反,得到与原变量同等位宽的值,而!是对整个向量评估,如果向量为0,则结果为1’b1;如果原变量不为零,则结果为1’b0;

+,-在这里表示符号运算,+表示正数,-表示负数。一般放在十进制数的前面。

还有4个运算符既可以作为单目运算符使用,也可以作为双目运算符使用。作为单目运算符使用时,意义如下:

& 按位与,| 按位或, ^ 按位异或,^~ 按位同或(异或非)

&a[3:0] ,   等同于a[0] & a[1] & a[2] & a[3];  逐位相与求结果,结果位宽为1.

|a[3:0],     等同于a[0] | a[1] | a[2] | a[3];    逐位相或求结果,结果位宽为1.

^a[3:0],    等同于a[0] ^ a[1] ^ a[2] ^ a[3];  逐位异或求结果,结果位宽为1.

^~a[3:0], 等同于a[0]^~a[1]^~a[2]^~ a[3];逐位同或(异或非)求结果,结果位宽为1.

(2) 二目运算符(binary operator):

可以带二个操作数,操作数放在运算符的两边。

二目运算符有:&& ||+*/% &|==>=><=<等,其中&&为逻辑与,|| 为逻辑或,

(3) 三目运算符(ternary operator):

可以带三个操作,这三个操作数用三目运算符分隔开。

三目运算符有选择运算符?

r = s ? t : u;

单目或多目运算符的使用见下例:

clock = ~clock;  // ~是一个单目取反运算符, clock是操作数。

c = a | b;              // 是一个二目按位或运算符, a 和 b是操作数。

r = s ? t : u;         // ?    : 是一个三目条件运算符, s,t,u是操作数。

 

2. 按照功能分类,可以分类如下:

a.按位运算符(bitwise operator)

&   |   ~   按位 与、或及取反运算符

b.逻辑运算符(logic operator)

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

c.关系运算符(relation operator)

>  >=  <  <=     大于,大于等于,小于,小于等于

d.等式运算符 (Equality operator)

==  !=  ===  !==   等于,不等,全等,非全等

e.移位运算符 (shift operator)

<<  >>   左移,右移, <<<,>>>带符号操作数的左右移

f.并位运算符 (concatenation operator)

{   }    并位运算符 或位拼接运算符。

g. 选择运算符  (selection operator)

选择运算符

h. 符号运算符 (sign operator)

+(正),-(负)

i.算数运算符(arithmetic operator)

+(加),-(减) ,*(乘),/(除),%(求余),**(指数或求幂)

j. 规约运算符

&,| ,^ 也称缩减运算符

例如:  &a[3:0] 等效为 a[3]&a[2]&a[1]&a[0];

后面将按照章节分别介绍各个运算符的使用。

Posted in FPGA, FPGA, Verilog, Verilog

发表评论

相关链接