Forum: FPGA, VHDL & Co. Critical Path Carry Skip Adder


von Martin O. (ossi-2)


Lesenswert?

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?

von Jan (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Sigi (Gast)


Lesenswert?

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.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.