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