Menu
Coddy logo textTech

Special Values X And Z

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 17/90。

X と Z は、シミュレーション中のハードウェアの状態に関する情報を与えてくれる特殊な値です。

X(不明)、デバッグ用

X は、設計に問題があることを示すためにシミュレーションに現れます。

X を見たとき、それは多くの場合、次のことを意味します:

  • 未初期化のレジスタ: 使用する前に値を設定し忘れています
  • 複数のドライバー: 2 つの異なるものが、同時に同じ wire を制御しようとしています
  • タイミング違反: 信号が誤ったタイミングで変化し、不安定な状態を作り出しています

X は実際のハードウェアには存在しません。これは、設計に問題があることを知らせるシミュレーションツールです。実際のチップを製造する前に問題を修正できます。

X がなければ、ランダムな 0 や 1 が表示されても、問題があることに気付かないかもしれません。X によってバグが見えるようになります。

一般的な原因:

reg a;           // 最初は X(不明)
reg b;
assign b = a;    // b は a が X なので X になる

Z(高インピーダンス)

Zは高インピーダンスまたは切断状態を表します。

  • 信号が何からも駆動されていないとき、その信号は Z です
  • Z は「この wire は切断されています」を意味します
  • トライステートバッファーと共有バスに使用されます

一般的な原因:

wire c;          // 初期状態は Z(未接続)
assign c = 1'bZ; // Explicitly set to Z

VerilogでXとZを書く

XとZの値は、0や1と同じように代入できます。

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1;    // ビット1はハイインピーダンス
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // すべてのビットがハイインピーダンス

波形内の X と Z

シミュレーション波形では:

  • X は赤い線または「X」として表示されます
  • Z は中央の線または「Z」として表示されます

これらは、信号が不明または接続されていない箇所を示すことで、設計のデバッグに役立ちます。

重要な注意事項

  • X は論理回路を通じて伝播します(X AND 0 = 0 ですが、X AND 1 = X)
  • Z は通常、三状態バスに使用されます
  • 合成では、X と Z は異なる扱いを受ける場合があります
  • シミュレーションで X が発生しないよう、reg 信号は必ず初期化する
challenge icon

チャレンジ

X と Z を含む正しい値を記述して、コードを完成させてください。

行うこと:

  1. a を、ビット 1 が unknown(その他は 0)である 4 ビット値に設定します
  2. c を、すべてのビットが unknown(4 ビット)になるように設定します
  3. d を、すべてのビットが high-impedance(4 ビット)になるように設定します

自分で試してみよう

module xz_challenge;
  wire [3:0] a, c, d;
  
  assign a = 4'b______;   // Bit 1 is X (others 0)
  assign c = 4'b______;   // すべてのビットがX
  assign d = 4'b______;   // All bits Z
  
  initial begin
    $display("a = %b", a);
    $display("c = %b", c);
    $display("d = %b", d);
    $finish;
  end
  
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ