VHDL: Component vs Entity


25

Ich frage mich, was der Unterschied zwischen einer Komponente und einer Entität ist. Ich würde gerne wissen, in welchen Fällen es besser ist, Komponenten anstelle von Entitäten zu verwenden. Ich danke dir sehr.


1
Könnte jemand einen Tag-Aufruf "vs" erstellen? Vielen Dank.
Peterstone

7
Du meinst "vs" wie im Titel? Hm, keine gute Idee, denkt nach.
Stevenvh

2
Nicht jeder hier benutzt Visual Studio .... oh warte ... du meintest das andere "vs" oder? ;-)
cbmeeks

Antworten:


17

Hier ist eine Analogie, die einigen Menschen hilft (insbesondere Menschen mit einem Hintergrund in der physikalischen Elektronik):

A componentteilt dem Compiler mit, dass es irgendwann etwas mit diesen Pins geben wird, das man das nennt, aber mach dir vorerst keine Sorgen. Es definiert eine Art "Socket". Sie können weiter beschreiben, was "Drähte" zu dieser "Buchse" usw.

An entityist etwas Bestimmtes mit einem Namen und einer Reihe von Pins, die der Compiler dann an diese "Buchse" "anschließen" kann (und daher mit den "Drähten" verbunden werden kann).

Beachten Sie, dass Sie nicht benötigen ein componentkönnen Sie „direkte Instanziierung“ tun , die den Compiler bedeutet bereits kennt eine Einheit , so dass die „Steckdose“ nicht separat werden muss , um festgelegt. In der Tat wäre das mein empfohlener Ansatz, da sonst das componenteine zusätzliche Ebene ist, die synchron gehalten werden muss.

Sie müssen Komponenten verwenden, wenn Sie Verilog und VHDL mischen und einen Verilog-Block in der VHDL verwenden. Dann componentist das der Socket und erst viel später kann der Compiler / Entwickler den Verilog in den Socket stecken.


Komponente ist wie das DIP-Paket. Sie können den gleichen 8-Pin-Operationsverstärker ein Dutzend Mal in einer Schaltung verwenden, und es sind immer 8 Pins. Sie sind separate Komponenten, obwohl sie vom selben Typ Operationsverstärker sind. Die Entität entspricht der Pinbelegung auf dem Datenblatt. Alle separaten Operationsverstärker haben die gleiche Pinbelegung.
Ajs410

14

Eine Entität ist eine echte Schnittstelle zu einer Designeinheit, die mehrere Architekturen haben kann. Eine Entität definiert, wie Dinge ein- und ausgehen, während die Architektur definiert, wie die Designeinheit arbeitet. Sie können also dieselbe Funktion auf mehrere Arten implementieren, die von derselben Entität beschrieben werden.

Eine Komponente ist eine ideale oder "virtuelle" Designeinheit. Wenn Sie ein Top-Down-Design erstellen (dh Sie stellen die oberste Ebene zusammen, bevor die Blöcke der unteren Ebene erstellt werden), können Sie mithilfe einer Komponente den Schnittstellentyp beschreiben, den Sie für Ihre Designeinheiten erwarten. Sie können sich dies als Platzhalter oder Black Box für eine zukünftige echte Implementierung vorstellen.

Mithilfe von Konfigurationen können Sie eine bestimmte Komponenteninstanz an eine Entitätsdefinition binden. Hier können Sie festlegen, welcher Port mit welchem ​​Port verbunden werden soll. Dadurch wird zugeordnet, wie die im Idealfall definierte Komponente der tatsächlich implementierten Entität zugeordnet wird.

In der Praxis habe ich festgestellt, dass Komponenten normalerweise nicht erforderlich sind und eine andere Abstraktionsebene erstellen, die normalerweise nicht verwendet wird. Sie können die Verwendung (und den Bedarf) von Komponenten überspringen, indem Sie die Entität direkt instanziieren und auf die Architektur verweisen, die für diese Instanz der Entität verwendet werden soll.

Beispielsweise:

MyDesignUnit : entity library_name.entity_name(architecture_name)
               port map(
                     ...

2

Von [1] unten:

In VHDL gibt es einen wichtigen Unterschied zwischen einer Entität, einer Komponente und einer Komponenteninstanz. Die Entität beschreibt eine Entwurfsschnittstelle, die Komponente beschreibt die Schnittstelle einer Entität, die als Instanz (oder als Unterblock) verwendet wird, und die Komponenteninstanz ist eine eindeutige Kopie der Komponente, die mit anderen Teilen und Signalen verbunden wurde . Um diese mit dem Prozess der Brotkartongestaltung mit selbst gefertigten Teilen zu vergleichen. Die Entität und Architektur ähnelt dem Datenbuch, das die Schnittstelle und die Schaltpläne für die Funktionsweise des Teils beschreibt. Die Komponente ist wie die kurze Pin-Liste, die mit dem Teil geliefert wird, um zu beschreiben, wie es angeschlossen werden soll. Die Komponenteninstanz ist das eigentliche Teil, von dem möglicherweise viele unabhängig voneinander arbeiten.

Siehe [1] für den Kontext und weitere Einzelheiten.


Es gibt zahlreiche Online-VHDL-Tutorials, zB [2] [3] ... Buch (84 Seiten PDF) [4] Sieht gut aus [5] Hauptsächlich für Links [6]


1
Sie scheinen Links in Endnoten zu bevorzugen, aber so wird es im Druck gemacht und verwendet keine Hyperlinks, wie sie verwendet werden sollen. Sie hätten schreiben können "Siehe diesen Link für Kontext und mehr Details". Viel benutzerfreundlicher, AFAIC. Nur ein Vorschlag.
Stevenvh

2
Altes Gehirn :-). Ich neige zu maximaler Information (wie Sie bemerkt haben :-)) und die Endnotenmethode ermöglicht es den Lesern, zu sehen, woher der Link stammt und ob sich einige auf derselben Site befinden - wie dies manchmal der Fall ist. Bei sehr langen Links würde ich eher bit.ly / j.mp mit einem aussagekräftigen Namen verwenden. Ich habe auch Benutzer beobachtet, die sich zurückhalten, wenn sie auf einen Link klicken (obwohl diese zur Überprüfung kopiert und eingefügt werden können (zusätzliche Arbeit)). ABER Punkt notiert und ich werde jedes als Optionen in Zukunft betrachten.
Russell McMahon

0

Eine Entität ist eine Designeinheit, deren Eingabe-Ausgabe-Ports angegeben sind. Die Entität definiert lediglich die externen Ports, während die interne Funktionsweise durch die entsprechende Architektur festgelegt wird. Eine Komponente ist die komplette Designeinheit, die sowohl aus einer Entität als auch aus einer Architektur besteht. Der erste Schritt ist die Komponentendeklaration (Angabe des Namens und der Ports) und anschließend die Komponenteninstanziierung (Port-Mapping).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.