Вопрос

Что означает, если задача объявлена ​​с ключевым словом auto в Verilog?

task automatic do_things;
  input [31:0] number_of_things;
  reg [31:0] tmp_thing;
  begin
    // ...
  end
endtask;

Примечание:Этот вопрос в основном потому, что мне интересно, есть ли на сайте программисты по железу.:)

Это было полезно?

Решение

Это означает, что задача является реентерабельной — элементы, объявленные в задаче, распределяются динамически, а не распределяются между различными вызовами задачи.

Видите ли, некоторые из нас используют Verilog...(фу)

Другие советы

«автоматический» на самом деле означает «повторный вход».Сам термин украден из языков программирования — например, в C есть ключевое слово «auto» для объявления переменных как выделяемых в стеке при выполнении области, в которой они находятся, а затем освобождаемых, так что несколько вызовов одной и той же области действия не видеть постоянные значения этой переменной.Причина, по которой вы, возможно, не слышали об этом ключевом слове в C, заключается в том, что это класс хранения по умолчанию для всех типов :-) Альтернативой является «статический», что означает «выделить эту переменную статически (в одном глобальном месте в памяти), и ссылаться на одну и ту же ячейку памяти на протяжении всего выполнения программы, независимо от того, сколько раз вызывается функция», и «изменчивый», что означает «это регистр где-то в моем SoC или что-то на другом устройстве, которого у меня нет». контроль за;компилятор, пожалуйста, не оптимизируйте мне чтение, даже если вы думаете, что знаете мою ценность из предыдущих операций чтения без промежуточных записей в коде».

«автоматический» предназначен для рекурсивных функций, а также для одновременного запуска одной и той же функции в разных потоках выполнения.Например, если вы «разветвляете» N разных блоков (используя оператор Verilog fork->join) и заставляете их все вызывать одну и ту же функцию одновременно, возникают те же проблемы, что и при рекурсивном вызове функции.

Во многих случаях ваш код будет работать нормально, не объявляя задачу или функцию как «автоматическую», но рекомендуется помещать их туда, если только вам специально не нужно, чтобы это было иначе.

Ключевое слово «automatic» также позволяет вам писать рекурсивные функции (начиная с verilog 2001).Я считаю, что их можно будет синтезировать, если они достигнут дна, но я не уверен, есть ли у них инструментальная поддержка.

Я тоже делаю verilog!

Как говорят Уилл и Марти, автомат был предназначен для рекурсивных функций.

Если нормальный (т.не автоматическая) функция вызывается с разными значениями и обрабатывается симулятором в одном и том же интервале времени, возвращаемое значение является неопределенным.Обнаружить эту ошибку может быть довольно сложно!Это всего лишь проблема моделирования, при синтезе логика будет правильной.

Это исправляется автоматическим запуском функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top