Abarbeitungsreihenfolge For-Schleife (generate) Codebeispiel

Gast #4095980
Lesenswert?

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

1
...
2
entity ....
3

4
component ....
5

6

7
begin
8

9

10
--hier ein paar parallele signalzuweisungen
11
-- ----------------------------------------
12

13
oa_dec:
14
process(oa)
15
begin 
16
 oa_sel <= (others => '0');
17
 oa_sel(conv_integer(oa)) <= '1';
18
end process oa_dec;
19

20
ia_dec: 
21
for k in M-1 downto 0 generate
22
 ia_sel(k) <= ia(k) 
23
end generate ia_dec;
24

25
dec_do: 
26
for j in N-1 downto 0 generate 
27
 out_dec : decoder    
28
   generic map (N,M)
29
   port map(............
30
            );
31
end generate dec_do;
32

33
end behavioral
Gast #4096011
Lesenswert?

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,
Moderator (Firma: Titel) Persönliche Seite #4096147
Lesenswert?

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.
Gast #4096450
Lesenswert?

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...)
Gast #4096650
Lesenswert?

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,
Gast #4096742
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren