Gibt es eine Richtlinie, bis wieviel Logik man vor einem Ausgang noch dulden kann, ohne ihn zu registrieren? Ich muss eine Coprozessorfunktion realisieren und habe inzwsichen zuviele Stufen, dass ich nicht mehr genug pipelinen kann, daher muss ich aus einigen Flipflops per multiplexer direkt auf die Ausgänge, die auf den Bus gehen. In einer ersten Messung sehe ich auf den Leitungen einige spikes, die wieder EMV-problematisch werden können. Wie kriege ich das in den Griff?
Was ist ein Ausgang für dich? Ausgang aus dem FPGA, Ausgang aus einer Entity... Generell müssen an zeitkritischen (also keine LED o.ä.) Ausgängen des FPGA Flipflops liegen. Die Zeit von interner Logik bis zum pad kann ohne Flipflop extrem groß werden und von Anschluss zu Anschluss und Syntheselauf zu Syntheselauf stark variieren. Bei internen Ports einer Entity kann im Prinzip beliebig viel unregistrierte Logik liegen - Man muss nur damit rechnen, dass das Design dadurch unter Umständen zu langsam werden kann. Darüber muss man sich aber in der Regel keine Gedanken machen, solange die Synthese keine timing-Probleme anzeigt.
ja, das prinzip ist mir schon klar, aber ich habe nur 3 clocks zeit, bis der Prozessor, den Wert abholen will und ich kann nicht 3 FFs einsetzen. Die Rechenpipeline ist nicht weiter balancierbar und recht symmetrisch, kann also nicht schneller werden. Ich hole mir je nach pipeline Zustand ein Ergebis aus FFs und lege es direkt auf die Ausgänge. Die Frage ist jetzt, wie schwerwiegend noch der Multiplexer wiegt. Es ist ein 4 auf 1 MUX mit 32 Bit - keine Ahnung, wie tief der ist. Wie kriege ich die Synthese dazu, die relevanten FFs möglichst nahe an den Ausgang zu bekommen?
> Wie kriege ich die Synthese dazu, > die relevanten FFs möglichst nahe an den Ausgang zu bekommen? Das ist die falsche Frage :-/ (Die Synthese legt noch gar nichts nirgendwo im FPGA ab) Was du willst, ist doch eher: Wie kriege ich die Tools dazu, mein Timing einzuhalten? Und die Antwort darauf ist: Mit Timing-Constraints.
Du kannst die Ausgänge genauso mit einem Constraint belegen wie die internen Pfade, suche nach OFFSET OUT (Xilinx) constraints. Damit kann dir das Tool die Schaltung genauso erzeugen, dass die Durchlaufzeiten am Pin passen (falls möglich). Bei kombinatorischen Signalen ist es natürlich deine Aufgabe dafür zu sorgen, dass die externe Schaltung mit den eventuellen auftretenden Spikes zurecht kommt.
>>wie schwerwiegend noch der Multiplexer wiegt. Es ist ein >4 auf 1 MUX mit 32 Bit - keine Ahnung, wie tief der ist. 1 LUT tief, oder? Sind doch - je Datenbit - nur 2 Steuerbits und das Signal, wenn ich mich nicht täusche. >Bei kombinatorischen Signalen Gibt es da überhaupt spikes, bei so kurzen Schaltungen am Ausgang?
>> 4 auf 1 MUX mit 32 Bit - keine Ahnung, wie tief der ist. > 1 LUT tief, oder? Ein 4:1 Mux hat 6 Eingänge: 4xDaten und 2xSelect. Eine LUT hat 4 Eingänge und 1 Ausgang, deshalb müssen es mindestens 2 LUTS sein (bis Spartan3 + Virtex4). Ab Virtex5 wirds dann besser: eine LUT hat 6 Eingänge. > Gibt es da überhaupt spikes, bei so kurzen Schaltungen am Ausgang? Natürlich, die Frage ist nur, ob sie sich auswirken bzw. überhaupt messbar sind.
Meiner Meinung nach soll man nicht mit LUT Tiefen rechnen, bzw. sich darauf verlassen. Morgen geht jemand her, erweitert den Multiplexer um 1 Signal, und schon passt's nicht mehr, weil sich niemand darauf erinnert was man damals überlegt hat. Außerdem soll man den Tools schon die Freiheit lassen, es nach ihrer Weise optimal zu implementieren. Der einzig richtige Weg sind timing constraints, und KEINE kombinatorischen Signale wenn man am Ausgang sicher keine Glitches haben will.
> Meiner Meinung nach soll man nicht mit LUT Tiefen rechnen...
Richtig, denn wer sich die statische Timinganalyse mal anschaut,
der sieht, dass die Verdrahtung ziemlich Laufzeit benötigt :-(
Naja, in diese "Laufzeiten" sind aber allemöglichen Toleranzen unter allen Bedingungen angegeben. Praktisch werden aber Signale eines selben Beuteils auf derselben Temperatur nicht so stark divergieren.
Ich kriege die Kombinatorik nicht schneller. Ich treibe über den Bus (B) 3 Stufen Kombinatorik (K) und kann kein FF rausnehmen, weil es sonst mit dem Datendurchsatz nicht hinhaut: B - K1 - FF - KK2 - FF - KK3 - B Ich werde meinem Chef wohl sagen müssen, dass wir mit der Frequenz runter müssen.
Um welchen FPGA und welchen Takt geht es denn? Dann kann man grob abschätzen, ob du wirklich schon an der Leistungsgrenze des Chips bist, oder wo man noch etwas verbessern kann. Für genauere Tipps wirst du aber den Quellcode zeigen müssen.
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.