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!
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...
Wie hoch ist denn die Taktfrequenz? Das sind schon einige Logik-Ebenen hintereinander dann....
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...
> Aber mir kommen die Zahlen ein wenig komisch vor...
Warum? Woher hast du die?
> 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.
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.
> 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.
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.
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.
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.