Специальные значения 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 равен XZ (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 при симуляции
Задание
Завершите код, записав правильные значения, содержащие X и Z.
Что нужно сделать:
- Установите
aв 4-битное значение, где 1-й бит — unknown (остальные 0) - Установите
cтак, чтобы все биты были unknown (4 бита) - Установите
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial