Освоение блоков операторов Verilog: последовательное и параллельное выполнение
Существуют способы группировать набор операторов в синтаксически эквивалентный одиночный оператор — блоки операторов. Два вида: последовательные и параллельные.
Последовательные (Sequential)
Операторы оборачиваются в begin и end и выполняются последовательно в заданном порядке. Значения задержки трактуются относительно времени выполнения предыдущего оператора. После завершения всех операторов управление передаётся дальше.
module design0; bit [31:0] data;
initial begin
#10 data = 8'hfe; $display ("[Time=%0t] data=0x%0h", $time, data);
#20 data = 8'h11; $display ("[Time=%0t] data=0x%0h", $time, data);
end endmodule
Первый оператор выполнится в 10 единиц времени, второй — в 30 (20 после предыдущего).
Simulation Log: Time=10 data=0xfe, Time=30 data=0x11.
Параллельные (Parallel)
Параллельный блок выполняет операторы параллельно, задержки обеспечивают временное упорядочение присваиваний. Операторы запускаются параллельно, оборачивая их в fork и join.
initial begin #10 data = 8'hfe;
fork #20 data = 8'h11; #10 data = 8'h00; join end
fork-join запускается после оператора в 10 единиц времени. Операторы внутри выполняются параллельно: первым сработает присваивание 8'h00 (задержка 10 после запуска fork-join). Через 10 единиц сработает первое присваивание 8'h11.
initial begin #10 data = 8'hfe;
fork #10 data = 8'h11;
begin #20 data = 8'h00; #30 data = 8'haa; end
join end
Внутри fork-join есть begin-end блок — его операторы выполняются последовательно, но сам блок запускается параллельно с другими. data получит 8'h11 в 20, 8'h00 в 30, 8'haa в 60 единиц времени.
Именование блоков
И последовательные, и параллельные блоки можно именовать, добавляя : имя_блока после begin и fork. Тогда на блок можно ссылаться в операторе disable.
begin : name_seq [statements] end
fork : name_fork [statements] join
Verilog
- Ускорение генерации инсайтов через автоматизированную подготовку данных
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Основы Verilog: краткий обзор
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Управление потоком в Verilog: IF-ELSE, Case, циклы и не только
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание семантики планирования в Verilog: тайминг, события и порядок выполнения
- Повысьте зрелость S&OP, данных и систем планирования для будущего успеха