www.mikrocontroller.net

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


Autor: Stefan Helmert (Firma: dm2sh) (stefan_helmert)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Hertwig (mac4ever)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Berater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

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

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.