Начальный блок Verilog
Набор операторов Verilog обычно выполняется последовательно при моделировании. Эти операторы помещаются внутри процедурного блокировать. В основном существует два типа процедурных блоки в Verilog - начальный и всегда
Синтаксис
initial
[single statement]
initial begin
[multiple statements]
end
Для чего используется начальный блок?
initial
Блок не поддается синтезу и, следовательно, не может быть преобразован в аппаратную схему с цифровыми элементами. Следовательно, исходные блоки не служат особой цели, кроме использования в симуляциях. Эти блоки в основном используются для инициализации переменных и управления портами дизайна с определенными значениями.
Когда начинается и заканчивается начальный блок?
initial
блок запускается в начале симуляции в единицу времени 0. Этот блок будет выполняться только один раз за всю симуляцию. Выполнение initial
блок завершается, как только все операторы внутри блока выполнены.
Изображение, показанное выше, имеет module
вызвало поведение, которое имеет два внутренних сигнала, называемых a и b. initial
блок имеет только один оператор, поэтому нет необходимости помещать оператор в begin
и end
. Этот оператор присваивает значение 2'b10 a, когда начальный блок запускается в момент времени 0 единиц.
Что произойдет, если есть элемент задержки?
Код, показанный ниже, имеет дополнительную инструкцию, которая присваивает некоторое значение сигналу b. Однако это происходит только через 10 единиц времени после выполнения предыдущего оператора. Это означает, что a сначала присваивается заданное значение, а затем, через 10 единиц времени, b присваивается 0.
Сколько начальных блоков разрешено в модуле?
Количество initial
не ограничено. блоки, которые могут быть определены внутри модуля.
Код, показанный ниже, имеет три initial
блоки, все из которых запускаются одновременно и работают параллельно. Однако в зависимости от операторов и задержек в каждом начальном блоке время, необходимое для завершения блока, может варьироваться.
В этом примере первый блок имеет задержку 20 единиц, а второй имеет общую задержку 50 единиц (10 + 40), а последний блок имеет задержку 60 единиц. Следовательно, симуляция занимает 60 единиц времени, поскольку по крайней мере один начальный блок все еще работает до 60 единиц времени.
$finish
— это системная задача Verilog, которая сообщает симулятору о завершении текущей симуляции.
Если бы последний блок имел задержку в 30 единиц времени, как показано ниже, симуляция закончилась бы на 30 единицах времени, тем самым убивая все остальные initial
блоки, активные в это время.
initial begin
#30 $finish;
end
Посмотрите приведенный ниже пример Flash, чтобы увидеть, как initial
блок выполняется в моделировании.
Щелкните здесь, чтобы просмотреть слайд-шоу с примером моделирования!
Verilog