Forum: FPGA, VHDL & Co. Umsetzung eines Addierers im FPGA


von marc (Gast)


Lesenswert?

Hallo zusammen,

ich beschäftige mich im Moment ein wenig mit FPGA/VHDL und 
experimentiere mit einem Altera Entwicklungskit. Dabei ist mir folgendes 
noch nicht wirklich klar:

Im Buch "VHDL - Eine Einführung" von Paul Moliitor und Jörg Ritter 
werden ausführlich zwei Varianten eines n-Bit-Addierers beschrieben. Ein 
"serieller Addierer" und ein "schneller Addierer nach 
Ladner/Fisher-Prinzip".

Nun kann ich aber genau dieselbe Funktion auch folgendermassen 
erreichen:

entity addierer is
   port  (
      a : in std_logic_vector(n-1 downto 0);
      b : in std_logic_vector(n-1 downto 0);
      s : out std_logic_vector(n-1 downto 0);
   );
end addierer;

architecture structure of addierer is
begin
   s <= a + b;
end structure;

Es stellt sich mir jetzt die Frage, wie die letzte Beschreibungsform auf 
dem FPGA umgesetzt wird? Was für ein Addierer wird eingesetzt? Kann man 
dies irgendwo nachlesen, bzw beeinflussen?

Ich hoffe Ihr könnt mir weiterhelfen.

Grüsse Marc

von user (Gast)


Lesenswert?

ein serieller Addierer wird es sicherlich nicht werden, du beschreibst 
ja eine kombinatorische Logik

von marc (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, der "Serielle Addierer" ist natürlich auch kombinatorische Logik. 
Das "seriell" bezieht sich auf die Überträge der einzelnen Bits.
--> siehe Bild

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


Lesenswert?

marc schrieb:
> zwei Varianten eines n-Bit-Addierers beschrieben. Ein
> "serieller Addierer" und ein "schneller Addierer nach
> Ladner/Fisher-Prinzip".
Vergiss diese ominösen Beschreibungen baldmöglichst wieder.
Schreib einfach
s <= a + b;
und verlass dich drauf, dass das Synthesetool die für die jeweilige 
Plattform OPTIMALE Form eines Addierers herausfindet.

marc schrieb:
> die Überträge der einzelnen Bits...
... schlagen sich in etlichen Patenten und Verfahren nieder. Jeder 
Hersteller von FPGAs hat das auf seine Art optimal 
realisiert/lizensiert.

Siehe jeweils in den entsprechenden Dokumenten das Stichwort 
"Carry-Chain", denn diese Kette ist das eigentlich laufzeitbestimmende 
Element.


marc schrieb:
> Paul Moliitor
Hieß der nicht mal anders?

von Anne Nym (Gast)


Lesenswert?

Nein der hiess immer schon Paul Molitor. Der Erfinder der double layer 
carry multiplier, John Raider, heist seit einiger Zeit Twix.

von Klaus Falser (Gast)


Lesenswert?

marc schrieb:
> Im Buch "VHDL - Eine Einführung" von Paul Moliitor und Jörg Ritter
> werden ausführlich zwei Varianten eines n-Bit-Addierers beschrieben. Ein
> "serieller Addierer" und ein "schneller Addierer nach
> Ladner/Fisher-Prinzip".

Nimm solche Beispiele als das was sie gedacht sind, nämlich um zu 
zeigen, wie man kleinerer Einheiten (FFs) zu etwas komplexeren (in 
diesem Fall einen Addierer) zusammenfügt.

In der Praxis wird man für FPGAs immer den + Operator verwenden und dem 
Compiler die Arbeit überlassen, den Addierer zu erzeugen.

Etwas anders mag die Welt aber in der ASIC Welt ausschauen (habe dort 
aber keine Erfahrung) und es als Beispiel dafür sehen, dass man VHDL 
dazu benützen kann, eine Schaltung unterschiedlich detailliert zu 
beschreiben:
- (1) Man verwendet den + Operator und bekommt als Ergebnis was der 
Compiler default-mäßig generiert.
- (2) Man teilt dem Tool genau mit aus welchen Zellen und wie der 
Addierer aufzubauen ist und generiert den Addierer selber. In diesem 
Fall kann man bestimmte Eigenschaften optimieren, z.B. Stromverbrauch 
oder was weis ich.
Aber auch in diesem Fall kann ich mir kaum vorstellen, dass man soetwas 
mit der Hand kodiert, sondern irgendwelche Code-Generatoren verwendet.
Die Möglichkeit, Fehler zu machen ist einfach zu groß.

Man nennt solche Beschreibungsarten manchmal auch "behavioral" (1), bzw. 
"structural" (2), wobei diese Begriffe sehr ungenau definiert sind.

von marc (Gast)


Lesenswert?

super, vielen Dank für die Infos, hat mir weitergeholfen :-D

Grüsse Marc

von FPGA-Berater (Gast)


Lesenswert?

Klaus Falser schrieb:
> Man nennt solche Beschreibungsarten manchmal auch "behavioral" (1), bzw.
>
> "structural" (2), wobei diese Begriffe sehr ungenau definiert sind.

... und vollkommen an der Realistät vorbei gehen.

von Duke Scarring (Gast)


Lesenswert?

FPGA-Berater schrieb im Beitrag #2393226:
> ... und vollkommen an der Realistät vorbei gehen.
Nicht wirklich.
1
testbench   => zum Simulieren
2
behavioral  => Verhaltensbeschreibung
3
rtl         => geht beim ASIC in die Gatterebene
4
structural  => geht beim ASIC in die Verdrahtungsebene
Verwässert wird das dadurch, das viele Konstrukte von den Tools schon 
auf der behavioral-Ebene erkannt und als rtl umgesetzt werden.

Duke

von Edi M. (Gast)


Lesenswert?

>Umsetzung eines Addierers im FPGA
Geht nicht. Die Addierer in FPGAs sind fest eingebaut und lassen sich 
nicht umsetzen. :-)

Duke Scarring schrieb:
> Verhaltensbeschreibung
VHDL ist IMMER eine Verhaltensbeschreibung.

Auch das, was viele structural" nennen, ist eine abstrahierte Form der 
Darstellung und muss es auch sein, um flexibel interpretiert werden zu 
können.

Praktisch kannst Du zwar schreiben:

signal_out <= signal_in * multi

Du hast aber trotzdem keinen Multiplier direkt beschrieben, auch wenn Du 
die Vektorbreiten ganz genau so anlegst, wie die Physik es vorgibt. Alle 
Beschreibungen müssen immer virtuell behandelt werden, damit auch andere 
Vektorbreiten machbar sind, gfs mehrere Multiplier instanziiert und 
verkettet - soiwe die carry chains der benötigten adder verdrahtet 
werden können.

Dasselbe gilt für for-Schleifen, IFs und WHENs, die allesamt keine 
Strukturen beschreiben, sondern nur logisches Verhalten und damit 
Compileranweisungen, eine ansprechende HW zu bauen.

>RTL -> ASIC
Theoretisch hast DU Recht, aber in der Praxis ...

1) ... ist VHDL eine Obermenge von RTL und damit aus formeller Sicht das 
"VHDL-Programmieren" generell kein structural / RTL, so wie Obst 
generell kein Apfel ist. (auch wenn eine Teilaussage wahr ist, ist die 
Gesamtaussage dennoch falsch)

2) ... werden in der heutigen ASIC-Entwicklung auch abstrahierende 
Compiler verwendet, die Logikresourcen verwalten und diese werden in 
aller Regel mit VHDL gefüttert

von Christian R. (supachris)


Lesenswert?

E. M. schrieb:
> Geht nicht. Die Addierer in FPGAs sind fest eingebaut und lassen sich
> nicht umsetzen.

Naja, bei einigen Exemplaren vielleicht. Im Normalfall werden Addierer 
aus LUTs zusammen gebaut.

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.