Hat jemand hier Erfahrung mit "schnellen" Addieren (Carry Look Ahead, Carry Skip, Carry Save, Carry Increment,...) auf nem FPGA? Wenn ich z.B. einen Carry Skip Adder https://en.wikipedia.org/wiki/Carry-skip_adder baue, ist der "längste Pfad" ja nicht mehr der langsamste, kritische, weil geeignete Signale ihn "überholen", d.h. eine Reihe der langen Pfade muss ich mit "false path" kennzeichnen. Weiss jemand wie man das systematisch macht, damit in der Pfad-Dauer Berechnung die richtigen Resultate kommen?
Der schnellste Addierer in einem FPGA ist in der Regel der, der die dedizierten Resourcen dafür nutzt. Also einfach mit einem "+" im VHDL-Code.
Martin O. schrieb: > Weiss jemand wie man das systematisch macht Das kann nur der FPGA Hersteller, denn der baut die Carrychain in sein FPGA ein. Ich würde mich arg wundern, wenn etwas Handgestricktes schneller wäre...
Wohl alle Synthesizer/Fitter benutzten bei Addition die sog. CarryChain, eine Kette aus Carry-Logikelementen. Die ist hardwired, wärend die meissten deiner Schaltungen softwired sind (also viel langsamer), d.h. du wirst kaum die Geschwindigkeit eines buildin Carryadders schlagen können. Es gibt aber Tricks, um "schneller" zu sein, konkret schneller zu Takten: Du schneidest einfach deinen Addierer in der Mitte durch und führst den ersten Teil im 1. Takt und den zweiten Teil im 2. Takt aus, damit also einen Takt Latenz. (oder aber 3/4/etc Teile, lohnt sich aber nur bei seeehr langen Zahlen, d.h. in der Praxis so gut wie nie) Btw.: du kannst die CarryChain auch für viele andere Operationen nutzen (z.B. Vergleich zweier Signale, mit einer Konstanten, mit "0" etc.) und so wesentlich schnellere Implementierungen erreichen als die Herstellertools. Z.B. ist der Vergleich eines sehr langen Vektors (1000..) gegen "0" in ein paar ns möglich, die Herstellertools gehen dabei idR in die Knie. Das ist iE wie Assembler gegen C-Compiler.
Sigi schrieb: > Das ist iE wie Assembler > gegen C-Compiler. Schlimmer, denn man man als VHDL-Entwickler einige routing Optionen und Resourcen gar nicht aktiv und kontrolliert nutzen, die aber die Synthese zur Verfügung hat. Der nächste Thema ist das timing optimierte Placement. Bauen und Ändern führt da kaum zu besseren Ergebnissen. Der Versuch, low level Addierer zu bauen, ist nur bei PLDs sinnvoll, wenn man wirklich reale Verschaltung definiert. Bei FPGAs setzt man eine Vorschrift und lässt bauen. FPGA Entwickler sind heute Bauleiter und keine Maurer mehr. Das Mauern geht automatisch. Das haben manche aber noch nicht mitbekommen. Ganz schlimm ist es an den Hochschulen: Da werden immer noch solche Schaltungskonzepte vorgestellt und die Studenten gebeten, diese zu optmieren. Und die bauen dann die Addier in Matlab. Professoren von vorgestern.
Weltbester FPGA-Pongo schrieb im Beitrag #5162496: > Da werden immer noch solche Schaltungskonzepte vorgestellt und die > Studenten gebeten, diese zu optmieren In der Praxis gibt es aber realistisch nur 1 Freiheitsgrad: den besseren Speedgrade. Alles drüber raus sind Schaltungstricks, die man dann explizit von Hand auskaspert. Und das auch nur an der einen Stelle, wo es klemmt. Ansonsten gilt: "schnell genug reicht aus".
:
Bearbeitet durch Moderator
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.