Beim Schreiben von Verilog verwende ich verschiedene "Linters", die Fehler und Warnungen ausgeben. Dies sind mein Simulator (ModelSim), mein Compiler (Quartus II) sowie ein 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 sehen, was ich meine, beachten 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?
Antworten:
Keines der von Ihnen genannten Werkzeuge ist ein echtes Flusenwerkzeug. Diese Werkzeuge sollen Ihnen keine gute Flusenabdeckung bieten.
Ich sah zwei kommerzielle Flusenwerkzeuge und beide hatten Regeln zum Erkennen von nicht zurückgesetzten Flops.
Ich sehe drei Möglichkeiten:
Nun, # 2 ist vielleicht nicht so einfach. Ich weiß nicht, ob es 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 eine Skriptsprache kennen (Perl, Python, ...), benötigen Sie höchstens einen Tag, um ein Skript zu schreiben, das nach nicht zurückgesetzten Flops sucht. Wenn Sie keine Skriptsprache kennen, gibt es StackOverflow, in dem Sie um Hilfe bitten können - einige Tage und fertig. Dadurch wird Ihrer persönlichen Toolbox ein weiteres Tool hinzugefügt, das von Front-End-Designern sehr geschätzt wird - das Schreiben von Textverarbeitungsskripten.
Viel Glück!
quelle
Wenn ich Modelsim auf meinen VHDL-Designs ausführe, werden bei Time = 0ps Warnungen über Logik mit Eingangssignalen vom Typ 'X' oder 'U' ausgegeben. Ich habe die genaue Warnmeldung vergessen. Das Durchgehen dieser Warnungen kann mir sagen, was ich nicht initialisiert habe.
quelle
Ich verlasse mich eher auf Funktionstests als auf Flusenwerkzeuge. Ich neige dazu, das Zurücksetzen umzuschalten und Teile des Prüfstands erneut abzuspielen. Wenn das Gerät nach dem Zurücksetzen ordnungsgemäß funktioniert, haben Sie entweder den Statusbereich ausreichend zurückgesetzt oder Ihr Prüfstand ist nicht gut!
quelle
Manchmal geben die Designtools eine Reihe von Berichten aus, die Ihnen alle möglichen interessanten Informationen liefern. Xilinx nennt dies beispielsweise einen Kartenbericht, in dem angegeben wird, welche logischen Komponenten welchen physischen Komponenten zugeordnet wurden.
Im obigen Beispiel würde reg a einem FDCE (Flip Flop, D, mit asynchronem Löschen und Clock Enable) zugeordnet, während reg b einem FDE (Flip Flop, D und Clock Enable) zugeordnet würde. Dies würde Ihnen sagen, dass reg b nicht zurückgesetzt wurde.
quelle