Verilog中“==”和“===”的区别

“===”和“==”不同体现在对含有不定制X和高阻态Z数据的处理中:

先说结论:

  • ==为逻辑相等,没有x/z时相同输出1,不同输出0;有x/z时,若其余位相同,输出是x,其余位不同,输出为0;
  • !=为逻辑不等,没有x/z时相同输出0,不同输出1;有x/z时,若其余位相同,输出是x,其余位不同,输出为1;
  • ===与!===为逻辑全等和逻辑不全等,x/z当作普通元素处理。

本质:

===与!==将x/z按照普通元素看待,进行比较;

==不能识别x/z,其余位相同时,因为存在x/z位无法判断比较结果,输出x;反之,其余位不同,可以直接判断比较结果不等,输出为0;

!=不能识别x/z,其余位相同时,因为存在x/z位无法判断比较结果,输出x;反之,其余位不同,可以直接判断比较结果不等,输出为1;

1、“==”逻辑相等:

两个操作数逐位比较,不识别不定态‘x’或者高阻态’z’:

$displayb ( 4’b0011 == 4’b1010 ); // 0
$displayb ( 4’b0011 == 4’b0011 ); // 1


$displayb ( 4’b1010 == 4’b1x10 ); // x
$displayb ( 4’b0x10 == 4’b1x10 ); // 0
$displayb ( 4’b1z10 == 4’b1z10 ); // x

$displayb ( 4’b0011 != 4’b1x10 ); // 1
$displayb ( 4’b1x10 != 4’b1x10 ); // x

2、“===”逻辑全等:

两个操作数逐位比较,对不定态与高阻态也要进行比较,当两个操作数完全一致时,其结果才为1,否则为0

$displayb ( 4’b01zx === 4’b01zx ); // 1
$displayb ( 4’b01zx !== 4’b01zx ); // 0
$displayb ( 4’b01zx === 4’b00zx ); // 0
$displayb ( 4’b01zx !== 4’b11zx ); // 1

 

你可能感兴趣的:(FPGA面试专题,FPGA/Verilog基础)