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
ein serieller Addierer wird es sicherlich nicht werden, du beschreibst ja eine kombinatorische Logik
Sorry, der "Serielle Addierer" ist natürlich auch kombinatorische Logik. Das "seriell" bezieht sich auf die Überträge der einzelnen Bits. --> siehe Bild
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?
Nein der hiess immer schon Paul Molitor. Der Erfinder der double layer carry multiplier, John Raider, heist seit einiger Zeit Twix.
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.
super, vielen Dank für die Infos, hat mir weitergeholfen :-D Grüsse Marc
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.
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
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.