Forum: FPGA, VHDL & Co. VHDL - objektorientiert


von Johannes T. (johnsn)


Lesenswert?

Wer hat schon mal versucht ein VHDL-Design objektorientiert anzugehen? 
Das Thema klingt für mich hochinteressant und ich würde gerne von euch 
Tipps bekommen, wo ich gezielt ansetzen soll.

Ich hab diese Diss hier gefunden: 
http://deposit.ddb.de/cgi-bin/dokserv?idn=958338353. Derzeit bin ich nur 
drübergeflogen, aber es sieht schon mal aus, als ob das in die gleiche 
Richtung geht.

von der mechatroniker (Gast)


Lesenswert?

VHDL objektorientiert angehen, heißt doch m.E. nach, von 
Sub-Level-Entities ordentlich Gebrauch zu machen. Entity=Klasse, 
Instanz=Objekt, Port=öffentliche Attribute usw. Damit ist VHDL doch 
bereits ziemlich "objektorientiert".

von Michael N. (bigmike47)


Lesenswert?

naja, vhdl ist grundsaetzlich sehr objektorientiert, durch die kapselung 
mit entities, sowie gibt's noch andere OO-Features wie zb overloading, 
usw.

u ich wuesste spontan nicht, was sonst noch an OO bei einer HDL sinn 
machen wuerde, aber ich hab die verlinkte arbeit auch noch nicht 
gelesen, hab grad keine zeit.

von Johannes T. (johnsn)


Lesenswert?

Ich denke da eher an so Sachen wie Vererbung, Ableitung und 
Polymorphismus.

von Michael N. (bigmike47)


Lesenswert?

und was konkret wuerdest du dir da vorstelln?

von Johannes T. (johnsn)


Lesenswert?

Ganz konkret möchte ich Records implementieren, die  eben mehrfach 
verschachelt sind. Gut, hört sich jetzt mal nicht so arg an, aber 
spätenstens, wenn man innerhalb eines Records, dann wiederum Records 
oder gleich Arrays von Recordssets hat, habe ich Probleme, weil ich 
dieses große "Basisrecord" als Generic-Parameter einbinden will und mit 
einem einzigen großen Zuweisungsstatement alle Daten eingeben will. Die 
Arrays sollen zudem noch unconstrained sein!

von Michael N. (bigmike47)


Lesenswert?

also rein VHDL-maessig ist so eine verschachtelung eigentlich kein 
problem, nur haben manche synthese-tools wie zb XST damit probleme.
und willst du die groesse des arrays zur compile-time oder zur run-time 
festlegen koennen?

von Johannes T. (johnsn)


Lesenswert?

Die Größe soll schon zu Compilezeit feststehen, allerdings, wenn ich mir 
meine Typen deklariere, dann verlangen die Compilier bereits ein 
constraint Array. Folgendes geht zB nicht:
1
subtype aByte is std_ulogic_vector (7 downto 0);
2
3
  type aStage1 is record
4
                    StageNum : aByte;
5
                    Flag     : std_ulogic;
6
                  end record;
7
8
  type   aStage1Set is array (integer range <>) of aStage1;
9
10
  type aStage2 is record
11
                    StageNum  : aByte;
12
                    Flag      : std_ulogic;
13
                    OneStages : aStage1Set;  -- FEHLER: Hier wird ein Range verlangt
14
                  end record;

von Michael N. (bigmike47)


Lesenswert?

naja, also meiner meinung nach ist ein array so auch kein wirklicher 
datentyp, das kannst du ja in C++ oder aehnlichem auch nicht so 
definieren (zumindest haett ich das noch nie gesehn oder gehoert). der 
compiler kann ja nicht raten, wie der datentyp jetzt wirklich aussehn 
soll. in C++ wuerde ich sowas mit einem Template loesen, u 
dementsprechend wuerde ich das in VHDL mit einem generic loesen.

von FPGAküchle (Gast)


Lesenswert?

Definier genauer:
  ob für synthese oder verifikation/simulation
  was es bringen soll.
  was VHDL noch fehlt zur Objektorientierung

wenn es um simu/veri geht da steht der Trend weg von VHDL zum 
objektorientierten E. bei der Synthese (also um FF und Logik zu 
beschreiben)
sehe ich keine Möglichkeit objektorientiert zu arbeiten.

Also wahrscheinlich vermeinst Du perr OO comnponenten einfach erweitern 
zu können. Hm, das geht nicht schmerzfrei, im FPGA sind die resourcen 
begrenzter.
da nutzt keine schnelle Codefertigstellung durch Vererbeung, wenn dein 
chip
plötzlich halb so schnell ist. In einer CPU mögen die 5% 
Leistungseinbruch durch OO verschmerzbar sein.

letzlich ist die Frage wie man besser und schneller FPGA bastelt. 
Softwareentwicklung geht besser durch OO (sagen die Softwerker), FPGA 
entwicklung geht besser durch ...  (OO hat da noch kein Hardwerker 
gesagt)

von A. F. (chefdesigner)


Lesenswert?

>Wer hat schon mal versucht ein VHDL-Design objektorientiert anzugehen?

Hat schon einmal jemals etwas anderes versucht?
(abgesehen von denen, die aus dem C-Umfeld stammen und alles als flow 
anehen)

VHDL-module SIND Objekte!

Gegenteilige Ansichten ?

von Johannes T. (johnsn)


Lesenswert?

FPGAküchle wrote:
> Definier genauer:
>   ob für synthese oder verifikation/simulation
>   was es bringen soll.
>   was VHDL noch fehlt zur Objektorientierung

Es soll sowohl für Simulation als auch Synthese sein. Ich will damit ein 
ROM beschreiben mit fixer Größe, also werden die Ressourcen sicher nicht 
zu knapp! Das ROM speichert halt Gerätespezifische Daten, die aber von 
Einsatz zu Einsatz variieren und das ROM ist auch nicht immer voll mit 
Information. Das steht aber schon zur Compilezeit fest, welche Daten 
drin stehen. Da aber das ROM in mehreren Testbeds eingesetzt wird muss 
ich das generisch angehen, weil ich sonst 50 Mal die VHDL-Datei welche 
das ROM beschreibt anlegen muss und dies früher oder später im Chaos 
endet.

VHDL fehlt zu Objektorientierung die Tatsache, dass man die Daten nicht 
dynamisch zur Verfügung stellen kann. Wie man im Beispiel oben sieht 
verlangt VHDL bereits bei der Typdeklarierung eine definierte Länge. Das 
hat jetzt insofern mit OO zu tun, weil ein definierter Datentyp andere 
Datentypen beinhält (nämlich ein Array) und somit andere Funktionalität, 
bzw. Daten "erbt".


>VHDL-module SIND Objekte!
Wenn man genauer darüber nachdenkt, ist was Wahres dran. Da geb' ich dir 
recht!

von Michael N. (bigmike47)


Lesenswert?

wie schon mal oben gesagt, auch in keiner OO-Software Programmiersprache 
laesst sich ein type mit einem unconstrained array definieren, das geht 
hoechstens bei der definition mit einem void-pointer (das ist dann aber 
nur eine variable, mit diesem typen, und kein generell deklarierter 
type) bzw. mit templates (siehe STL bitsets). und genau sowas laesst 
sich auch in VHDL mit einer signal-definition, die von einem generic 
abhaengt, realisieren.

Ich finde, du hast da einfach unrealistische Vorstellung von 
Sprachfeatures, die kein Compiler der Welt unterstuetzen kann, weil kein 
Compiler telepathisch erfahren kann, was du gern haettest.

Und was heissen soll, man kann die Daten, man in ein ROM schreibt, nicht 
dynamisch uebergeben, wenn sie eh schon zur compile-time feststehen, das 
musst du mir auch mal erklaeren. denn mit generics laesst sich das 
definitiv machen.

Das einzige was ich mir noch OO-maessig bei einer HDL vorstellen 
koennte, waere zb aus einem Up-Down-Counter einen reinen Up-Counter 
abzuleiten o.ae., aber ob das wirklich einen Sinn macht, wage ich auch 
sehr zu bezweifeln.

von Morin (Gast)


Lesenswert?

> wie schon mal oben gesagt, auch in keiner OO-Software Programmiersprache
> laesst sich ein type mit einem unconstrained array definieren

In Java: Variablentyp "int[]", Klasse "[I" stellt ein zur Compilezeit 
unbeschränktes Array von Integerzahlen dar - die Elementezahl wird bei 
Instanziierung festgelegt und bleibt danach. (Okay, limitiert auf max. 
2^32 Elemente, aber ich glaube nicht dass das hier gemeint ist. Außerdem 
könnte man die Idee leicht auf 2^64 ausweiten und ist alle Probleme 
los). Mit dem Variablentyp "List<Integer>", Klasse "List" ist die 
Elementezahl auch nach der Instanziierung variabel (wieder auf 2^32 bzw. 
durch verfügbaren Speicher beschränkt).

Das ändert nix daran dass im Beispiel von Johannes Traxler generics 
angebracht wären.

Softeware-Programmiersprachen sind eben was anderes als 
Harwarebeschreibungssprachen.

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.