Menu
Coddy logo textTech

특수 값 X와 Z

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 17번째.

X와 Z는 시뮬레이션 중에 하드웨어 상태에 대한 정보를 제공하는 특수 값입니다.

X (알 수 없음) — 디버깅용

X는 설계상의 문제를 나타내기 위해 시뮬레이션에 나타납니다.

X가 보이면 보통 다음을 의미합니다:

  • 초기화되지 않은 레지스터 — 사용하기 전에 값을 설정하는 것을 잊었습니다
  • 다중 드라이버 — 두 개의 서로 다른 요소가 동시에 동일한 와이어를 제어하려고 합니다
  • 타이밍 위반 — 신호가 잘못된 시간에 변경되어 불안정한 상태가 생성되었습니다

X는 실제 하드웨어에 존재하지 않습니다. 이것은 실제 칩을 제작하기 전에 설계를 수정할 수 있도록 설계에 문제가 있음을 알려주는 시뮬레이션 도구입니다.

X가 없다면, 무작위의 0이나 1을 보게 될 수도 있고 문제가 있다는 사실을 깨닫지 못할 수도 있습니다. X는 버그를 가시화합니다.

일반적인 원인:

reg a;           // 초기값은 X (알 수 없음)
reg b;
assign b = a;    // a가 X이므로 b도 X가 됨

Z (하이 임피던스)

Z는 하이 임피던스 또는 연결되지 않은 상태를 나타냅니다.

  • 신호가 아무것에 의해서도 구동되지 않을 때 Z 상태가 됩니다
  • Z는 "이 와이어가 연결되지 않음"을 의미합니다
  • 트라이스테이트 버퍼(tri-state buffers) 및 공유 버스에 사용됩니다

일반적인 원인:

wire c;          // 초기에는 Z (연결되지 않음)
assign c = 1'bZ; // 명시적으로 Z로 설정됨

Verilog에서 X와 Z 작성하기

0과 1처럼 X와 Z 값을 할당할 수 있습니다:

reg [3:0] data;

data = 4'b10X0;    // 비트 1이 미정(unknown) 상태입니다 (오른쪽에서부터 0부터 시작하는 인덱스 기준)
data = 4'b01Z1;    // 비트 1이 하이 임피던스(high-impedance) 상태입니다
data = 4'bXXXX;    // 모든 비트가 미정 상태입니다
data = 4'bZZZZ;    // 모든 비트가 하이 임피던스 상태입니다

파형에서의 X와 Z

시뮬레이션 파형에서:

  • X는 빨간색 선 또는 "X"로 표시됩니다.
  • Z는 중간의 선 또는 "Z"로 표시됩니다.

이것들은 신호가 알 수 없거나 연결되지 않은 위치를 보여줌으로써 설계를 디버깅하는 데 도움을 줍니다.

중요 참고 사항

  • X는 로직을 통해 전파됩니다 (X AND 0 = 0, 하지만 X AND 1 = X)
  • Z는 주로 tri-state 버스에 사용됩니다
  • 합성 시, X와 Z는 다르게 처리될 수 있습니다
  • 시뮬레이션에서 X를 방지하기 위해 항상 reg 신호를 초기화하십시오.
challenge icon

챌린지

X와 Z를 포함하는 올바른 값을 작성하여 코드를 완성하세요.

수행할 작업:

  1. a를 비트 1이 알 수 없음(나머지는 0)인 4비트 값으로 설정하세요.
  2. c를 모든 비트가 알 수 없음(4비트)으로 설정하세요.
  3. d를 모든 비트가 하이 임피던스(4비트)로 설정하세요.

치트 시트

X (Unknown)Z (High-Impedance)는 Verilog에서 사용되는 특수한 시뮬레이션 값입니다.

X — 알 수 없는 상태 (시뮬레이션 전용, 실제 하드웨어 아님):

  • 초기화되지 않은 reg는 X로 시작합니다.
  • 발생 원인: 초기화되지 않은 레지스터, 다중 드라이버(multiple drivers), 타이밍 위반
  • 로직을 통해 전파됨 (X AND 1 = X, 하지만 X AND 0 = 0)
  • 파형(waveforms)에서 빨간색 선으로 표시됨

Z — 하이 임피던스(High-impedance) / 연결되지 않은 상태:

  • 구동되지 않는(undriven) wire는 Z로 시작합니다.
  • 트라이스테이트 버퍼(tri-state buffers) 및 공유 버스에 사용됩니다.
  • 파형(waveforms)에서 중간 선으로 표시됨

Verilog에서 X와 Z 작성하기:

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown
data = 4'b01Z1;    // Bit 1 is high-impedance
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // All bits high-impedance

assign c = 1'bZ;   // Explicitly set wire to Z

직접 해보기

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실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨