Ich schreibe einen Controller für ein Low-Power-/mobiles DDR-Modul auf meinem FPGA. Um das Debuggen zu ermöglichen, verwende ich ein in Verilog geschriebenes Funktionsmodell. Darin ist die Setup- und Haltezeit für einige Signale auf 1,5 ns eingestellt. Wenn ich alles richtig verstehe, bedeutet dies, dass sich das Signal nicht 'innerhalb' von 1,5 ns einer steigenden Taktflanke ändern kann.
Die RTL, die ich geschrieben habe, enthält jedoch kein Timing, sodass sich das Signal scheinbar sofort ändert, was zu Haltezeitwarnungen führt.
Einerseits mache ich mir keine allzu großen Sorgen; Ich bekomme nur Warnungen, und ich glaube, dass wir während eines Projekts für meine Universität aufgefordert wurden, diese Fehler einfach zu ignorieren.
Andererseits mag ich es nicht, Warnungen zu ignorieren. Der Hersteller hätte diese Warnungen nicht implementiert, wenn sie keinen Zweck hätten. Da Xilinx ISE in der Lage ist, Timing-Einschränkungen zu überprüfen, sollte es meiner Meinung nach möglich sein, mein Design zu routen und abzubilden und die generierten Timings irgendwie zu verwenden (aber vielleicht mache ich die Dinge hier zu einfach).
Ich bin sicher, es gibt noch mehr Leute mit dem gleichen Problem. Wie geht man mit diesen Warnungen richtig um?
Bearbeiten: Auf dieser Seite habe ich weitere Informationen gefunden. Sie können ein Post-Map- oder Post-Place-and-Route-Simulationsmodell generieren. Ich vermute, dass dies die Timings beinhaltet. Es scheint jedoch, dass nur Modelsim die Simulation tatsächlich durchführen kann.
Klarstellung: Im Idealfall wäre ich in der Lage, meinen Teil des Designs zu synthetisieren (oder zumindest so weit wie möglich im Prozess der Erstellung des Layouts zu kommen) (ich habe die RTL und ich habe das Board spezifiziert, also denke ich, dass dies so sein sollte). möglich), dann kombiniere es in einer Testbench mit dem Funktionsmodell, um zu testen, ob mein Design die richtigen Timing-Verzögerungen hat. Ich kann dies jedoch nicht in Xilinx ISE 14.7 zum Laufen bringen.
Wie dave_59 betonte, sind Timing-Checks bei RTL nicht sehr aussagekräftig. Hier sind 4 mögliche Ansätze:
`ifdef ... `endif
) um Ihre Timing-Prüfungen herum; Timing-Checks bei RTL deaktiviert<=
) auf ändern <= `D
, wobei `D
a Ihre Verzögerung ist (z. B. `define D #2
)
`D
als leer definieren (auch bekannt als `define D
)$setuphold( D, CLK &&& actiming_enable, tSETUP, tHOLD);
Setup-and-Hold-Timing-Checks sind nur mit Post-Layout-Informationen sinnvoll. Vor einem Jahrhundert konnten Sie Timing-Analysen ohne Layout-Strukturinformationen durchführen, da die Geräteverzögerungen im Vergleich zu Routing-Verzögerungen überwältigend waren. Sie können mit RTL-Code keine genaue Timing-Analyse mehr durchführen.
Einige Modelle sind so geschrieben, dass sie sowohl in RTL- als auch in Struktursimulationen verwendet werden können, sodass Sie diese Warnungen ignorieren können. Noch besser wäre es, die Timing-Checks auszuschalten, was die RTL-Simulationsleistung verbessert (vielleicht nicht relevant für Ihr Projekt, aber das, was die Leute in der Industrie tun).
Es sollte eine Möglichkeit geben, eine Zeitverzögerung einzugeben.
Dies könnte auf ein paar Arten geschehen, die mir einfallen (vielleicht mehr):
Die meisten davon umfassen das Modifizieren der Darstellung eines Gatters oder Puffers, um eine Verzögerung einzubeziehen. Wenn Sie .libs für die Charakterisierung verwenden, können Sie einfach die gesamte Lade-/Slew-/Verzögerungstabelle auf einen Standardwert von 2 ns setzen.
Ruben
Greg