Forum: FPGA, VHDL & Co. Port Map zwischen components


von Samuel J. (capstrovor)


Lesenswert?

Hallo

Kann ich verschiedene Components zusammen Portmappen oder brauche ich 
dafür Hilfssignale.

Ich weiß nur wie ich die Ein- und Ausgänge eines Components mit den Ein 
und Ausgängen der Entity Portmappen kann. Geht das auch mit Components 
untereinander?

Sonst brauche ich ja doppelt so viele Hilfssignale wie Aus und 
Eingänge...

von dito (Gast)


Lesenswert?

Wenn du Components, die in der selben Hiearchieebene liegen, miteinander 
verbinden willst, brauchst du dafür in VHDL Hilfssignale.
Den Port einer Sub-component kannst du aber direkt an den Port der 
übergeordneten Component anschließen (solange er den gleichen Datentyp 
hat natürlich).

von Samuel J. (capstrovor)


Lesenswert?

Ok danke!

von Christoph Z. (christophz)


Lesenswert?

Ich schreibe in diesen Thread, weil es Thematisch besser passt, damit es 
in Zukunft auch andere Leute finden. Aber eigentlich ist meine Antwort 
ausgelöst durch deinen anderen Thread: 
Beitrag ""Unter-Entities" in VHDL und alles in Altium verkabeln?"


Ja, du brauchst in einer Strukturbeschreibung in VHDL Hilfssignale um 
zwei Komponenten untereinander zu verbinden.
Wenn man das alles von Hand in einem einfachen Texteditor macht artet 
das in eine sehr langweilige fehlerträchtige schreibarbeit aus.

1. Tipp:
Gute VHDL Editoren/IDEs bieten dafür Unterstützungshilfen an. Das ist 
ein Grund wieso ich mir die Zeit genommen habe mich in Emacs 
einzuarbeiten, der VHDL Modus spart wirklich Zeit! (Stichwort "Copy 
Ports" und danach die Funktionen "Paste as snstance", "Paste as 
somponents", "Paste as signals" nutzen)

2. Tipp:
Einen ganz anderer VHDL Schreibstil nutzen (ist natürlich nicht in jedem 
Arbeitsumfeld möglich).
In den Ports der Entity stehen nur Clock, ev. Reset und zwei Records, je 
für Eingangs- und Ausgangssignale. In der Strukturbeschreibung müssen 
entsprechend nur zwei Hilfsignale deklariert werden pro Komponente. Ich 
finde das praktisch und sehr lesbar aber das ist Ansichtssache.

von Samuel J. (capstrovor)


Lesenswert?

Christoph schrieb:
> 1. Tipp:
> Gute VHDL Editoren/IDEs bieten dafür Unterstützungshilfen an.
Ok ich schau mir mal dein genanntes Programm an, das klingt wirklich 
einfach!

> 2. Tipp:
> Einen ganz anderer VHDL Schreibstil nutzen (ist natürlich nicht in jedem
> Arbeitsumfeld möglich).

Das wäre im Prinzip kein Probem.

> Ich finde das praktisch und sehr lesbar
Hmmm. Ich weiß nicht...  Natürlich ist es dann in der Hauptentity gut 
lesbar -> weil weniger Signale und kürzere Port Maps.
Allerdings sind dann die Unterentities nicht wirklich lesbar, da es nur 
2 lange Vectors gibt und diese dann auf Hilfssignale aufgeteilt werden 
müssen.

Ich fände es in Altium wirklich gut, weil es auch für eine Präsentation 
sehr gut geeignet wäre, um die grundlegenden Dinge zu erklären (brauche 
das Alles für die Diplomarbeit).

von Samuel J. (capstrovor)


Lesenswert?

Aber ich glaube ich habe jetzt einen Lösungsweg für Altium gefunden:
Ich erstelle einfach Libraries mit meinen Unterkomponenten und binde 
diese dann in Altium ein.

von Sanchez Santiago (Gast)


Lesenswert?

Christoph Z. schrieb:
> In den Ports der Entity stehen nur Clock, ev. Reset und zwei Records, je
> für Eingangs- und Ausgangssignale. In der Strukturbeschreibung müssen
> entsprechend nur zwei Hilfsignale deklariert werden pro Komponente. Ich
> finde das praktisch und sehr lesbar aber das ist Ansichtssache.

Jeweils ein Record für Ein- und Ausgang finde ich dann doch etwas grob. 
Ich benutze auch sehr gerne Records in Entities, versuche aber nur 
Signale in einen Record zu gruppieren, die auch logisch zusammengehören. 
Alleine schon aus dem Grund, weil die Ausgangssignale meistens an 
verschiedene Komponenten gehen. Darüber hinaus soll die Entity die 
Komponente ja auch ein wenig dokumentieren. ;-)

von Christoph Z. (christophz)


Lesenswert?

Sanchez Santiago schrieb:
> Ich benutze auch sehr gerne Records in Entities, versuche aber nur
> Signale in einen Record zu gruppieren, die auch logisch zusammengehören.

Danke für deinen Input. Wenn es sich so gruppieren lässt ist das sicher 
gut (Einfaches Beispiel sind interne Bussysteme).

Was ich auch schon gemacht habe zu diesem Zweck sind Records innerhalb 
eines übergeordneten Records (also innerhalb des eigentlichen Input 
Records). Tönt zuerst komisch aber gewisse Programmiersprachen pflegen 
einen ähnlichen Schreibstil.

Eine Signal zuweisung für ein Konfigurationssignal kann dann z. B. so 
aussehen:
1
BusTrafficLoggerFsmIn.Armed          <= BusTrafficLoggerIn.Config.Armed;

Und eine Zuweisung von einem FSM Ausgang an den Datenpfadeingang sieht 
so aus:
1
BusTrafficLoggerDataIn.SaveData <= BusTrafficLoggerFsmOut.SaveData;

Mit der Autocompletion vom Editor sind solche Zeilen sehr schnell 
geschrieben.

Sanchez Santiago schrieb:
> Darüber hinaus soll die Entity die
> Komponente ja auch ein wenig dokumentieren. ;-)

Ja, diesen Anspruch kann ich nicht mehr erfüllen. Bei mir übernehmen das 
jetzt die Type definitionen im dazugehörigen Package.
Das ist am Anfang sicher ein umgewöhnen.

von Sanchez Santiago (Gast)


Lesenswert?

Christoph Z. schrieb:
> Was ich auch schon gemacht habe zu diesem Zweck sind Records innerhalb
> eines übergeordneten Records (also innerhalb des eigentlichen Input
> Records). Tönt zuerst komisch aber gewisse Programmiersprachen pflegen
> einen ähnlichen Schreibstil.

Das mache ich ganz genauso. Ich verwende teilweise bis zu achtfach 
verschachtelte Records. Erst bei sowas kann man doch toll abstrahieren 
und Komplexität reduzieren...

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.