Menu
CoddyTech

Специальные значения X и Z

Часть раздела Основы путешествия по Verilog на Coddy. Урок 17 из 90.

X и Z — это специальные значения, которые предоставляют нам информацию о состоянии аппаратного обеспечения во время симуляции.

X (неизвестное значение), для отладки

X появляется при симуляции, указывая на проблемы в вашей схеме.

Когда ты видишь X, это часто означает:

  • Неинициализированный регистр: ты забыл задать значение перед его использованием
  • Несколько источников управления: две разные сущности пытаются одновременно управлять одним и тем же проводом
  • Нарушение временных требований: сигнал изменился не вовремя, создав нестабильное состояние

X не существует в реальном оборудовании. Это средство моделирования, которое сообщает, что в вашей схеме что-то не так, чтобы вы могли исправить это до создания настоящего чипа.

Без X ты можешь видеть случайные 0 или 1 и не понимать, что возникла проблема. X делает ошибки заметными.

Распространённые причины:

reg a;           // Изначально X (неизвестное значение)
wire b;
assign b = a;    // b принимает значение X, потому что a имеет значение X

Z (Высокий импеданс)

Z обозначает состояние высокого импеданса или отключения.

  • Сигнал имеет значение Z, когда ничто им не управляет
  • Z означает «этот провод отключён»
  • Используется для буферов с тремя состояниями и общих шин

Распространённые причины:

wire c;          // Изначально Z (не подключено)
assign c = 1'bZ; // Explicitly set to Z

Запись X и Z в Verilog

Можно присваивать значения 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 могут обрабатываться по-разному
  • Всегда инициализируйте сигналы reg, чтобы избежать X при моделировании
challenge icon

Задание

Дополните код, указав правильные значения, содержащие X и Z.

Что нужно сделать:

  1. Установите для a 4-битное значение, в котором бит 1 неизвестен (остальные равны 0)
  2. Установите для c все биты неизвестными (4 бита)
  3. Установите для 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog