Initial Block
Часть раздела Основы путешествия по Verilog на Coddy. Урок 47 из 90.
В Verilog есть два процедурных блока: initial (выполняется один раз) и always (выполняется непрерывно). Теперь рассмотрим блок initial.
Что такое блок Initial?
Блок initial выполняется только один раз в начале симуляции (в момент time 0). Когда он завершает работу, он больше не выполняется.
В основном используется в тестовых стендах для:
- Установки начальных значений
- Генерации тестовых сигналов
- Отображения сообщений
- Запуска симуляции
Синтаксис
initial begin
// Операторы выполняются один раз, последовательно
endБазовый пример
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endВывод:
Simulation started
This runs onceИспользование initial block для тестовых сигналов
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endЭто изменяет a в моменты времени: 0, 10 и 20.
initial vs всегда
initial | always | |
|---|---|---|
| Runs | Once | Непрерывно (бесконечно) |
| Используется для | Тестбенчей, инициализации | Аппаратного обеспечения (триггеров, счётчиков) |
| Синтезируемый? | Нет (только симуляция) | Да (со списком чувствительности) |
Важные примечания
initial-блоки не подлежат синтезу. Их нельзя преобразовать в аппаратное обеспечение- Используйте
initialтолько в тестбенчах - Если тестбенч содержит свободно работающие часы (например,
always #5 clk = ~clk;), simulation runs бесконечно, если не вызвать$finish; при наличии толькоinitial-блока симулятор останавливается сам, когда не остаётся событий, но добавление$finishвсё равно является хорошей практикой
Задание
Добавьте пропущенный блок initial, который устанавливает a в 0, затем после 10 единиц времени устанавливает a в 1.
Что нужно сделать:
- Добавьте
initial beginиend - Установите
a = 0 - Подождите
#10 - Установите
a = 1 - Добавьте $finish, чтобы завершить simulation
Попробуйте сами
module test;
reg a;
// TODO: Добавьте блок initial здесь
// Установите a = 0
// Подождите #10
// Установите a = 1
// Добавьте $finish; для завершения симуляции
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