Sollten Sie alle Warnungen in Ihrem Verilog oder VHDL-Design entfernen? Warum oder warum nicht?

StackOverflow https://stackoverflow.com/questions/2722299

Frage

(regular) Software Ich habe in Unternehmen gearbeitet, wo die gcc-Option -Wall verwendet, um alle Warnungen anzuzeigen. Dann müssen sie behandelt werden. Mit nicht-triviale FPGA / ASIC-Design in Verilog oder VHDL gibt es oft viele viele Warnungen. Muss ich mir Sorgen über alle von ihnen? Haben Sie spezielle Techniken vorschlagen? Mein Flow ist vor allem für FPGAs (Altera und Xilinx), insbesondere aber ich nehme an den gleichen Regeln für ASIC-Design gelten würden, möglicherweise mehr, aufgrund der Unfähigkeit, den Entwurf zu ändern, nachdem es gebaut wird.

Update 2010.04.29:. Ich ursprünglich dachte, die Synthese und P & R (Place & Route) Warnungen, aber die Simulation Warnungen sind auch gültig

War es hilfreich?

Lösung

Hier ist meine Perspektive von der ASIC Welt (99% Verilog, VHDL 1%).

Wir sind bemüht, alle Warnungen aus unseren Log-Dateien zu beseitigen, da in der Regel wir Warnungen als Werkzeug interpretieren sagen uns, dass wir nicht vorhersehbare Ergebnisse erwarten.

Da gibt es viele Arten von Werkzeugen sind die Warnungen generieren können (Simulation / Debugger / Linter / Synthese / Äquivalenzprüfung, etc.), werde ich diese Diskussion konzentrieren sich auf Simulator Compiler Warnungen.

Wir Warnungen analysieren und kategorisieren sie in zwei Hauptgruppen: diejenigen, die wir erachten die Ergebnisse unserer Simulation nicht beeinflussen, und andere, die die Ergebnisse beeinflussen können. Erstens verwenden wir die Möglichkeiten eines Tool explizit so viele Warnungen wie möglich zu ermöglichen. Für die erste Gruppe, verwenden wir dann die Möglichkeiten eines Werkzeugs, um selektiv diese Warnmeldungen zu deaktivieren. Für die zweite Gruppe, reparieren wir den Code Verilog Quelle, um die Warnungen zu beseitigen, dann fördern wir die Warnungen zu Fehlern. Wenn irgendwelche Warnungen später in diesen Kategorien eingeführt werden, wir sie zwingen, sie zu beheben, bevor wir zu simulieren erlaubt sind.

Eine Ausnahme von der oben beschriebenen Methode ist für Drittanbieter-IP, deren Verilog-Code wir sind nicht erlaubt zu ändern.

Diese Methode funktioniert ziemlich gut für RTL-Simulationen, aber es wird viel schwieriger, wenn wir Gate-Simulationen unter Verwendung von Back-kommentierte SDF. Es gibt einfach nicht genug Zeit, um die buchstäblich Millionen von Warnungen zu analysieren und zu beseitigen. Das Beste, was wir tun können, ist Skripte zu verwenden (Perl), um die Protokolldateien zu analysieren und die Warnungen zu kategorisieren.

Insgesamt werden wir unser Bestes versuchen, um die Warnungen zu beseitigen, aber es ist nicht immer praktisch, dies zu tun.

Andere Tipps

Hier ist, was ich tue, als Referenz. Ich inspizieren alle Protokolldateien aus dem Werkzeug (en).

Für Altera Quartus II, die die Karte, fit und Merge Berichte enthält. Ich wende ich auch auf der Design Rule Check (DRC) Option und diese Datei überprüfen. Für einige Nachrichten, die leicht zu beheben sind, z.B. Port aus der Instanziierung oder falsche konstante Breite fehlt, ich fixieren. Andere, die mich zu suchen. Für diejenigen, die in den Kernen sind, z.B. eine Breite Mismatch, weil ich nicht die volle Leistung überlegen bin mit, ich sie in der .srf Datei unterdrückt markieren werden. Ich unterdrücken nur die spezifischen Nachrichten, nicht alle „ähnliche Meldungen“, da es andere sein können, entweder jetzt oder in der Zukunft, die Probleme sind.

Ich schrieb ein Skript, das einen Satz von regulären Ausdrücken in die Logdatei gilt Linien wegzuwerfen, die ich „kennen, sind OK“. Es hilft, aber man muss ein bisschen vorsichtig mit dem regexps sein - was sie jwz zu sagen hat:)

Der wichtigste Grund dafür, dass ich mir vorstellen kann ist simulations Synthese stimmen nicht überein. Synthese-Tools haben eine Menge Optimierungen (wie sie zu Recht sollte), und wenn Sie Lücken in Ihrem Design lassen Sie Schwierigkeiten fragen. Siehe IEEE 1364,1-2002 Einzelheiten zur Synthese Standard.

Es gibt keine Notwendigkeit, alle Warnungen zu entfernen, aber alle überprüft werden sollen. Um dies möglich zu machen für große Entwürfe, können einige Warnungen durch seine Art oder die ID unterdrückt werden.

Zum Beispiel geben einige Synthese-Tools eine Warnung, wenn ein Verilog parameter definiert ist und nicht während des Moduls Instanziierung zugewiesenen Wert. Für mich ist diese Warnung nur eine Beratung Verwendung localparam. Es ist eine gute Idee, sie durch seine ID (z LINT-01) zu unterdrücken.

In einigen Fällen mag ich die Warnungen sehen und sie nicht unterdrücken. Zum Beispiel gibt mein Werkzeug eine Warnung, wenn ich eine virtuelle Uhr von Einschränkungen definieren. Die Warnung bedeutet nicht, gibt es ein Problem, aber ich kann eine fehlende source einer Uhr fangen, die nicht virtuell sein sollte.

Manchmal Nicht-Existenz von Warnungen weisen darauf hin, ein Problem. Zum Beispiel, wenn ich eine Anwendung Variable ändern, sollte eine Warnung sein.

Es gibt zu viele Fälle. Manchmal ist die Warnung nicht zu vermeiden. Manchmal ist es schön Warnungen zu haben, um einige kritische Dinge zu überprüfen. Wenn der Designer weiß, was er / sie tut, gibt es kein Problem.

Einige Warnungen zu erwarten, und es gibt ein Problem, wenn Sie keine Warnung.

zum Beispiel, wenn Sie wirklich wollen wirklich einen Riegel aber es gibt keine Warnung über einen Riegel dann Ihre Synthese Folgern vielleicht nicht gemacht, was Sie wollten.

also nein, Sie wollen nicht immer zu ‚Deal‘ mit allen Warnungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top