Menu
Coddy logo textTech

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

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

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

X (Unknown) — для отладки

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

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

  • Неинициализированный регистр — вы забыли установить значение перед его использованием
  • Конфликт источников (multiple drivers) — два разных элемента пытаются управлять одним и тем же проводом одновременно
  • Нарушение временных параметров — сигнал изменился в неверное время, создав нестабильное состояние

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

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

Частые причины:

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

Z (High Impedance)

Z представляет собой high-impedance или отключенное состояние.

  • Сигнал имеет значение 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"

Они помогают отлаживать ваш проект, показывая, где сигналы unknown или отключены.

Важные примечания

  • X распространяется через логику (X AND 0 = 0, но X AND 1 = X)
  • Z обычно используется для шин с тремя состояниями
  • При синтезе X и Z могут обрабатываться по-разному
  • Всегда инициализируйте сигналы reg, чтобы избежать X при симуляции
challenge icon

Задание

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

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

  1. Установите a в 4-битное значение, где 1-й бит — unknown (остальные 0)
  2. Установите c так, чтобы все биты были unknown (4 бита)
  3. Установите d так, чтобы все биты были high-impedance (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Проверьте себя

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

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