Différence entre always_ff, always_comb, always_latch et toujours
Je suis totalement confus parmi ces 4 conditions: always_ff
, always_comb
, always_latch
et always
. Comment et dans quel but peut-il être utilisé?
OriginalL'auteur user2138826 | 2014-04-16
Vous devez vous connecter pour publier un commentaire.
always
est le principal type de processus de Verilog, l'autre est uninitial
qui est présenté une fois au début d'une simulation.always_ff @(posedge clk)
:Représente un flip-flop (ff), le processus est déclenché (exécutée) sur chaque front positif de l'horloge. Cela remplace
always @(posedge clk)
. C'est le cas de non-blocage (<=
) affectations devraient être utilisés, comme cela imite la manière d'un flip-flop transferts de données.always_latch
: est de représenter les loquets.D'utilisation serait :
Cela remplace :
always_comb
:Est pour la logique combinatoire, c'est le remplacement de
always @*
lorsque vous ne voulez pas d'un loquet. Maintenant, nous pouvons maintenant faire la différence entre notre intention de conception entre le moment où nous voulons et ne voulons pas les loquets.La SystemVerilog noms
always_ff
,always_latch
etalways_comb
ont des critères plus stricts pour quand ils sont activés, ce qui signifie la possibilité pour RTL à la Porte de niveau post (synthèse) inadéquation est réduite. Cela veut dire que le ne sont pas 100% équivalent à il yalways @
contre-partie et peut changer certains de simulation de comportement.always_comb
n'est pas équivalent àalways @*
, et vous devez ne plus utiliseralways @*
. La principale raison est quealways @*
ne fonctionne pas lorsque des constantes ou des paramètres interviennent dans la logique. Ils ne génèrent pas d'événements pour déclencher l'exécution du bloc.always_comb
garanties d'exécution à l'instant 0.Merci @dave_59 j'ai essayé de couvrir l'exacte égalité avec mon dernier paragraphe. Ils sont SystemVerilog et IPs sont souvent de conception pour être compatible avec les Verilog, ainsi, l'utilisation de
always @*
continuera. Considérant la façon dont beaucoup de débutants de poster des questions avec le manuel de la sensibilité de la liste je pense que nous avons un long chemin à parcourir avant dealways_comb
devient la norme.Yep, il suffit de penser combien de temps il prend les gens pour passer de l'utilisation de commentaire pragmas comme
//synthesis translate on
à l'aide de `ifdef SYNTHESIS
. Cela fait plus de 25 ans depuis `ifdef a été ajouté à Verilog.La norme IEEE utilise
always_latch
avec les non-blocage des affectations. Aucune raison spécifique que vous utilisez le blocage des affectations dans votre réponse?Je vois
always_latch
comme une extension dealways @*
.<=
Modèles flip-flop comportement et lorsque le verrou est ouvert, il est transparent donc je pense que=
est plus approprié. et je n'avais pas remarqué qu'ils utilisent non-bloquante (<=
) dans la LRM.OriginalL'auteur Morgan