task

Задачи, в отличие от функций, могут возвращать несколько значений и содержать внутри себя конструкции управления временем. Как и у модулей, у задач порты могут быть трёх направлений: входные, выходные и двунаправленные.

Задачи делятся на статические и автоматические. По умолчанию все задачи статические. В статических задачах все переменные, объявленные внутри, являются общими для всех вызовов этой задачи. В автоматических все переменные являются приватными, то есть личными для каждого запуска задачи.

Синтаксис

// static task
task [name] (input [port_list], inout [port_list], output [port_list]);
  begin
    [statements]
  end
endtask

// automatic task
task automatic [name] (input [port_list], inout [port_list], output [port_list]);
  begin
    [statements]
  end
endtask

// Задача с пустым листом портов
task [name] ();
  begin
    [statements]
  end
endtask

Пример static task

Пример automatic task

Результат исполнения

Результат исполнения

Пояснение к примеру

В примере в задаче создаётся переменная i, которая в случае статической задачи общая для всех четырёх запусков задачи и по факту инициализируется в 0 один раз. В случае автоматической задачи переменная создаётся внутри каждой задачи и все созданные i являются независимыми друг от друга.

Last updated