Hallo, ich wollte mal in die Runde hören wer Retiming einsetzt und wenn ja mit welchen Erfahrungen. Ich stehe an einem Punkt wo mein Design zu 90% fertig ist, aber jede weitere Änderung ist nur noch schwer durchzubringen wegen des Timings. Mit ein paar Durchläufen geht es meistens, aber es kommt ja auch noch ein bischen rein. Jetzt gibt es 2 Möglichkeiten: - selbst optimieren - retiming Bisher war ich immer sehr skeptisch, weil wenn man sich erstmal auf diesen Pfad begibt, dann kommt man nicht allzu schnell zurück und ich mache mir Sorgen, wenn ich doch mal ein Problem cyclegenau debuggen muss, das ich mich dann selbst veräpple. Vielleicht habt ihr aber gute Erfahrungen gesammelt? Oder auch nicht?
Was verstehst du unter Retiming? Einfach nur dass sich das Synthese Tool um die Reihenfolge der Pipeline Register kuemmert um das Timing dazwischen auszubalancieren oder sogar das setzen zusaetzlicher Register um sich mehr Luft zu verschaffen? Im Prinzip ist es immer ein Mix aus allen Loesungen. Was ich noch in den Topf werfen wuerde, waere das Auflockern von Timing Constraints, zum Beispiel durch Multicycles oder False-Paths (natuerlich nur da wo man es sich erlauben kann ;-)). Ein Beispiel fuer den Mix sind z.B. komplexe Video Algorithmen. Ein paar Pipeline Register stoeren in der Regel nicht. Selbst in Echtzeit Anwendungen ist das bisschen Latenz das auf den Videostream aufgeschlagen wird nicht der Rede wert. Viele Video Algorithmen haben Register fuer die Algorithmus Settings und da diese haeufig statisch sind (bzw. quasistatisch) kann man diese zu False-Paths machen. Den Tools bleiben dann mehr Ressourcen fuer die kritische Pfade. Mit dieser Strategie fahre ich haeufig ganz gut.
:
Bearbeitet durch User
Ich meine nur das Retiming Feature der Place&Route/Fitter Tools. Siehe auch hier: https://en.wikipedia.org/wiki/Retiming Insbesondere die Punkte unter "Problems" machen mir Sorgen. Die Aussicht auf besseres Timing ohne viel Arbeit ist aber verlockend. Die anderen, vorgeschlagenen Lösungen sind auch hilfreich, wenn man sie nutzen kann. In meinem Fall geht es um einen Softcore mit Pipeline. Da helfen mir die Varianten alle leider nicht weiter, bzw. würden das schon, reduzieren aber den Durchsatz. Leider kann man wohl reitiming nicht auf bestimmte Register/Module beschränken, sonst wäre die Entscheidung einfacher...
FPGA zum Spass schrieb im Beitrag #5869242: > Insbesondere die Punkte unter "Problems" machen mir Sorgen. > Die Aussicht auf besseres Timing ohne viel Arbeit ist aber verlockend. Dann musst du wohl oder uebel eine Post P&R Simulation durchfuehren. Ich sehe das Problem in der Praxis jetzt erstmal als nicht so riesig an. Klar, wenn du mit Chipscope (oder nenn anderen ILA) das debuggen anfaengst, dann ist es erstmal nervig, wenn die Signale nicht mehr wirklich zu denen im Code passen. Abhilfe schafft dann aber auch wieder ein Blick in die Schematics der Synthese. Dann sieht man ja was geandert wurde und kann das entsprechend handhaben. FPGA zum Spass schrieb im Beitrag #5869242: > Leider kann man wohl reitiming nicht auf bestimmte Register/Module > beschränken, sonst wäre die Entscheidung einfacher... Doch, das geht schon. Du kannst einzelne IPs separat und mit unterschiedlichen Settings synthetisieren! Das Synthese Produkt kannst du dann in einem uebergeordneten Design (z.B. dem Toplevel) einfach einbinden. Hat natuerlich den Nachteil, dass das Synthesetool nur ueber einen Core optimieren kann und nicht ueber mehrere wenn sich diese z.B. gleiche Logik teilen. Da hilft nur probieren und verschiedene Strategien zu fahren. Zum Glueck kann man das mittlerweile alles anstaendig automatisieren, z.B. via Tcl Skripte. :-)
:
Bearbeitet durch User
Für die Synthese schon, jedoch ist das Retiming eine Option für den Fitter(P&R) und da geht es soweit ich weiß nicht.
FPGA zum Spass schrieb im Beitrag #5869617: > Für die Synthese schon, jedoch ist das Retiming eine Option für den > Fitter(P&R) und da geht es soweit ich weiß nicht. Nope, Retiming ist ueblicherweise ein Synthese Setting. Welches Tool nutzt du denn, dass ein Retiming waehrend P&R durchfuehrt? Ich kann mir zwar vorstellen, dass es Tools gibt die ein Retiming erlauben waehrend der P&R Phase, jedoch macht dass dann deine bedenken auch wieder obsolet. In dem Fall wuerde ich einfach parallele Implementierungslaeufe starten, einmal mit und einmal ohne Retiming. Es ist gaengige Praxis, bei Designs die staendig die regelmaessig Probleme haben die Timing Constraints einzuhalten, einfach verschiedene Strategien/Settings in parallelen durchlaeufen zu starten und das beste Ergebnis herauszupicken.
Quartus schreibt dazu: "Specifies that Quartus should perform physical synthesis optimizations on registers, specifically allowing register retiming, during synthesis and fitting to increase circuit performance." Also sowohl Synthese als auch P&R.
Ok, aber trotzdem verstehe ich dein Problem nicht. Wo genau macht dir jetzt das Register Retiming Aerger?
Ich habe kein konkretes Problem, schrieb ich doch oben. Es geht mir um Erfahrungswerte von Leuten die es selbst schon länger einsetzen. Etwa ob die Probleme, die auf Wikipedia erwähnt sind, tatsächlich auftreten. Offensichtlich gibt es aber kaum jemanden der es nutzt oder es hat keiner Lust zu schreiben.
FPGA zum Spass schrieb im Beitrag #5870882: > Offensichtlich gibt es aber kaum jemanden der es nutzt oder es hat > keiner Lust zu schreiben. Das wird praktisch jeder nutzen, der timing-kritische Designs hat, alle Mittel des Synthesetools ausspielt, um ein Closure hinzubekommen und keine "harten" Anforderungen an die Verifikation hat. Ich, zum Beispiel. In den meisten Fällen betreffen mich die bei Wikipedia genannten Nachteile nicht oder sind mir schlicht wurscht.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.