Domanda

Cosa significa se un'attività viene dichiarata con la parola chiave automatic in Verilog?

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

Nota:Questa domanda è principalmente perché sono curioso di sapere se ci sono programmatori hardware sul sito.:)

È stato utile?

Soluzione

Significa che l'attività è rientrante: gli elementi dichiarati all'interno dell'attività vengono allocati dinamicamente anziché condivisi tra diverse invocazioni dell'attività.

Vedi, alcuni di noi usano Verilog...(ugh)

Altri suggerimenti

"automatico" significa infatti "rientrante".Il termine stesso è stato rubato dai linguaggi software: ad esempio, C ha la parola chiave "auto" per dichiarare le variabili come allocate nello stack quando viene eseguito l'ambito in cui si trova e successivamente deallocate, in modo che non vengano eseguite più invocazioni dello stesso ambito non vedere i valori persistenti di quella variabile.Il motivo per cui potresti non aver sentito parlare di questa parola chiave in C è che è la classe di archiviazione predefinita per tutti i tipi :-) Le alternative sono "statiche", che significa "alloca questa variabile staticamente (in una singola posizione globale in memoria), e fare riferimento a questa stessa posizione di memoria durante l'esecuzione del programma, indipendentemente da quante volte la funzione viene invocata", e "volatile", che significa "questo è un registro altrove sul mio SoC o qualcosa su un altro dispositivo che non ho controllo su;compilatore, per favore non ottimizzare le letture, anche quando pensi di conoscere il mio valore dalle letture precedenti senza scritture intermedie nel codice".

"automatico" è destinato a funzioni ricorsive, ma anche all'esecuzione simultanea della stessa funzione in diversi thread di esecuzione.Ad esempio, se si "biforca" da N blocchi diversi (usando l'istruzione fork->join di Verilog) e si fa in modo che tutti chiamino la stessa funzione contemporaneamente, sorgono gli stessi problemi quando una funzione si chiama ricorsivamente.

In molti casi, il tuo codice andrà bene senza dichiarare l'attività o la funzione come "automatica", ma è buona pratica inserirlo lì a meno che tu non abbia specificatamente bisogno che sia diversamente.

La parola chiave "automatic" consente anche di scrivere funzioni ricorsive (da Verilog 2001).Credo che dovrebbero essere sintetizzabili se toccano il fondo, ma non sono sicuro che abbiano il supporto degli strumenti.

Anch'io faccio Verilog!

Come dicono Will e Marty, l'automatico era destinato a funzioni ricorsive.

Se un normale (cioènon automatico) la funzione viene chiamata con valori diversi ed elaborata dal simulatore nello stesso intervallo di tempo, il valore restituito è indeterminato.Può essere un bug piuttosto difficile da individuare!Questo è solo un problema di simulazione, una volta sintetizzata la logica sarà corretta.

Rendere la funzione automatica risolve questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top