Altera Cyclone V: Timing-Probleme beim Routing (Interconnect)

Ich entwerfe eine Anwendung mit einem Altera Cyclone V SoC (5CSXFC6C6U23I7N) und verbinde ADCs und DACs mit 250 MS/s. In der Zwischenzeit hat sich die Designkomplexität etwas erhöht, und jetzt gibt es Verletzungen der Zeitbeschränkung in der Nähe des DAC-Schnittstellenteils. Diese Schnittstelle verwendet die LVDS-SERDES-Hardware für das DDR-Datenformat. Der Datentakt beträgt 250 MHz und damit eine Datenrate von 500 Mb/s. Das FPGA wird intern mit der Abtastfrequenz getaktet, dh 250 MHz, was bei diesem Gerät der Geschwindigkeitsklasse I7 kein Problem sein sollte.

Jetzt das Problem: Es gibt ein paar Register in der Nähe der DAC-Schnittstelle, um die Datenbits richtig zu ordnen. Aber es gibt Timing-Verletzungen zwischen solchen Registern, obwohl es absolut keine Logik zwischen den Registern gibt. Wenn ich mir die Pfadverzögerungen in TimeQuest ansehe, sehe ich, dass durch das Routing (Interconnect) eine Verzögerung von etwa 3,5 ns verursacht wird. Zusammen mit den anderen Verzögerungen werden die geforderten 4ns nicht mehr erreicht. Wenn ich mir den Datenpfad im Chipplaner ansehe, sehe ich, dass er ungefähr von der Mitte des FPGA zum E / A-Bereich geführt wird. Nachdem ich das gesehen hatte, dachte ich, dass ich einfach eine zusätzliche Registerstufe einfügen könnte, damit die Daten irgendwo im Pfad neu getaktet werden könnten. Aber der Monteur platziert diese Register einfach auch in der Nähe der Ausgangsstufe, wodurch immer die gleichen Pfade versagen.

Ich weiß, dass die Schnittstelle selbst kein Problem darstellt, da dies in früheren Kompilierungsläufen einwandfrei funktioniert hat. Die Ressourcenauslastung liegt unter 5 %, daher gibt es auch kein Problem mit fehlenden Registern/ALMs. Wenn Sie den Fitter-Aufwand auf „aggressiv“ einstellen oder den Zieltemperaturbereich verringern, werden die Zahlen leicht verbessert, aber im Bereich von 500 ps bis 1 ns gibt es immer noch einen negativen Schlupf.

btw: Das Design als solches funktioniert auch mit den Verletzungen, wenn das Gerät hier bei Zimmertemperatur läuft. Ich möchte jedoch, dass es zuverlässig funktioniert, daher ist es definitiv keine Option, die Verstöße einfach zu ignorieren.

Irgendwelche Ideen?

Danke und viele Grüße,
Philipp

Wenn Sie einen so niedrigen Auslastungsgrad haben, besteht das Hauptproblem darin, Daten von IO-Pad zu IO-Pad zu übertragen. Die einfachste Lösung besteht darin, die Daten zu leiten, um das Timing zu unterstützen. Dies sollte die Gesamtfunktionalität Ihres Designs nicht beeinträchtigen, wenn Sie dies tun es richtig.
@FarhadA Das habe ich bereits versucht: "[...] fügen Sie einfach eine zusätzliche Registerstufe ein, damit die Daten irgendwo im Pfad neu getaktet werden können. Aber der Monteur platziert diese Register einfach auch immer in der Nähe der Ausgangsstufe dieselben Pfade zum Scheitern bringen." Oder meintest du etwas anderes?
Können Sie Ihre Constraint-Datei teilen? Gruppieren Sie alle Datensignale in derselben Gruppe und verwenden Sie die Einschränkung set_max_delay für den Pfad? Weitere Informationen dazu finden Sie hier: quartushelp.altera.com/15.0/mergedProjects/tafs/tafs/…
Danke für deine Kommentare! Die einzigen Einschränkungen in Bezug auf diese Pfade sind im Moment derive_pll_clocks und derive_clock_uncertainty. Welche Art von maximaler Verzögerung könnte ich für diese Datenleitungen einstellen? Da es sich nur um eine Ausgangsschnittstelle handelt, habe ich keine erforderlichen Beziehungen zwischen einigen Eingangsports und diesen Datenleitungen. Die eigentlichen Ausgänge werden wie erwähnt von den LVDS-SERDES-Blöcken angesteuert, daher geht es mir im Moment nur um das FPGA-interne Routing.
Noch eine Anmerkung: Nach Reduzierung des Designaufwands an anderer Stelle sind die Timings (fast) erreicht. Vielleicht sind die aktuellen Probleme also nur nachfolgende Probleme, die sich aus einem anderen Teil des Designs ergeben. Gibt es eine gute Möglichkeit, kritische Pfade zu identifizieren, selbst wenn die Zeitvorgaben dort eingehalten werden?

Antworten (1)

Sind Sie sicher, dass echte Verstöße vorliegen? Müssen Sie falsche Pfade oder getrennte Taktgruppen festlegen? STA-Tools sind nur so intelligent, wie Sie es ihnen sagen; Wenn Sie nach dem Lesen der Verletzung nicht glauben, dass es einen echten logischen Pfad / ein echtes Problem gibt, würde ich meinen SDC ändern, um das Tool wissen zu lassen, dass es sich keine Sorgen machen soll. Dies könnte möglicherweise auch unnötige Einschränkungen für den Synthesizer und den Router beseitigen.

Wenn es sich um ein echtes Problem handelt und alles auf eine Verbindungsverzögerung zurückzuführen ist, würde ich mich fragen, warum der Router nicht angemessen dafür platziert ist. Sie könnten versuchen, regionale Einschränkungen hinzuzufügen oder zu untersuchen, warum der Router denkt, dass es in Ordnung ist, sie so weit voneinander entfernt zu platzieren – vielleicht fehlt eine andere Einschränkung.

Die Verstöße sind insofern unwirklich, als das Design trotz ihnen funktioniert. Betrachtet man jedoch die Pfade mit den Verstößen, handelt es sich um ganz reale FF-zu-FF-Pfade, die bei Timing-Verletzungen durchaus Probleme bereiten werden. Alles, woran ich zu diesem Zeitpunkt denken kann, ist, dass der Installateur Probleme mit einigen Haltezeitanforderungen hat und versucht, diese mit Verbindungsverzögerung anzugreifen.
@PhilippBurch Die Haltezeit sollte nicht das Problem innerhalb derselben Uhrendomäne sein. Beispielsweise hat der dedizierte Schieberegisterpfad zwischen zwei benachbarten Flip-Flops eine sehr kurze Verzögerung und funktioniert ohne Probleme. Wird die Uhr über ein globales Uhrennetzwerk verteilt?
@MartinZabel Die Haltezeit kann ein Problem in einem Schieberegisterpfad sein, wenn die Uhr aus irgendeinem Grund mehr Verzögerung als die Daten aufweist. Ich habe das Uhrennetzwerk nicht manuell eingeschränkt, aber Quartus sagt mir, dass es das Signal als Uhr identifiziert und es "befördert" hat. Sollte dann ein globales oder regionales Netzwerk sein.