VHDL: Komponente vs. Entität

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.

Bitte, könnte jemand einen Tag-Aufruf 'vs' erstellen. Danke schön.
Du meinst "vs" wie im Titel? Hm, keine gute Idee, denke ich.
Nicht jeder hier verwendet Visual Studio ... oh warte ... du meintest das andere "vs", richtig? ;-)

Antworten (4)

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

A componentsagt dem Compiler: "Irgendwann wird es etwas mit dieser Art von Pins geben, das so heißt, aber mach dir jetzt keine Sorgen." Es definiert eine Art "Buchse". Sie können fortfahren zu beschreiben, was mit dieser "Buchse" usw. "verkabelt" ist.

Ein entityist etwas Bestimmtes mit einem Namen und einer Reihe von Pins, die der Compiler dann an diese "Buchse" "anstecken" kann (und somit mit den "Drähten" verbunden wird).

Beachten Sie, dass Sie keine "direkte Instanziierung" benötigencomponent , was bedeutet, dass der Compiler bereits über eine Entität Bescheid weiß, sodass der "Socket" nicht separat definiert werden muss. Tatsächlich wäre das mein empfohlener Ansatz, da es sich sonst componentum eine zusätzliche Ebene handelt, die synchron gehalten werden muss.

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

Komponente ist wie das DIP-Paket. Sie könnten denselben 8-Pin-Operationsverstärker ein Dutzend Mal in einer Schaltung verwenden, und es sind immer 8 Pins. Sie sind separate Komponenten, obwohl es sich um denselben Operationsverstärkertyp handelt. Entity ist wie die Pinbelegung auf dem Datenblatt; Alle separaten Operationsverstärker haben die gleiche Pinbelegung.

Eine Entität ist eine echte Schnittstelle zu einer Designeinheit, die mehrere Architekturen haben kann. Eine Entität definiert, wie Dinge rein und raus kommen, während die Architektur definiert, wie die Designeinheit funktioniert. Sie könnten also mehrere Möglichkeiten haben, dieselbe Funktion zu implementieren, die von derselben Entität beschrieben würde.

Eine Komponente ist eine ideale oder "virtuelle" Konstruktionseinheit. Wenn Sie ein Top-Down-Design durchführen (dh Sie bauen die oberste Ebene zusammen, bevor die Blöcke der unteren Ebene entworfen werden), können Sie eine Komponente verwenden, um die Art der Schnittstelle zu beschreiben, die Sie für Ihre Designeinheiten erwarten. Sie können sich dies als Platzhalter oder Blackbox für eine zukünftige reale 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. Diese bildet ab, wie die im ideellen Sinne definierte Komponente auf die tatsächlich implementierte Entität abgebildet wird.

In der Praxis habe ich festgestellt, dass Komponenten normalerweise unnötig sind und eine weitere Abstraktionsebene schaffen, die normalerweise nicht verwendet wird. Sie können die Verwendung (und Notwendigkeit) von Komponenten überspringen, indem Sie die Entität direkt instanziieren und darauf verweisen, welche Architektur für diese Instanz der Entität verwendet werden soll.

Zum Beispiel:

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

Von [1] unten:

Es gibt einen wichtigen Unterschied zwischen einer Entität, einer Komponente und einer Komponenteninstanz in VHDL. Die Entität beschreibt eine Designschnittstelle, die Komponente beschreibt die Schnittstelle einer Entität, die als Instanz (oder Unterblock) verwendet wird, und die Komponenteninstanz ist eine eindeutige Kopie der Komponente, die mit anderen Teilen und Signalen verbunden wurde . Vergleichen Sie diese mit dem Prozess des Entwurfs von Steckbrettern mit Einzelteilen von der Stange. Die Entität und Architektur ist wie das Datenbuch, das die Schnittstelle und die Schemata der 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 sollte. Die Komponenteninstanz ist der eigentliche Teil selbst, von dem Sie möglicherweise viele haben, die jeweils unabhängig voneinander arbeiten.

Siehe [1] für Kontext und weitere Details.


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

Sie scheinen Links in Endnoten zu bevorzugen, aber so wird es im Druck gemacht und verwendet keine Hyperlinks, wie es beabsichtigt ist. Sie hätten schreiben können: "Siehe diesen Link für Kontext und weitere Details". Viel benutzerfreundlicher, AFAIC. Nur ein Vorschlag.
Altes Gehirn :-). Ich neige zu maximalen Informationen (wie Sie bemerkt haben werden :-)) und die Endnote-Methode ermöglicht es den Lesern zu sehen, woher der Link stammt und ob sich einige auf derselben Website befinden - was manchmal vorkommt. Bei sehr langen Links würde ich eher bit.ly / j.mp mit einem aussagekräftigen Namen verwenden. Ich habe auch gesehen, dass Benutzer zögern, auf einen Link zu klicken (obwohl diese kopiert und zur Überprüfung eingefügt werden können (zusätzliche Arbeit)). ABER Punkt notiert und ich werde jede Option in Zukunft in Betracht ziehen.

Eine Entität ist eine Designeinheit, deren Input-Output-Ports spezifiziert sind. Die Entität definiert nur die externen Ports, während die interne Funktionsweise durch die entsprechende Architektur festgelegt wird. Eine Komponente ist die vollständige Designeinheit, die aus Entität und Architektur besteht. Der erste Schritt ist die Komponentendeklaration (Angabe des Namens und der Ports) und dann die Instanziierung der Komponente (Port-Mapping).