Menu Close

Verilog 等式运算符

Verilog语法中等式运算符包含==,!=,===以及!==等4种;该四种运算符也属于关系运算符的范畴。由于具有一些特殊性,这里将等式运算符作特别讨论。

1) ==,!=  运算符

== 运算符表示比较的变量是否相等,相等为1或真(true),不相等为0,或假(false)。

!= 运算符表示比较的两个变量是否不相等,不相等为1或真(true),相等为0,或假(false)。

比较的结果可以作为值赋值给其它变量,也可以作为if,case,?等语句的判断条件使用。

与关系运算符一样,如果比较双方变量,有一个包含Z或X,则比较的结果为X。

例:


 

从上面的例子可以看出,等式运算符组成的表达式可以赋值给变量,如:assign comp = a != b;,也可以直接用在判断语句作为判断条件,如:assign e = (a==b) ? c : d;

下面是testbench文件给出激励文件,观察在a,b 的值不为X,Z的时候,e,f的值,以及在a,b为X或Z时,comp,e,f的值。


 

Modelsim的仿真结果如下图:

图1

从上面的图1可以看出,无论a,b中哪一个出现了X,Z,comp的结果都是X,

并不是a,b的值都为X,比较结果会返回1.

而e,f的值却非常有意思,并不是在判断条件为X时,e,f的值全部都为4’bXXXX;而是4’bX00X;这个值是如何得到的呢?

首先当判断条件出现X时,语句“assign e = (a==b) ? c : d; ”中的e不能确定自己的结果来自c 还是d, 但如果c,d值中有某些位的值相同,则e对应的这些位是确定的,如c为4’b1000,d为4’b0001,c与d的中间两位相同,因此无论最后是c赋给了e,还是d赋给了e,中间两位都为00,因此结果就可以解释了。

2)  等式运算符===,!==

===又称为全等运算符,只有比较的两边对应的位完全相等才返回1或真(true),否则返回0或假(false)。

!==为非全等运算符,运算结果与“===”的运算结果相反。

注意:全等比较符不仅0,1参与比较,X,Z也是比较的成员,如 a的值为1‘bX,b的值也为1’bX , 则a===b的返回值为1或真(true).

将上面的代码修改后,再看仿真结果,并比较与==,!=的结果有何不同。


 

Testbench 激励程序


 

Modelsim 仿真结果

 

图2

从图2可以看出,===与==,!== 与 !=的仿真结果完全不同。

注:在数字电路中,如果只是0,1的二值比较,=== 与 ==,!== 与 !=是相同的。

 

对应视频:

Posted in FPGA, FPGA 教材教案, Verilog