Special Values X And 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Аппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog