web-dev-qa-db-ja.com

Verilogの==と===の違いは何ですか?

違いは何ですか:

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

そして

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

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

27
user478571

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

「case equality」演算子を使用すると、===、xが比較され、結果は1です。

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

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

25
toolic

Verilogで:

  • ==論理的等価性をテストします(1と0をテストします。他のすべてはxになります)
  • === 4状態の論理的等価性をテストします(1、0、z、xのテスト)
18
imightbewrong

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

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

5
Karan Shah