mikrocontroller.net

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


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian R. (supachris)
Datum:

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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.