Специальные значения X и Z
Часть раздела Основы путешествия по Verilog на Coddy. Урок 17 из 90.
X и Z — это специальные значения, которые дают нам информацию о состоянии оборудования во время симуляции.
X (неизвестное значение), для отладки
X появляется в симуляции, указывая на проблемы в вашей схеме.
Когда вы видите X, это часто означает:
- Неициализированный регистр: вы забыли задать значение перед его использованием
- Несколько источников управления: две разные сущности одновременно пытаются управлять одним и тем же проводом
- Нарушение временных параметров: сигнал изменился не в тот момент, создав нестабильное состояние
X не существует в реальном оборудовании. Это инструмент симуляции, который сообщает, что в вашей схеме что-то не так, чтобы вы могли исправить это до создания настоящего чипа.
Без X вы можете увидеть случайные 0 или 1 и не понять, что есть проблема. X делает ошибки видимыми.
Распространённые причины:
reg a; // Изначально X (неизвестно)
reg b;
assign b = a; // b становится X, потому что a равен XZ (Высокое сопротивление)
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»
Они помогают отлаживать проект, показывая, где сигналы неизвестны или отключены.
Важные примечания
- X распространяется через логику (X AND 0 = 0, но X AND 1 = X)
- Z обычно используется для шин с тремя состояниями
- При синтезе X и Z могут обрабатываться по-разному
- Всегда инициализируйте сигналы reg, чтобы избежать X в симуляции
Задание
Завершите код, записав правильные значения, содержащие X и Z.
Что нужно сделать:
- Задайте
a4-битное значение, в котором bit 1 имеет значение unknown (остальные — 0) - Задайте
cзначение, в котором все bits имеют значение unknown (4 бита) - Задайте
dзначение, в котором все bits имеют значение 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Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog