Pergunta

O que significa se uma tarefa for declarada com a palavra-chave automática no Verilog?

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

Observação:Esta pergunta ocorre principalmente porque estou curioso para saber se há algum programador de hardware no site.:)

Foi útil?

Solução

Isso significa que a tarefa é reentrante - os itens declarados na tarefa são alocados dinamicamente em vez de compartilhados entre diferentes invocações da tarefa.

Você vê - alguns de nós fazemos Verilog...(eca)

Outras dicas

"automático" significa de fato "reentrante".O termo em si foi roubado de linguagens de software - por exemplo, C tem a palavra-chave "auto" para declarar variáveis ​​como alocadas na pilha quando o escopo em que está é executado e desalocada posteriormente, de modo que múltiplas invocações do mesmo escopo não sejam executadas. não vejo valores persistentes dessa variável.A razão pela qual você pode não ter ouvido falar desta palavra-chave em C é que ela é a classe de armazenamento padrão para todos os tipos :-) As alternativas são "estáticas", que significa "alocar esta variável estaticamente (para um único local global na memória), e referem-se a este mesmo local de memória durante toda a execução do programa, independentemente de quantas vezes a função é invocada", e "volátil", que significa "este é um registro em outro lugar no meu SoC ou algo em outro dispositivo que eu não tenho controle sobre;compilador, por favor, não otimize as leituras para mim, mesmo quando você achar que sabe meu valor de leituras anteriores sem gravações intermediárias no código".

"automático" destina-se a funções recursivas, mas também para executar a mesma função em diferentes threads de execução simultaneamente.Por exemplo, se você "bifurcar" N blocos diferentes (usando a instrução fork->join do Verilog) e fazer com que todos chamem a mesma função ao mesmo tempo, os mesmos problemas surgirão quando uma função se autodenomina recursivamente.

Em muitos casos, seu código ficará bem sem declarar a tarefa ou função como "automática", mas é uma boa prática colocá-lo lá, a menos que você precise especificamente que seja de outra forma.

A palavra-chave "automática" também permite escrever funções recursivas (desde verilog 2001).Acredito que eles deveriam ser sintetizáveis ​​se chegarem ao fundo do poço, mas não tenho certeza se eles têm suporte de ferramenta.

Eu também faço verilog!

Como dizem Will e Marty, o automático foi planejado para funções recursivas.

Se for normal (ou seja,não automática) é chamada com valores diferentes e processada pelo simulador no mesmo intervalo de tempo, o valor retornado é indeterminado.Isso pode ser um bug bastante difícil de detectar!Este é apenas um problema de simulação, quando sintetizado a lógica estará correta.

Tornar a função automática corrige isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top