Блок initial
Часть раздела Основы путешествия по Verilog на Coddy — урок 47 из 90.
В Verilog есть два процедурных блока: initial (выполняется один раз) и always (выполняется непрерывно). Теперь давайте рассмотрим блок initial.
Что такое блок Initial?
Блок initial выполняется только один раз в начале симуляции (в момент времени 0). Когда он завершается, он больше не выполняется.
В основном он используется в тестбенчах для:
- Установки начальных значений
- Генерации тестовых сигналов
- Отображения сообщений
- Запуска симуляции
Синтаксис
initial begin
// Операторы выполняются один раз, последовательно
endБазовый пример
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endВывод:
Simulation started
This runs onceИспользование блока initial для тестовых сигналов
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endЭто меняет a в моменты времени: 0, 10 и 20.
Initial vs Always
initial | always | |
|---|---|---|
| Runs | Once | Continuously (forever) |
| Use for | Testbenches, initialization | Hardware (flip-flops, counters) |
| Synthesizable? | No (simulation only) | Yes (with sensitivity list) |
Важные примечания
- Блоки
initialне синтезируемы — их нельзя превратить в аппаратное обеспечение - Используйте
initialтолько в тестбенчах - Если тестбенч содержит непрерывный тактовый сигнал (например,
always #5 clk = ~clk;), симуляция будет выполняться бесконечно, пока вы не вызовете$finish; с одним лишь блокомinitialсимулятор останавливается сам, когда не остается событий, но добавление$finishпо-прежнему является хорошей практикой
Задание
Добавьте пропущенный блок initial, который устанавливает a в 0, а затем через 10 единиц времени устанавливает a в 1.
Что нужно сделать:
- Добавьте
initial beginиend - Установите
a = 0 - Подождите
#10 - Установите
a = 1 - Добавьте $finish, чтобы завершить симуляцию
Попробуйте сами
module test;
reg a;
// TODO: Добавьте блок initial здесь
// Установите a = 0
// Подождите #10
// Установите a = 1
// Добавьте $finish; для завершения симуляции
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