42

違いは何ですか:

if (dataoutput[7:0] == 8'bx) begin

if (dataoutput[7:0] === 8'bx) begin 

を実行dataoutput = 52'bxした後、2番目は1になりますが、最初は0になります。なぜですか。(0または1は比較結果です。)

4

4 に答える 4

40

などのVerilogの一部のデータ型regは4ステートです。これは、各ビットが0、1、x、zの4つの値のいずれかになり得ることを意味します。

「ケース等式」演算子を使用する===と、、 xが比較され、結果は1になります。

を使用==すると、あなたが述べたように、比較の結果は0ではありません。むしろ、IEEE Std(1800-2009)のセクション11.4.5「等式演算子」によると、結果はxになります。

論理的等式および論理的不等式演算子(==および!=)の場合、オペランドの不明または高インピーダンスのビットが原因で関係があいまいな場合、結果は1ビットの不明な値(x)になります。

于 2011-05-08T17:35:42.097 に答える
23

Verilogの場合:

  • ==論理的同等性をテストします(1と0をテストし、他のすべてはxになります)
  • === 4状態の論理的等式をテストします(1、0、z、およびxをテストします)
于 2011-05-08T13:58:37.467 に答える
6

==ビット(0または1)を比較する場合=== 4つの状態(0、1、x、z)すべてを比較する場合

==ハードウェア(x-norゲート)に合成できますが、=== xはデジタルでは有効な論理レベルではないため、合成できません。実際、電圧は0〜1です。zはそうではありません。それ自体が任意のロジックであり、回路の切断を示します。

于 2014-12-09T03:34:23.567 に答える
0

多くの人がすでにコメントしているように、信号にXがある場合、「通常の」比較演算子は不明な状態/回答につながる可能性があります。したがって、UまたはX状態を提供できるRAMから比較していて、実際に一致を確認したい場合は、「===」および「!==」演算子を使用する必要があります。

systemverilogリファレンスドキュメントの画像を参照してください。 systemverilogリファレンスのスナップショット

于 2021-10-11T08:27:43.370 に答える