Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Освоение блоков операторов 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

  1. Ускорение генерации инсайтов через автоматизированную подготовку данных
  2. Освоение Verilog: полное руководство по проектированию цифровых схем
  3. Освоение конкатенации в Verilog: практическое руководство
  4. Основы Verilog: краткий обзор
  5. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  6. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  7. Управление потоком в Verilog: IF-ELSE, Case, циклы и не только
  8. Мастерство функций в Verilog для эффективного RTL дизайна
  9. Понимание семантики планирования в Verilog: тайминг, события и порядок выполнения
  10. Повысьте зрелость S&OP, данных и систем планирования для будущего успеха