Блок Initial
Часть раздела Основы путешествия по 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Аппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования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