Beim Schreiben von Verilog verwende ich eine Vielzahl von "Linters", die Fehler und Warnungen ausgeben. Dies sind mein Simulator (ModelSim), mein Compiler (Quartus II), zusammen mit einem Linter (Verilator). Zusammen habe ich eine gute Abdeckung für häufige Fallstricke, wie z. B. Fehlanpassungen der Busgröße und abgeleitete Latches.
Leider erkennt keines der drei Tools Register, die nicht zurückgesetzt werden. Um zu verstehen, was ich meine, bedenken Sie Folgendes.
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
Wie kann ich meine Tools automatisch Register erkennen lassen, die nicht zurückgesetzt werden?
Keines der von Ihnen erwähnten Werkzeuge ist ein echtes Fusselwerkzeug. Diese Werkzeuge sollen Ihnen keine gute Flusenabdeckung bieten.
Ich sah zwei kommerzielle Linting-Tools und beide hatten Regeln zum Erkennen von Non-Reset-Flops.
Ich sehe drei Möglichkeiten:
Nun, Nr. 2 ist vielleicht nicht so einfach. Ich weiß nicht, ob es da draußen gute kostenlose Linters gibt, und die professionellen sind teuer und erfordern viel Zeit für die Einrichtung.
#3 ist der Ansatz, den ich verwenden würde. Wenn Sie irgendeine Skriptsprache (Perl, Python, ...) beherrschen, werden Sie höchstens einen Tag brauchen, um ein Skript zu schreiben, das nach nicht zurückgesetzten Flops sucht. Wenn Sie keine Skriptsprache kennen, gibt es StackOverflow , wo Sie um Hilfe bitten können - ein paar Tage und Sie sind fertig. Damit wird Ihr persönlicher Werkzeugkasten um ein weiteres Tool erweitert, das unter Frontend-Designern sehr geschätzt wird – das Schreiben von Textverarbeitungsskripten.
Viel Glück!
Wenn ich Modelsim auf meinen VHDL-Designs ausführe, gibt es mir Warnungen bei Time=0ps über Logik mit Eingangssignalen vom Typ „X“ oder „U“. Ich habe die genaue Warnmeldung vergessen. Das Durchlaufen dieser Warnungen kann mir sagen, was ich nicht initialisiert habe.
Ich verlasse mich dabei eher auf Funktionstests als auf Linting-Tools. Ich neige dazu, das Zurücksetzen umzuschalten und Teile des Prüfstands erneut abzuspielen. Wenn das Gerät nach dem Zurücksetzen korrekt funktioniert, haben Sie entweder den Zustandsraum ausreichend zurückgesetzt, oder Ihr Prüfstand ist nicht gut!
Manchmal geben die Designtools eine Reihe von Berichten aus, die Ihnen alle möglichen interessanten Informationen liefern. Xilinx nennt dies beispielsweise einen Zuordnungsbericht, der Ihnen mitteilt, welche logischen Komponenten welchen physischen Komponenten zugeordnet wurden.
Im obigen Beispiel würde reg a einem FDCE (Flipflop, D, mit asynchronem Löschen und Taktfreigabe) zugeordnet werden, während reg b einem FDE (Flipflop, D und Taktfreigabe) zugeordnet werden würde. Dies würde Ihnen sagen, dass reg b keinen Reset hat.
Tim
user_1818839
Travisbartley