Специальные значения 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 имеет значение XZ (Высокий импеданс)
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 при моделировании
Задание
Дополните код, указав правильные значения, содержащие X и Z.
Что нужно сделать:
- Установите для
a4-битное значение, в котором бит 1 неизвестен (остальные равны 0) - Установите для
cвсе биты неизвестными (4 бита) - Установите для
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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