Morgen zusammen,
ich wäre sehr dankbar, wenn mir jemand die Abbarbeitung dieses
Codeschnipsels erläutern könnte. Mir fehlt momentan noch das Feingefühl
bei der Abbarbeitungsreihenfolge von Schleifenkonstrukten und bei
befehlen mit dem Schlüsselwort "generate". Wenn der Hauptprozess
durchlaufen wird werden ja parallel die Signalzuweisungen durchgeführt,
der Prozess(oa) durchführt und parallel dazu auch die
Schleifenkonstrukte. Nun wäre meine frage, wie das mit den Schleifen und
dem generate-BEfehl funktioniert. wird beim durchlaufen des
Hauptprozesses die Schleife in ia_dec und dec_do komplett ausgeführt
oder passiert das mit jedem Durchlaufen des Hauptprozesses. Wird bei
jedem Hauptprozessdurchlauf die for-Schleife nur einmal ausgeführt oder
N-1 (bzw M-1) mal???
Über eine kurze Erklärung würde ich mich sehr freuen.
Vielen Dank im Voraus
Gruß Spice
Spice schrieb:> Morgen zusammen,>> ich wäre sehr dankbar, wenn mir jemand die Abbarbeitung dieses> Codeschnipsels erläutern könnte. Mir fehlt momentan noch das Feingefühl> bei der Abbarbeitungsreihenfolge von Schleifenkonstrukten und bei> befehlen mit dem Schlüsselwort "generate".
Falscher Denkansatz, for-generate hat wenig mit Abarbeitungsreihenfolge
zu tun sondern mit der Beschreibung von physisch
regelmäßiger/wiederholender Hardware.
Mit C verglichen ist generate vergleichbar mit Präprozessor-anweisungen
um Codeschnipsel zu aktivieren oder zu deaktivieren.
Also bsp.w um einen 4 bit adder aus 1 bit addern zu beschreiben, kann
man den code für 1 bit 4 Mal hintereinader schreiben oder eben im
passenden Generate quasi automatisch vervielfachen lassen.
Siehe:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.55.6397&rep=rep1&type=pdf
S.6-7
Eine "for - loop" ist in VHDL was anderes als "for - generate"
MfG,
Spice schrieb:> Mir fehlt momentan noch das Feingefühl bei der Abbarbeitungsreihenfolge
Du hast die falsche Denkweise. In VHDL wird nichts irgendwie
"abgearbeitet", sondern es wird Hardware beschrieben.
Für jede Art von Schleife bedeutet das: es wird pro "Durchlauf" ein
neues Stück Hardware parallel zur Hardware aus allen anderen
"Durchläufen" erzeugt.
Es wird sozusagen jede Schleife in Hardware "aufgerollt"...
Bei der generate Schleife ist das sogar explizit im Schlüsselwort: es
soll für jeden Schleifendurchlauf etwas generiert werden.
Fpga Kuechle schrieb:> Eine "for - loop" ist in VHDL was anderes als "for - generate"
Denke ich eigentlich nicht. Die 'for-loop' ist im process-, die
'for-generate' im concurrent-Teil. OK, in der TB sieht das anderst aus,
aber im Design sind die beiden doch eigentlich gleichwertig, oder?
(zumindest benutze ich sie so...)
PS: Ich finde das uebrigens ganz gut, dass in VHDL fuer 'concurrent' und
'sequential' eigene Statements definiert sind. Man macht sich beim
hinschreiben doch deutlich mehr Gedanken, wie das denn jetzt in HW
abgebildet werden kann. Ich persoenlich finde dieses 'vermatschen' in
VHDL2008 nicht wirklich gut und denke, das haben sie hauptsaechlich fuer
'Code-Generatoren' eingefuehrt. Ich kann da ganz gut drauf verzichten...
(auch auf sowas wie '*' in der Sensitivitaetsliste...)
berndl schrieb:> OK, in der TB sieht das anderst aus
Autsch, Mist hingeschrieben... Eine TB laeuft ja eh' in einem 'process',
also geht da 'generate' gar nicht... Also bitte den Teil des Posts
ignorieren :o(
berndl schrieb:> Eine TB laeuft ja eh' in einem 'process', also geht da 'generate' gar> nicht...
Sicher kann man auch in einer Testbench mehrere Instanzen von irgendwas
mit einem generate Konstrukt erzeugen. Denn prinzipiell ist eine TB nur
ein irgendein VHDL Modul ohne Ports...
berndl schrieb:> Fpga Kuechle schrieb:>> Eine "for - loop" ist in VHDL was anderes als "for - generate">> Denke ich eigentlich nicht. Die 'for-loop' ist im process-, die> 'for-generate' im concurrent-Teil. OK, in der TB sieht das anderst aus,> aber im Design sind die beiden doch eigentlich gleichwertig, oder?> (zumindest benutze ich sie so...)
Hm, eigentlich ging es mir darum das da wo "for" drinsteht nicht eine
FOR-schleife im Sinne von C etc. drin ist. Eigentlich ist das
wesentliche
keyword in VHDL nicht das "for" sondern das zweite:
for ... generate
for ... loop
for ... use
Persönlich nutze ich das for generate für "Hardware-VHDL" (was
synthetisiert wird) das foor loop für "Software" (was nicht
synthetisiert wird -testbench, konvertierungsfunktionen). Aber das ist
wohl meiner persönlichen Abneigung gegen for-loop geschuldet.
MfG,
berndl schrieb:> Denke ich eigentlich nicht. Die 'for-loop' ist im process-, die> 'for-generate' im concurrent-Teil. OK, in der TB sieht das anderst aus,> aber im Design sind die beiden doch eigentlich gleichwertig, oder?> (zumindest benutze ich sie so...)
NEIN! und zwar bedingt durch die unterschiedliche Semantik in
sequentiellen und concurrent-Anweisungen.
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.