Supprimer « reg » de la déclaration de sortie et le code devrait fonctionner (par défaut le type de sortie de fil). Il y a deux choses que la plupart des ingénieurs autodidactes ou mal formés ont du mal à comprendre dans Verilog: (1) bloquer les devoirs non-bloquants (voir mon article sur ce sujet: http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf) et (2) vs- fil. Allons éclaircir ce dernier sujet en ce moment.
Tout sur la gauche à la main-Side (LHS) ou une affectation de procédure (toujours initiale, la tâche, la fonction) doit être déclarée comme un type variable (généralement un reg). Tout le reste dans la langue est un net (généralement un fil). Aucune exception. C'est vraiment simple. Je ne connais aucun livre Verilog qui le dit tout simplement.
Comment cela est-il arrivé? J'ai demandé à Phil Moorby, bon ami et inventeur du langage Verilog, "pourquoi reg?" Phil m'a dit que quand il a inventé Verilog, il n'y avait pas d'outils de synthèse et il pensait que tout ce qui sortait d'un bloc allait être un registre. Il avait tort, et maintenant nous sommes coincés avec ce mot-clé "reg".
J'ai essayé d'obtenir cela a changé les comités Veirlog et SystemVerilog depuis plus d'une décennie.Je voudrais déclarer tout comme le fil et la première utilisation déterminerait si le «fil» se comporte comme un reg (première attribution d'un bloc procédural et la dernière attribution gagne) ou se comporte comme un fil (première attribution provient d'une source motrice comme un sortie de module ou affectation continue et plusieurs pilotes sont résolus comme dans Verilog aujourd'hui) et il serait illégal de faire à la fois des assignations procédurales et des assignations de pilotes au même signal. Hélas, je n'ai pas eu assez de votes au comité pour réussir à faire adopter cette proposition.
C'est l'erreur que je fais le plus souvent dans mon propre code. Il suffit de s'habituer à des messages d'erreur comme, "affectation illégale LHS" ou "affectation illégale à fil". Ils signifient tous les deux la même chose, vous avez oublié de déclarer vos regs.
Cordialement - Cummings Cliff - Verilog & SystemVerilog Guru
Merci pour la réponse complète! La logique cadencée est bien présente dans l'assignation, je l'ai simplement omise ici pour plus de simplicité (il s'avère qu'il aurait peut-être mieux valu l'ajouter) = D –