Erkennen Sie Register, die nicht zurückgesetzt werden

8

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?

Zufälliges Blau
quelle
2
"Register, die nicht zurückgesetzt werden" sind nicht unbedingt eine schlechte Sache (zumindest in einem Siliziumdesign), weshalb sie möglicherweise keine Warnungen in Flusenwerkzeugen sind. In der Regel wollen Sie nur die Register zurückzusetzen, müssen zurückgesetzt werden, so setzt auf Flip - Flops erhöht ihre Fläche und die Last auf dem Reset - Netzwerk hinzufügen. Wenn Sie einen 256-Bit-Datenbus und ein gültiges Ein-Bit-Signal haben, müssen Sie die Daten nicht zurücksetzen, wenn Sie den gültigen zurücksetzen.
Tim
Synplicity (Synthesewerkzeug) warnt vor solchen Dingen. Ärgerlich, weil sie oft absichtlich sind ... aber möglicherweise in Ihrer Situation helfen (vorausgesetzt, Synplicity macht Verilog, ich habe es nie versucht)
Brian Drummond
Die Frage besagt, dass verschiedene Linters verwendet werden, ModelSim, Quartus II und Verilator. Diese Werkzeuge verfügen nur über begrenzte Flusenfunktionen, und die Arten von Problemen, auf die sie prüfen, sind recht eng.
Travisbartley

Antworten:

3

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:

  1. Wenn die Antwort von David Kessner für Sie funktioniert - weit weg.
  2. Holen Sie sich ein anständiges Flusenwerkzeug, das die Arbeit erledigt.
  3. Schreiben Sie ein Skript, das nicht zurückgesetzte Flops erkennt.

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!

Vasiliy
quelle
4

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
1

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!

shuckc
quelle
0

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.

ajs410
quelle