특수 값 X와 Z
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 17번째.
X와 Z는 시뮬레이션 중 하드웨어 상태에 대한 정보를 제공하는 특수한 값입니다.
X(알 수 없음), 디버깅용
X는 설계에 문제가 있음을 나타내기 위해 시뮬레이션에 표시됩니다.
X가 보이면 보통 다음을 의미합니다:
- 초기화되지 않은 레지스터: 값을 사용하기 전에 설정하는 것을 잊었습니다
- 다중 드라이버: 서로 다른 두 요소가 동시에 같은 와이어를 제어하려고 합니다
- 타이밍 위반: 신호가 잘못된 시점에 변경되어 불안정한 상태가 만들어졌습니다
X는 실제 하드웨어에 존재하지 않습니다. 실제 칩을 만들기 전에 설계에 문제가 있다는 것을 알려 주어 수정할 수 있도록 돕는 시뮬레이션 도구입니다.
X가 없으면 무작위로 0이나 1이 표시되어 문제가 있다는 사실을 알아차리지 못할 수도 있습니다. X는 버그를 눈에 보이게 합니다.
일반적인 원인:
reg a; // 초기에는 X (알 수 없음)
wire b;
assign b = a; // a가 X이므로 b도 X가 됩니다Z (고임피던스)
Z는 고임피던스 또는 연결이 끊긴 상태를 나타냅니다.
- 아무것도 신호를 구동하고 있지 않을 때 신호는 Z입니다
- Z는 "이 전선이 연결되어 있지 않음"을 의미합니다
- 3상태 버퍼와 공유 버스에 사용됩니다
일반적인 원인:
wire c; // 초기에는 Z (연결되지 않음)
assign c = 1'bZ; // Explicitly set to ZVerilog에서 X와 Z 쓰기
0과 1처럼 X와 Z 값도 할당할 수 있습니다.
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는 보통 3상태 버스에 사용됩니다.
- 합성 과정에서 X와 Z는 다르게 처리될 수 있습니다.
- 시뮬레이션에서 X가 발생하지 않도록 reg 신호를 항상 초기화하세요.
챌린지
정확한 X 및 Z 값이 포함되도록 코드를 완성하세요.
해야 할 일:
a를 비트 1이 알 수 없는 4비트 값(나머지는 0)으로 설정하세요.c를 모든 비트가 알 수 없는 값(4비트)으로 설정하세요.d를 모든 비트가 고임피던스인 값(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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러