Forum: FPGA, VHDL & Co. Komponenten-Instanzierung vs. Entity-Instanzierung


von greg (Gast)


Lesenswert?

Es gibt ja in VHDL zwei verschiedene Arten, um Instanzen zu erzeugen.

Erst einmal die klassische Komponenten-Instanzierung:
1
component foo is
2
 ...
3
end component;
4
5
...
6
7
foo_inst: foo
8
 ...

Und dann die Entity-Instanzierung:
1
foo_inst: entity work.foo
2
 ...

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?

von Bitflüsterer (Gast)


Lesenswert?

Eine interessante Frage, die ich leider nicht unmittelbar beantworten 
kann. Leider kann ich auch nicht sofort ausprobieren ob ISE oder Quartus 
das akzeptiert. Die Syntax jedenfalls lässt das zu. Und beides scheint 
äquivalent zu sein.

von greg (Gast)


Lesenswert?

s/Instanzierung/Instanziierung/ erst einmal, das ist ja peinlich. :)

Bitflüsterer schrieb:
> Leider kann ich auch nicht sofort ausprobieren ob ISE oder Quartus
> das akzeptiert.

ISE kann es, Quartus bestimmt auch. Das ist Teil von VHDL 93.

von Bitflüsterer (Gast)


Lesenswert?

>s/Instanzierung/Instanziierung/ erst einmal, das ist ja peinlich. :)
Meine Güte. :-) Schlimmer wäre es wenn Du garkeine 'i's schreiben 
würdest.

Ein wenig enttäuscht war ich schon, das ich das im Reichardt/Schwarz 
nicht gefunden habe.

von VHDL++ (Gast)


Lesenswert?

Versuch mal mit Configurations zu arbeiten, dann geht es nicht anders.

Allerdings muss man schon sagen: zu 90% wird es verwendet ohne das es 
wirklich benötigt würde.

von Christian R. (supachris)


Lesenswert?

Xilinx hat manchmal Probleme, wenn man die Entity-Instanziierung bei IP 
Cores anwendet. Das Schema dahinter hab ich aber noch nicht entdecken 
können. Bei Vivado ist es ganz schlimm. Nimmt man die Entity-Variante 
bei IP Cores darf man dann keine Konstanten "anschließen". Schon 
skurril. Neulich spuckte mir Vivado 14.1 aus, dass die Library work not 
longer supported ist. Man müsse das dann manuell einstellen, wenn man es 
unbedingt braucht.

von Duke Scarring (Gast)


Lesenswert?

greg schrieb:
> Gibt es bei der Entity-Instanzierung irgendwelche Nachteile,
> die ich übersehe?
Ich deklariere mir meine Module einzeln:
1
library stuff;
2
use stuff.components.modul1;
3
use stuff.components.modul2;
4
use stuff.components.modul3;
Damit sieht man an einer Stelle, welche Module/Komponenten eingesetzt 
werden. Das sieht man bei der Entity-Instanziierung nicht.

Ich verwende sie gerne, wenn ich das Modul nur einmal benötige und es in 
der selben Bibliothek (=work) liegt.

Duke

von Klaus F. (kfalser)


Lesenswert?

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.

: Bearbeitet durch User
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.