Forum: FPGA, VHDL & Co. Variable Modularisierung mit VHDL möglich?


von zwiepack (Gast)


Lesenswert?

Hallo in die Runde,

ich bin auf der Suche nach Programmierkonstrukten mit denen ich in 
wenigen Handgriffen neue Module in VHDL einbinden kann. Was meine ich 
damit? Die Sachen mit den Components sind mir klar und werden genutzt, 
aber ich hab ein etwas anderes Anliegen. Und zwar suche ich, um es mal 
bildlich auszudrücken, eine Art Steckdosenleiste variabler Länge. Wobei 
ich die Stecker zur Synthese selbst hinzufüge oder entferne, je nach 
Bedarf.

Also ich hab Module (die Stecker) , deren entity Ein- und Ausgänge immer 
gleich bleiben und ein weiteres Modul (die Steckdosenleiste), welche all 
die Module aufnimmt.

Nun suche ich nach einem Kniff, damit ich diese Idee in VHDL umsetzen 
kann.

von Pat A. (patamat)


Lesenswert?

So ganz genau verstehe ich nicht, was Du möchtest, aber evtl. hilft Dir 
eine for-Schleife über ein 'generate'. Damit kann man u.a. auch eine 
variable Anzahl von Komponenten instanziieren und mit 'if' auch 
verschiedene - wenn es sein muss.

: Bearbeitet durch User
von Klakx (Gast)


Lesenswert?

Ich verstehe und glaube auf was du hinaus willst.. quasi stört es immer 
die ganzen Entities umzuschreiben.

Schau mal, ob du input und output records nutzen kannst. Damit kannst du 
viele Signale zusammenfassen.

Wie Vorposter schon sagt, sind generates auch eine gute Möglichkeit für 
mehrere Komponenten.

Wenn man die Steckdosenleiste als Anlehnung weiterverfolgt, sollten 
Bus-Interfaces auch von Bedeutung sein.

von Michael W. (Gast)


Lesenswert?

Wie variabel soll das sein?  Ich meine, die neuen Module können jegliche 
Gestalt haben und man weiß im Vorhinein nicht, was sie an IN OUTs haben.

von Schlumpf (Gast)


Lesenswert?

zwiepack schrieb:
> Also ich hab Module (die Stecker) , deren entity Ein- und Ausgänge immer
> gleich bleiben und ein weiteres Modul (die Steckdosenleiste), welche all
> die Module aufnimmt.

Klakx schrieb:
> quasi stört es immer
> die ganzen Entities umzuschreiben.

So wie ich es verstanden habe, sind die Entities immer identisch. Es 
geht nur darum, die Anzahl der verwendeten Components (mit identischen 
Entities) variabel zu halten.

Ich denke, pauschal kann das nicht beantwortet werden.
Dazu müsste man wissen, welche Funktion hinter der Steckdosenleiste 
steckt.
Also wie kommunizieren die Components untereinander? Oder hat die 
Steckdosenleiste auch eine Funktion (außer Verdrahtung).

Prinzipiell löst sowas aber ein Bussystem.

von Michael W. (Gast)


Lesenswert?

Schlumpf schrieb:
> So wie ich es verstanden habe, sind die Entities immer identisch. Es
> geht nur darum, die Anzahl der verwendeten Components (mit identischen
> Entities) variabel zu halten.

Also die Zahl der Instanzen? Das ging doch mit generate. (?)
Die Verdrahtung ist halt gfs ein Problem, weil man die Rücklesepfade 
irgendwie vereinen muss. Ein logisches Bussystem wäre da sicher das 
Einfachste.

Aber das macht ja das EDK-System mit dem AXI-Geraffel schon so.

von Schlumpf (Gast)


Lesenswert?

Markus W. schrieb:
> Also die Zahl der Instanzen? Das ging doch mit generate. (?)

Vielleicht sind es auch mehrere Components mit identischen Entities..
Dann wären es nicht mehrere Instanzen.

Wir wissen es einfach nicht und daher ist das hier mehr oder weniger ein 
lustiges Rätselraten ;-)

von zwiepack (Gast)


Lesenswert?

Das ist aber auch schwierig zu erklären was ich vorhabe. :) Mich stört 
im Grunde, dass wenn ich ein neues Modul hinzufüge oder entferne, so 
viel am Code herumfummeln muss, bis wieder alles stimmt.

Also ganz grob. Ich hab ne Art Muxer aufgebaut, der n:1 Verbindungen auf 
eine Resource abbildet. Der Muxer selbst sucht sich raus, wer als 
nächstes von den Modulen reden darf. Die Module zeigen nur an, das sie 
reden wollen. Die Schnittstellen der Module sind immer gleich. Das 
Verhalten, wenn sie reden wollen auch.

Nun fängt der Spaß an. Angenommen ich will ein Modul hinzufügen, dann 
muss schon die Portliste des Muxes angepasst werden.

von Michael W. (Gast)


Lesenswert?

Dann reicht Dir vielleicht das Blockdesign-System von Vivado. Da kann 
man records definieren und beim Platzieren von neuen Symbolen werden sie 
automatisch verdrahtet. Bei den AXI Bussen ist das so. Ist ein 
Mausklick.

von Strubi (Gast)


Lesenswert?

zwiepack schrieb:
> Nun fängt der Spaß an. Angenommen ich will ein Modul hinzufügen, dann
> muss schon die Portliste des Muxes angepasst werden.

Klingt gerade mal nach einem Signal, aber: Wenn du das automatisieren 
willst, musst du vielleicht mit dem C Preprocessor tricksen (VHDL kann 
das nicht per Standard). Das kann man sich mit dem ursprünglichen 
linux-kconfig auch schön konfigurierbar stricken, siehe auch 
http://tech.section5.ch/news/?p=370.

Die komplexeren Sachen lassen sich mit XML-Tricks erschlagen, aber da 
öffnest du ein Fass (und das offene IP-XACT ist in der FPGA-Welt noch 
nicht wirklich gut adoptiert worden).

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich weiß nicht ob da der Aufwand lohnt, denn in irgendeiner Form muss 
dem System ja bekannt gemacht werden, was gebaut werden soll und das 
erhebt sich die Frage, an welcher Stelle man dem Designtool die Infos 
mitgibt und wie.

Ich kenne da ein System für Verdrahtung von Libraryies, Instanzen und 
Synthesekonstrukten mit DSPs und FPGA-Module, dass mal ein Kunde von mir 
entwickelt hat. Das lief so, daß man ein grafische Blöckchen hatte, das 
mit GEDA in einen Schaltplan gesteckt und und eine Auswahlliste an 
Verdrahtungsoptionen bot. Man nahm dann z.B. die Optionen A, F und X und 
er baute dann die Module in VHDL genau so hin, dass es passt, mit 
Busbreiten, Inferfaces zu den DSPs und allem möglichen. Ein richtig 
kleines SOPC System.

Das klappte wunderbar, lohnte aber nur bei den speziellen Strukturen 
dieses Kunden und verhinderte nur Routineverdrahtungsfehler, denn wann 
immer sich eine neue Option bot, eine neue CPU kam oder eine andere 
Prozessorgeneration mit anderen Ports und Speeds, mussten alle Module 
angepasst werden. Von neuen FPGAs ganz zu schweigen.

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.