Lorsque vous déclarez quelque chose en entrée ou en sortie, comment savoir si vous devez également le déclarer en tant que reg
ou wire
?
reg
et wire
spécifient comment l'objet sera affecté et n'ont donc de sens que pour les sorties.
Si vous envisagez d'affecter votre sortie en code séquentiel, comme dans un bloc always
, déclarez-le en tant que reg
(ce qui est vraiment un terme impropre pour "variable" dans Verilog). Sinon, ce devrait être un wire
, qui est également la valeur par défaut.
Un output reg foo
est juste un raccourci pour output foo_wire; reg foo; assign foo_wire = foo
. C'est quand même utile d'enregistrer cette sortie. Je ne pense pas input reg
est significatif pour module
(peut-être task
). input wire
et output wire
sont les mêmes que input
et output
: c'est juste plus explicite.
Le compilateur de code Verilog que vous utilisez dictera ce que vous avez à faire. Si vous utilisez une syntaxe illégale, vous obtiendrez une erreur de compilation.
Un output
doit également être déclaré comme reg
uniquement s'il est attribué à l'aide d'une "affectation procédurale". Par exemple:
output reg a;
always @* a = b;
Il n'est pas nécessaire de déclarer un output
comme wire
.
Il n'est pas nécessaire de déclarer un input
comme wire
ou reg
.
le voir dans le domaine des circuits numériques
cela dépend donc complètement de votre utilisation, que vous ayez besoin de créer un registre et de le cocher en fonction de la liste de sensibilité ou que vous souhaitiez créer une affectation de port/broche
fondamentalement, reg est utilisé pour stocker des valeurs. Par exemple, si vous voulez un compteur (qui comptera et aura donc une certaine valeur pour chaque compte), nous utiliserons un reg. D'un autre côté, si nous avons juste un signal simple avec 2 valeurs 0 et 1, nous le déclarerons comme fil.Le fil ne peut pas contenir de valeurs.