greg schrieb:
> Die Komponenten-Instanzierung erschien mir von Anfang an aufgeblasen und
> verletzt das Prinzip des DRY (don't repeat yourself); warum ist sie
> weitläufig der Standard, auch wenn in den meisten Fällen absolut
> unnötig? Gibt es bei der Entity-Instanzierung irgendwelche Nachteile,
> die ich übersehe? Tool-Support sollte doch mittlerweile kein Problem
> sein, oder?
Das Ganze kommt aus der Simulation.
Die separate Deklaration der Komponente erfüllt die Trennung
Schnittstelle/Implementierung.
Wenn man sich einen Komponente als IC vorstellt, dann definiert die
Komponenten Deklaration sozusagen den Sockel.
Die Instanzierung definiert die Verdrahtung, also welche Signale zum
Sockel hinführen.
Das Einstecken des ICs in den Sockel erfolgt erst beim Starten der
Simulation, diese Phase nennt man elaboration.
Um ein VHDL File mit einer Komponente zu compilieren, braucht die
Komponente selbst noch nicht geschrieben/compiliert sein.
In diesem Fall benötigt man die Komponenten Deklaration, damit der
Compiler die Schnittstelle kennt. Das ist ähnlich wie eine Deklaration
in C/C++, dort kann man eine Funktion auch aufrufen wenn sie deklariert
ist.
Erst beim Linken kommt man drauf, ob sie wirklich existiert.
Bei der direkten Instanziierung work.foo muss die Komponente foo vorher
schon existieren und kompiliert sein.
Der Compiler schaut in die library work und sucht sich dort die
Schnittstellenbeschreibung.
In ISE oder ISIM sieht man die Unterschiede nicht, da wird alles in
einem Rutsch compiliert, höchstens wenn man die Reihenfolge der VHDL
Files nicht richtig angibt, aber ISE ordnet diese meine Wissens
automatisch.