특수 값 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 신호를 초기화하십시오.
챌린지
X와 Z를 포함하는 올바른 값을 작성하여 코드를 완성하세요.
수행할 작업:
a를 비트 1이 알 수 없음(나머지는 0)인 4비트 값으로 설정하세요.c를 모든 비트가 알 수 없음(4비트)으로 설정하세요.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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.