“===”和“==”不同体现在对含有不定制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

Verilog 中的 '==' 和 '===' 在处理不定制X和高阻态Z数据时有所不同。'==' 不识别X/Z,相同位(除X/Z外)输出1,不同位输出0;'!=' 则相同情况输出0,不同位输出1。而 '===' 和 '!===' 将X/Z视为普通元素比较,完全一致时 '===' 输出1,否则0。这涉及到逻辑相等与逻辑全等的概念。
3364

被折叠的 条评论
为什么被折叠?



