Question

Qu'est-ce que cela signifie si une tâche est déclarée avec le mot-clé automatique dans Verilog ?

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

Note:Cette question est principalement due au fait que je suis curieux de savoir s'il y a des programmeurs matériels sur le site.:)

Était-ce utile?

La solution

Cela signifie que la tâche est réentrante : les éléments déclarés dans la tâche sont alloués dynamiquement plutôt que partagés entre les différentes invocations de la tâche.

Vous voyez, certains d'entre nous utilisent Verilog...(Pouah)

Autres conseils

« automatique » signifie en fait « rentrant ».Le terme lui-même est volé aux langages logiciels - par exemple, C a le mot-clé "auto" pour déclarer les variables comme étant allouées sur la pile lorsque la portée dans laquelle elles se trouvent est exécutée, et libérées ensuite, de sorte que plusieurs invocations de la même portée le fassent. ne voit pas les valeurs persistantes de cette variable.La raison pour laquelle vous n'avez peut-être pas entendu parler de ce mot-clé en C est qu'il s'agit de la classe de stockage par défaut pour tous les types :-) Les alternatives sont "statiques", ce qui signifie "allouer cette variable de manière statique (à un seul emplacement global en mémoire), et faire référence à ce même emplacement mémoire tout au long de l'exécution du programme, quel que soit le nombre de fois où la fonction est invoquée", et "volatile", ce qui signifie "il s'agit d'un registre ailleurs sur mon SoC ou quelque chose sur un autre appareil que je n'ai pas contrôle sur;compilateur, s'il vous plaît, n'optimisez pas les lectures, même si vous pensez connaître ma valeur grâce aux lectures précédentes sans écriture intermédiaire dans le code".

"automatique" est destiné aux fonctions récursives, mais également à l'exécution simultanée de la même fonction dans différents threads d'exécution.Par exemple, si vous « bifurquez » N blocs différents (à l'aide de l'instruction fork->join de Verilog) et que vous leur demandez tous d'appeler la même fonction en même temps, les mêmes problèmes surviennent lorsqu'une fonction s'appelle de manière récursive.

Dans de nombreux cas, votre code fonctionnera très bien sans déclarer la tâche ou la fonction comme "automatique", mais c'est une bonne pratique de l'insérer ici, à moins que vous n'en ayez spécifiquement besoin.

Le mot clé "automatic" permet également d'écrire des fonctions récursives (depuis Verilog 2001).Je pense qu'ils devraient être synthétisables s'ils atteignent le fond, mais je ne suis pas sûr s'ils disposent d'un support d'outils.

Moi aussi je fais Verilog !

Comme le disent Will et Marty, l'automatique était destiné à des fonctions récursives.

Si une situation normale (c.-à-d.pas automatique) la fonction est appelée avec des valeurs différentes et traitée par le simulateur dans la même tranche de temps, la valeur renvoyée est indéterminée.Cela peut être un bug assez difficile à détecter !Ce n'est qu'un problème de simulation, une fois synthétisée, la logique sera correcte.

Rendre la fonction automatique corrige ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top