Forum: FPGA, VHDL & Co. Additionen mit drei Summanden pipelinen?


von Mike (Gast)


Lesenswert?

Hallo,

würdet ihr Berechunger der Form
z = a + b + c
generell in einem Takt berechnen (mittleres bis großes Design) oder doch 
eher auf zwei Takte aufteilen (also pipelinen)? Zielarchitketur ist ein 
Xilinx Spartan 3A.

Danke!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mike schrieb:
> generell in einem Takt berechnen (mittleres bis großes Design) oder doch
> eher auf zwei Takte aufteilen (also pipelinen)? Zielarchitketur ist ein
kommt drauf an...

von Christian R. (supachris)


Lesenswert?

Wie hoch ist denn die Taktfrequenz? Das sind schon einige Logik-Ebenen 
hintereinander dann....

von Mike (Gast)


Lesenswert?

Ich habe gerade mal einen Test eines Submoduls mit 10 Bit Zahlen 
durchgeführt:
Ohne Pipeline : 220 Mhz
Mit Pipeline  : 280 Mhz

Wenn das nur 21% langsamer ist, könnte ich durchaus mit der "not 
pipelined" Version leben. Aber mir kommen die Zahlen ein wenig komisch 
vor...

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


Lesenswert?

> Aber mir kommen die Zahlen ein wenig komisch vor...
Warum? Woher hast du die?

von Mike (Gast)


Lesenswert?

> Warum?

Ich hätte gedacht, dass die Frequnz locker um die Hälfte runtergeht, 
weil halt doppelt soviel Logik im kritischen Pfad.

> Woher hast du die?

Synthesis Report von XST.

von (prx) A. K. (prx)


Lesenswert?

Mike schrieb:

> Ich hätte gedacht, dass die Frequnz locker um die Hälfte runtergeht,
> weil halt doppelt soviel Logik im kritischen Pfad.

Nicht wenn das als CSA vorneweg mit normalem Adder dahinter 
implementiert wird. Ein CSA ist erheblich fixer als ein normaler Adder.

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


Lesenswert?

> doppelt soviel Logik im kritischen Pfad.
Dazu kommt noch Routing, Setup-Hold-Zeiten...

> Synthesis Report von XST.
Ok, allererste grobe Schätzung  :-/

BTW
Probiers doch mal so: ganz hinten an den Addierer ein, zwei.. 
Registerstufen anschliessen und in den Syntheseeinstellungen "Register 
Balancing" einschalten. Dann verteilt die Synthese die Pipelinestufen 
automatisch.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

A. K. schrieb:
> implementiert wird. Ein CSA ist erheblich fixer als ein normaler Adder.
Kommt auch wieder drauf an... die neueren XIlinx CHips haben extra Carry 
chains, sodass man mit einem "normalem" addierer bis zu einer gewissen 
Grenze schneller ist bei weniger Logik verbrauch als mit einer 
speziellen Lösung die wieder weitere Ebenen in den Logik Pfad einbaut.

von (prx) A. K. (prx)


Lesenswert?

Sind diese carry chains in der Lage, einen 3-way-adder direkt zu 
implementieren, also ohne ihn in zwei 2-way-adder aufzudröseln? Denn ein 
CSA ist genau eine Stufe, ohne jedes carry, somit fügt ein CSA zu einem 
2-way-adder genau eine Logikstufe hinzu und macht daraus einen 
3-way-adder.

von (prx) A. K. (prx)


Lesenswert?

PS: Mir ging es um eine Erklärung dafür, dass ein 3-way adder bei 
nichttrivialer Anzahl Bits nur wenig langsamer als ein 2-way adder sein 
muss.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

A. K. schrieb:
> Sind diese carry chains in der Lage, einen 3-way-adder direkt zu
Eine LUT enthält alles um einen 1 bit FullAdder zu implementieren, 
besteht aus FPGA Sicht also aus einer Logik Stufe.
Bei einem CSA braucht man immer noch entsprechend eine Multiplexer Stufe 
welche in einer zweiten CLB/LUT Stufe was routing delays verursacht.
Baut man also diese "einfachen" 1 LUT Adder ist der kritische Pfad das 
Carry, und dafür hat sich Xilinx wohl was schlaues überlegt ;)
Auf nem Spartan 3A hab ich es bisher durch "manuellen" 
Addiererbeschreibung zumindest noch nicht geschafft schneller zu sein 
als die Automatische Synthese...

von (prx) A. K. (prx)


Lesenswert?

Läubi .. schrieb:

> Eine LUT enthält alles um einen 1 bit FullAdder zu implementieren,
> besteht aus FPGA Sicht also aus einer Logik Stufe.

Ich habe mal beim dem Spartan 3A reingesehen und den Eindruck gewonnen, 
dass es sich dabei um die signifikante Beschleunigung eines ripple carry 
adders handelt.

Aber so schnell die carry chain auch sein mag, sie kostet trotzdem Zeit. 
Die Laufzeit eines solchen adders ist unweigerlich abhängig von der 
Anzahl Bits, somit bei einer nichttrivialen Anzahl Bits grösser als die 
Laufzeit einer Logikstufe ohne carry chain.

Folglich ist die Laufzeit von 2 hintereinander geschalteten optimierten 
Addierern grösser als die Laufzeit eines einzigen Addierers mit 
vorgeschaltetem CSA. Denn der CSA hat immer eine konstante Laufzeit von 
1, unabhängig von der Anzahl Bits (u.U. auch 0, siehe unten).

> Bei einem CSA braucht man immer noch entsprechend eine Multiplexer Stufe

Nö. Ein CSA ist ein Carry Save Adder, kein Carry Select Adder (CSCA). 
Ein CSA addiert 3 Bits zu einem 2-Bit Resultat, die Bitpositionen sind 
dabei unabhängig voneinander. Dies wird dann geeignet mit einem normalen 
Addierer zusammengerechnet. Besser bekannt sind diese Dinger in 
Multiplizierern.

Wobei FPGAs mit 6-LUT den CSA in die LUT mit einbauen und daher 3 
Operanden ohne zusätzliche Logik genauso schnell wie 2 Operanden 
addieren können.

> Auf nem Spartan 3A hab ich es bisher durch "manuellen"
> Addiererbeschreibung zumindest noch nicht geschafft schneller zu sein
> als die Automatische Synthese...

Ich kenne mit in VHDL nicht aus, könnte mit aber vorstellen, dass der 
Compiler einen N-way-adder mit N>2 von sich aus mit einem einzigen 
2-way-adder und zusätzlichen vorgeschalteten CSAs implementiert, wenn 
man ihm nicht vorsätzlich im Weg steht.

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.