違いは何ですか:
if (dataoutput[7:0] == 8'bx) begin
そして
if (dataoutput[7:0] === 8'bx) begin
dataoutput = 52'bx
を実行した後、2番目は1を返しますが、最初は0を返します。なぜですか? (0または1は比較結果です。)
reg
など、Verilogの一部のデータ型は4ステートです。これは、各ビットが4つの値(0,1、x、z)のいずれかであることを意味します。
「case equality」演算子を使用すると、===
、xが比較され、結果は1です。
==
、あなたが述べたように、比較の結果は0ではありません。むしろ、結果はxであり、IEEE Std(1800-2009)のセクション11.4.5「等式演算子」によると:
論理的等価演算子および論理的不等価演算子(==および!=)の場合、オペランドの未知または高インピーダンスのビットのために関係があいまいである場合、結果は1ビットの未知の値(x)になります。
Verilogで:
==ビットの比較(0または1)=== 4つの状態すべて(0、1、x、z)の比較
==ハードウェア(x-norゲート)に合成できますが、xはデジタルの有効な論理レベルではないため、===は合成できません。実際には0〜1の電圧があります。ロジック自体は、回路の切断を示します。