Forum: FPGA, VHDL & Co. for ... generate Kreis


von Zennehoy (Gast)


Lesenswert?

Hallo!
Ich versuche per "generate" einen Speicherkreis zu generieren. Dabei
muss ich irgendwie den Ersten an den Letzten schliessen. Der Code in
etwa:

cline: for i in 0 to 7 generate
  line_data_in(i) <= line_data_out(i-1) when (copy='1') else
                     data_in_port;
end generate cline;

So gibt es einen Fehler fuer i=0, da:
line_data_out(i-1) = line_data_out(-1) = "Index value -1 is out of
range 0 to 7."

Eigentlich sollte es bei i=0 den Wert von line_data_out(7)
uebernehmen.
Wie geht das? Vielen Dank!
Zen

von FPGA-User (Gast)


Lesenswert?

probier mal folgendes :

line_data_in(i) <= line_data_out((i-1) mod 8) ...

weiss nich, ob mod für neg. zahlen geht, sonst
gehste in der loop halt bei 1 los und machst noch
ne extra zeile für die Verbindung von 0 auf 7.
Das sollte auch generisch gehen, wenn du anstelle von 7
vielleicht eine Konstante BUF_SIZE definierst.

line_data_in(0) <= line_data_out(BUF_SIZE-1) ...

von Zennehoy (Gast)


Lesenswert?

Also dass ich auf mod nicht gekommen bin verstehe ich nicht...
Negative Zahlen waren mir zu unsicher, also habe ich es umgedreht:

line_data_in((i+1) mod 8) <= line_data_out(i) when (copy='1') else
                             data_in_port;

Funktioniert bestens. Danke fuer den Tipp!
Zen

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.