Menu
CoddyTech

Các giá trị đặc biệt X và Z

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 17 trên 90.

X và Z là các giá trị đặc biệt cung cấp cho chúng ta thông tin về trạng thái phần cứng trong quá trình mô phỏng.

X (chưa xác định), dùng để gỡ lỗi

X xuất hiện trong quá trình mô phỏng để báo hiệu thiết kế của bạn có vấn đề.

Khi bạn thấy X, điều đó thường có nghĩa là:

  • Thanh ghi chưa được khởi tạo: bạn quên đặt giá trị trước khi sử dụng
  • Nhiều bộ điều khiển: hai thứ khác nhau đang cố điều khiển cùng một dây dẫn cùng lúc
  • Vi phạm thời gian: tín hiệu thay đổi không đúng thời điểm, tạo ra trạng thái không ổn định

X không tồn tại trong phần cứng thực tế. Đây là công cụ mô phỏng cho bạn biết thiết kế có vấn đề để bạn sửa trước khi chế tạo chip thật.

Nếu không có X, bạn có thể thấy các số 0 hoặc 1 ngẫu nhiên mà không nhận ra có vấn đề. X giúp hiển thị rõ các bug.

Nguyên nhân phổ biến:

reg a;           // Ban đầu là X (chưa xác định)
wire b;
assign b = a;    // b trở thành X vì a là X

Z (trở kháng cao)

Z biểu thị trạng thái trở kháng cao hoặc ngắt kết nối.

  • Tín hiệu có giá trị Z khi không có gì điều khiển nó
  • Z có nghĩa là “dây này bị ngắt kết nối”
  • Được dùng cho bộ đệm ba trạng thái và các bus dùng chung

Các nguyên nhân phổ biến:

wire c;          // Ban đầu là Z (chưa kết nối)
assign c = 1'bZ; // Explicitly set to Z

Viết X và Z trong Verilog

Bạn có thể gán giá trị X và Z giống như 0 và 1:

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1;    // Bit 1 ở trạng thái trở kháng cao
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // Tất cả các bit đều ở trạng thái trở kháng cao

X và Z trong dạng sóng

Trong dạng sóng mô phỏng:

  • X hiển thị dưới dạng một đường màu đỏ hoặc chữ "X"
  • Z hiển thị dưới dạng một đường ở giữa hoặc chữ "Z"

Những công cụ này giúp bạn gỡ lỗi thiết kế bằng cách hiển thị vị trí tín hiệu chưa xác định hoặc bị ngắt kết nối.

Ghi chú quan trọng

  • X lan truyền qua logic (X AND 0 = 0, nhưng X AND 1 = X)
  • Z thường được dùng cho các bus ba trạng thái
  • Trong quá trình tổng hợp, X và Z có thể được xử lý khác nhau
  • Luôn khởi tạo các tín hiệu reg để tránh giá trị X trong mô phỏng
challenge icon

Thử thách

Hoàn thành code bằng cách viết các giá trị chính xác có chứa X và Z.

Cần làm:

  1. Đặt a thành giá trị 4 bit, trong đó bit 1 chưa xác định, các bit còn lại bằng 0
  2. Đặt c để tất cả các bit đều chưa xác định (4 bit)
  3. Đặt d để tất cả các bit đều ở trạng thái trở kháng cao (4 bit)

Tự làm thử

module xz_challenge;
  wire [3:0] a, c, d;
  
  assign a = 4'b______;   // Bit 1 is X (others 0)
  assign c = 4'b______;   // Tất cả các bit đều là 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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online