Специальные значения 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 представляет собой высокоимпедансное или разомкнутое состояние.
- Сигнал имеет состояние Z, когда он ничем не управляется
- Z означает «этот провод отсоединен»
- Используется для буферов с тремя состояниями и общих шин
Распространенные причины:
wire c; // Изначально Z (не подключено)
assign c = 1'bZ; // Явно установлено в ZЗапись X и Z в Verilog
Вы можете присваивать значения X и Z точно так же, как 0 и 1:
reg [3:0] data;
data = 4'b10X0; // Бит 1 неизвестен (индексация от 0 справа)
data = 4'b01Z1; // Бит 1 находится в состоянии высокого импеданса
data = 4'bXXXX; // Все биты неизвестны
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.
Что нужно сделать:
- Установите
aв 4-битное значение, где бит 1 неизвестен (остальные 0) - Установите
cтак, чтобы все биты были неизвестны (4 бита) - Установите
dтак, чтобы все биты были в состоянии высокого импеданса (4 бита)
Шпаргалка
X (Unknown) и Z (High-Impedance) — это специальные значения симуляции в Verilog.
X — неизвестное состояние (только для симуляции, не существует в реальном железе):
- Неинициализированный
regначинается с X - Причины: неинициализированные регистры, несколько драйверов (конфликт сигналов), нарушения временных характеристик
- Распространяется через логику (X AND 1 = X, но X AND 0 = 0)
- Отображается в виде красной линии на временных диаграммах
Z — высокоимпедансное / отключенное состояние:
wireбез драйвера начинается с Z- Используется для буферов с тремя состояниями и общих шин
- Отображается в виде средней линии на временных диаграммах
Запись X и Z в Verilog:
reg [3:0] data;
data = 4'b10X0; // Бит 1 неизвестен
data = 4'b01Z1; // Бит 1 в состоянии высокого импеданса
data = 4'bXXXX; // Все биты неизвестны
data = 4'bZZZZ; // Все биты в состоянии высокого импеданса
assign c = 1'bZ; // Явное присвоение проводу значения ZПопробуйте сами
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