Lors de l'écriture de Verilog, j'utilise une variété de "linters" qui donneront des erreurs et des avertissements. Ce sont mon simulateur (ModelSim), mon compilateur (Quartus II), ainsi qu'un linter (Verilator). Ensemble, j'ai une bonne couverture pour les pièges courants, tels que les décalages de taille de bus et les verrous déduits.
Malheureusement, aucun des trois outils ne détecte les registres qui ne sont pas réinitialisés. Pour voir ce que je veux dire, considérez ce qui suit.
reg a;
reg b;
always @(posedge clk_i or posedge rst_i) begin
if(rst_i) begin
a <= 1'b0; // Reset a
// Ooops, forgot to reset b
end else begin
// Do stuff with a and b
end
end
Comment puis-je faire en sorte que mes outils détectent automatiquement les registres qui ne sont pas réinitialisés?
Réponses:
Aucun des outils que vous avez mentionnés n'est un véritable outil à peluches. Ces outils ne sont pas censés vous donner une bonne couverture de peluches.
J'ai vu deux outils de charpie commerciaux et les deux avaient des règles pour détecter les flops non réinitialisés.
Je vois trois options:
Maintenant, # 2 n'est peut-être pas aussi simple. Je ne sais pas s'il existe de bons linters gratuits, et les professionnels sont chers et vous prendront beaucoup de temps à installer.
# 3 est l'approche que j'utiliserais. Si vous connaissez un langage de script (Perl, Python, ...), il vous faudra au maximum un jour pour écrire un script qui recherche les flops non réinitialisés. Si vous ne connaissez aucun langage de script, il y a StackOverflow où vous pouvez demander de l'aide - quelques jours et vous avez terminé. Cela ajoutera également un autre outil dans votre boîte à outils personnelle qui est très apprécié des concepteurs frontaux - l'écriture de scripts de traitement de texte.
Bonne chance!
la source
Lorsque j'exécute Modelsim sur mes conceptions VHDL, cela me donne des avertissements à Time = 0ps sur la logique avec des signaux d'entrée de type «X» ou «U». J'oublie le message d'avertissement exact. Le fait de parcourir ces avertissements peut me dire ce que je n'ai pas initialisé.
la source
Je me fie à des tests fonctionnels plutôt qu'à des outils de peluchage pour cela, j'ai tendance à basculer la réinitialisation et à rejouer des parties du banc de test. Si l'appareil fonctionne correctement après la réinitialisation, vous avez soit réinitialisé suffisamment l'espace d'état, soit votre banc d'essai n'est pas bon!
la source
Parfois, les outils de conception génèrent une série de rapports qui vous fournissent toutes sortes d'informations intéressantes. Par exemple, Xilinx peut appeler cela un rapport de carte, qui vous indique quels composants logiques ont été mappés à quels composants physiques.
Dans l'exemple ci-dessus, reg a serait mappé sur un FDCE (Flip flop, D, avec effacement asynchrone et activation de l'horloge), tandis que reg b serait mappé sur un FDE (Flip flop, D et activation de l'horloge). Cela vous dirait que reg b n'a pas de réinitialisation.
la source