Ответ 1
Это означает, что задача является повторной - элементы, объявленные в задаче, динамически распределяются, а не разделяются между различными вызовами задачи.
Вы видите - некоторые из нас делают Verilog... (ugh)
Что означает, объявляется ли задача с помощью ключевого слова auto в Verilog?
task automatic do_things;
input [31:0] number_of_things;
reg [31:0] tmp_thing;
begin
// ...
end
endtask;
Примечание. Этот вопрос в основном объясняется тем, что мне любопытно, есть ли на сайте какие-либо аппаратные программисты.:)
Это означает, что задача является повторной - элементы, объявленные в задаче, динамически распределяются, а не разделяются между различными вызовами задачи.
Вы видите - некоторые из нас делают Verilog... (ugh)
"автоматический" на самом деле означает "повторный участник". Сам термин украден из языков программирования - например, C имеет ключевое слово "auto" для объявления переменных как выделенных в стеке, когда область, в которой он выполняется, и освобождается впоследствии, так что несколько вызовов одной и той же области действия не видеть постоянные значения этой переменной. Причина, по которой вы, возможно, не слышали об этом ключевом слове в C, это то, что это класс хранения по умолчанию для всех типов:-) Альтернативы являются "статическими", что означает "распределить эту переменную статически (в одно глобальное местоположение в памяти) и ссылаться на эту же ячейку памяти во время выполнения программы, независимо от того, сколько раз функция вызывается" и "volatile", что означает "это регистр в другом месте моего SoC или что-то еще на другом устройстве, которое у меня нет компилятор, пожалуйста, не оптимизируйте чтение для меня, даже если вы считаете, что знаете мое значение из предыдущих чтений без промежуточных записей в коде".
"автоматический" предназначен для рекурсивных функций, но также для одновременной работы одной и той же функции в разных потоках исполнения. Например, если вы "разблокируете" N разных блоков (используя оператор Verilog fork- > join), и все они одновременно вызовут одну и ту же функцию, те же проблемы возникают как функция, вызывающая себя рекурсивно.
Во многих случаях ваш код будет в порядке, не объявляя задачу или функцию "автоматическим", но это хорошая практика, чтобы поместить ее туда, если вы не нуждаетесь в ней иначе.
Ключевое слово "автоматическое" также позволяет записывать рекурсивные функции (начиная с verilog 2001). Я считаю, что они должны быть синтезируемыми, если они снижаются, но я не уверен, что у них есть поддержка инструмента.
Я тоже, verloog!
Как говорит Уилл и Марти, автоматический режим был предназначен для рекурсивных функций.
Если нормальная (то есть не автоматическая) функция вызывается с разными значениями и обрабатывается имитатором в одном и том же срезе времени, возвращаемое значение является неопределенным. Это может быть довольно сложной ошибкой! Это только проблема моделирования, когда синтезирована логика будет правильной.
Автоматическое исправление этой функции.
В вычислениях компьютерная программа или подпрограмма называется повторной, если несколько вызовов могут безопасно выполняться одновременно (Википедия). Проще говоря, ключевое слово "автоматическое" делает его безопасным, когда несколько экземпляров задачи выполняются одновременно. : D