Forum: FPGA, VHDL & Co. Objekte, Klassen in VHDL/Verilog


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Hallo,

ich bin VHDL- und Veriloganfänger. Jetzt suche ich nach einer 
Möglichkeit zur Objektorientierten Programmierung in diesen 
Programmiersprachen.
Ich möchte nämlich das Differential einer Variable erzeugen. Dazu 
könnt6e ich zwar einen Prozess schreiben, der den Unterschied einer 
Variable von Taktzyklus zu Taktzyklus bildet, aber das müsste ich dann 
für jeder Variable dieser Art schreiben. Ich möchte das aber nur einmal 
allgemeingültig machen!
Ich will dann nur noch die Variablen deklarieren, z. B. x, y, z und dann 
mit z. B. x.d1 den Anstieg von x haben und mit x.d2 den Anstieg von x.d1 
usw.
Wie kann man so etwas am elegantesten/professionellsten formulieren?

von Thomas H. (mac4ever)


Lesenswert?

Wenn Du es so willst, ist VHDL ja eigentlich schon objektorientiert. Was 
Du machen musst ist ein "Differential-Modul" zu entickeln und dieses 
dann mehrfach instanziieren.

von Berater (Gast)


Lesenswert?

Ich glaube kaum, da0 unserer Freund versteht, was Du meinst :-)

Ich fange mal so an, Stefan :

C++ beschreibt Abläufe, die so verschachtelt und durch künstliches 
Multiplexen quasi parallelisiert werden, sodaß daraus virtuelle 
Struktruen senstehen, die wie selbständig agierende Systeme arbeiten. 
Diese müssen dann über events verkoppelt werden, um einen Ablsuf zu 
generieren, da der eigentliche Ablauf der durch den Befehlsinterpreter 
der CPU-Hardware realisiert wird und den man in klasssischen ASm und C 
Programmen findet, aufgelöst wurde.

VHDL beschreibt dageben Abläufe aber auch Strukturen, die am Ende 
zunächst zu einer Hardware führen, die in einer bestimmten Weise 
funktioniert. Es gibt dazu rudimentäte Objekte, die man zu größeren 
komplexen Objekten zusammenfassen muss, wobei es anheim gestellt ist, 
wieviele davon real parallel existieren  wie viele davon sequenziell 
benutzt werden. Diesen muss man dann künstliche Abläufe verpassen, damit 
sie das tun, was man will.

In Deinem Fall musst Du also mindestens einmal eine Hardware bauen, die 
Differenzialquotienten rechnen kann. Diese hat sicher die Eingänge Y1,Y0 
sowie X1,X0, den Ausgang "dydx" und Steuersignale für Takt, Rechenfehler 
etc.

Diese Schaltung baust Du an jede Stelle ein, wo Du sie brauchts, oder du 
baust sie einmal und sorgst mit einem Schaltwerk dafür, daß Deine 
Restschaltung seuqneziell (genug) läuft, daß zu einem Zeitpunkt nur eine 
Diff benötigt wird. Dann kannst Du diese Recheneinheit mehrfach nutzen - 
must sie natürlich mehrfach verdrahten und Logistik darum bauen.

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Hallo,

für Objektorientierung Bedarf es sowohl Objekte als auch Vererbung, da 
VHDL nur Objekte unterstützt, ist es nur eine objektbasierende Sprache.
Gegenwärtig ist es so, dass jede Ressource (Logik und Register) im FPGA 
an bestimmte Funktionen fest gebunden werden, d.h. wenn ein Teil der 
Elemente eines FPGAs einen Differenzierer bilden ist das immer so. Man 
kann keine Ressourcen mehrfach benutzen, wie in einem Prozessor. Das 
versucht man bei der partiellen Konfiguration, dazu sind die aktuellen 
Werkzeuge noch nicht effektiv in der Lage. Gegenwärtig hat man je nach 
Performance-Forderung mehrere Differenzierer oder nur einen und davor 
einen Multiplexer. Damit ist Beraters Beschreibung schon treffend.

Es gab schon Ansätze zu einem objektbasierenden VHDL, jedoch haben die 
sich nicht durch gesetzt, da Vererbung der direkte Abbildung auf 
Hardware widerspricht. Durch Vererbung will man sich Freiheitsgrade 
schaffen. Bei der Abbildung von Algorithmen auf Hardware wie in einem 
FPGA, legt man sich aber auf Schnittstellen fest, Anzahl der Variablen 
und deren Wortbreite. Durch Vererbung führt man aber öffentliche 
Methoden ein und beeinflusst damit die Schnittstelle.

Bye Tom

von Thomas (Gast)


Lesenswert?

Ließe sich das Überladen von Funktionen / Procedures diesbezüglich mit 
objektorientierten Funktionen vergleichen ?

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Das Überladen von Funktionen ist Polymorphie und gehört auch zur 
Objektorientierung. Diese braucht aber auch Vererbung und Kapselung.

In meinem letzten Posting ist eine Fehler, es muss heißen:
Es gab schon Ansätze zu einem objektorientierten VHDL, jedoch haben 
die
sich nicht durch gesetzt, da Vererbung der direkte Abbildung auf
Hardware widerspricht. Durch Vererbung will man sich Freiheitsgrade
schaffen. Bei der Abbildung von Algorithmen auf Hardware wie in einem
FPGA, legt man sich aber auf Schnittstellen fest, Anzahl der Variablen
und deren Wortbreite. Durch Vererbung führt man aber öffentliche
Methoden ein und beeinflusst damit die Schnittstelle.

Bye Tom

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.