Ich basierte ein FPGA-Design auf Lattice-Referenzcode, der in der Timing-Constraints- .lpf
Datei Folgendes angibt:
BLOCK INTERCLOCKDOMAIN PATHS
Die beiden Haupttaktdomänen des Designs sind 100 MHz und 125 MHz, daher erwarte ich, dass sie durch Phasenbeziehungen driften, die die domänenübergreifenden Setup- und Haltezeiten regelmäßig verletzen. Jede Taktdomäne hat entsprechend beschränkte Frequenzen und die Übertragung von Daten zwischen Domänen sieht solide aus.
Lattice selbst postet Ratschläge, die von der Verwendung in ihren FAQ abzuraten scheinen BLOCK INTERCLOCKDOMAIN PATHS
:
Frage Wie kann ich Clock-Domain-Transfers blockieren, wenn ich Synchronizer-Schaltungen habe?
Antwort ...
trace
analysiert alle Taktdomänenübertragungen, bei denen es die Quell- und Zieltaktdomänen in Beziehung setzen kann. Dies ist möglicherweise nicht immer erwünscht. Sie können Ihren eigenen Synchronisierer verwenden, um die Übertragung zwischen den Taktdomänen zu handhaben. In diesem Falltrace
sollte der Clock-Domain-Transfer nicht analysiert werden. Dies kann auf drei Arten erfolgen:
BLOCK INTERCLOCKDOMAIN PATHS
Diese Einstellung blockiert alle Taktdomänenübertragungen im Design. Wenn alle Taktdomänenübertragungen im Design von der Logik im Design gehandhabt werden, kann diese verwendet werden. Seien Sie vorsichtig mit dieser Einstellung, da sie die Analyse aller Clock-Domain-Transfers stoppttrace
.
BLOCK PATH FROM CLKNET "src_clk" TO CLKNET "dst_clk"
Diese Einstellung blockiert alle Clock-Domain-Transfers von src_clk zu dst_clk. Dies umfasst alle Übertragungen zwischen diesen beiden Domänen. Alle anderen Clock-Domain-Transfers werden von gemeldet und terminierttrace
.
BLOCK FROM CELL "myff1*" TO CELL "myff2*"
Diese Einstellung blockiert den Clock-Domain-Transfer von myff1* zu myff2*. Dies ist ein sehr spezifischer Pfad und nützlich, wenn Sie mehrere verschiedene Arten von Taktdomänenübertragungen zwischen zwei Domänen haben. Beispielsweise kann ein Design einen asynchronen FIFO und eine FF-zu-FF-Domänenübertragung zwischen denselben Domänen enthalten. Die asynchrone FIFO-Übertragung kann sicher blockiert werden, aber die FF-zu-FF-Übertragung muss zeitlich gesteuert werden.
Und:
Frage Wofür wird die Einstellung „BLOCK INTERCLOCKDOMAIN PATH“ verwendet?
Antwort Diese Einschränkung wird verwendet, um Pfade zu blockieren, die eine Datenübertragung zwischen Registern umfassen, die von unterschiedlichen Taktnetzen getaktet werden. Wenn es ohne Verständnis verwendet wird, blockiert es alle Uhrendomänen voneinander, selbst wenn sie verwandt sein sollten. Dies kann dazu führen, dass Ihre Tools die erforderliche Routing-Verzögerung zwischen verwandten Takt- und Datenpfaden nicht berechnen, und kann zu zeitweiligen Setup-and-Hold-Fehlern in Ihrem Design führen.
Verwenden Sie am besten a
BLOCK CLKNET
für jeden Pfad, der nicht verwandt ist, falls Sie verwandte Uhren haben.
Ich fühle mich verpflichtet, die Catch-All-Einschränkung angesichts dieses Hinweises aufzuheben und die relevanten Zellen in meinem Synchronisierer (und ihren Pfad in der Hierarchie), die die Domänen kreuzen, explizit zu bestimmen und dann die Analyse jeder bekannten Kreuzung explizit auf Zellebene zu blockieren . Ich weiß, wo diese schließlich sein sollten - ich habe sie entworfen, aber die genauen Hierarchienamen werden eine Weile dauern, um die Timing-Berichtsverletzungen zu finden, die ich erwarte, wenn ich diese Einschränkung entferne. Dies wird wahrscheinlich einen Tag und ein paar P & R-Zyklen dauern, um sie alle zu erhalten.
Der Nettoeffekt wird wahrscheinlich genau das gleiche Design sein, das ich im Moment habe, mit einer längeren Constraint-Datei und den gleichen fast kritischen Pfaden.
Also – würdest du in den sauren Apfel beißen und den Auffangbehälter herausnehmen und bei jeder Überfahrt Beschränkungen BLOCK INTERCLOCKDOMAIN PATHS
auferlegen ? BLOCK .. CELL
Oder ist es die Mühe nicht wert und den Catch-all zu behalten?
Was Sie tun, ist richtig. Der Schlüsselteil ist der Synchronisierer. Wenn dort nur Interclock-Domain-Netze verarbeitet werden, können Sie die Warnung ignorieren.
Ihr Plan, Einschränkungen in anderen Netzen zu entfernen, ist nicht der richtige Plan. Wenn Sie Warnungen außerhalb Ihres Synchronisierers erhalten, bedeutet dies, dass Sie an anderer Stelle eine Zeitüberschreitung haben. Sie müssen sie reparieren.
shuckc