Forum: FPGA, VHDL & Co. [TB] loop von x"8" bis x"E"


von butze (Gast)


Lesenswert?

hi!

habe folgendes syntaktisches Problem in einer Testbench.

Möchte eine Schleife von 0x8 bis 0xE laufen lassen. Allerdings bekomm 
ich das absolut nicht hin  und das Netz konnte mir auch nicht helfen...

Der Codeausschnitt:

for i in x"8" to x"E" loop
  write(ADDR => X"FFFD40" & (i) & "00", DATA => (others => '0'));
  write(ADDR => X"FFFD40" & (i) & "01", DATA => (others => '0'));
  write(ADDR => X"FFFD40" & (i) & "10", DATA => (others => '0'));
  write(ADDR => X"FFFD40" & (i) & "11", DATA => (others => '0'));
end loop;


(Möchte damit Zugriffe auf einen Speicherbereich nachbilden)


Modelsim sagt:
Range of a parameter specification must be of a discrete type.
** Error:  No feasible entries for infix operator "&".
** Error:  Bad expression in left operand of infix expression.
** Error:  Bad expression in expression of element association.
** Error:  No feasible entries for infix operator "&".
** Error:  Bad expression in left operand of infix expression.
** Error:  Bad expression in expression of element association.
** Error:  No feasible entries for infix operator "&".
** Error:  Bad expression in left operand of infix expression.
** Error:  Bad expression in expression of element association.
** Error:  No feasible entries for infix operator "&".
** Error:  Bad expression in left operand of infix expression.
** Error:  Bad expression in expression of element association.
** Error:  VHDL Compiler exiting


eine Idee?


..ich glaub ich muss gar nicht mehr erwähnen, dass ich noch ein blutiger 
VHDL Anfänger bin, oder?

von fpgaküchle (Gast)


Lesenswert?

variable einführen, schleifenindex in vectortyp konvertieren, in etwa:

use IEEE.numeric_std.all;
...

variable v_addr_temp: std_logic_vector(29 downto 0);
...
begin
...
for i in 8 to 14 loop
  v_addr_temp := X"FFFD40" & std_logic_vector(unsigned(i,4)) & "00";
  write(ADDR => v_addr_temp, DATA => (others => '0'));
  ...

von butze (Gast)


Lesenswert?

Das Prinzip der Lösung hab ich verstanden. Allerdings kommt in der Zeile

"v_addr_temp := X"FFFD40" & std_logic_vector(unsigned(i,4)) & "00";"

der Fehler: Type conversion (to unsigned) can not have aggregate 
operand.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

to_unsigned() statt unsigned(). Umwandlung durch Voranstellen des Typs 
geht nur zwischen eng verwandten Typen, z.B. std_logic und unsigned.

von butze (Gast)


Lesenswert?

cool, hat geklappt^^


Vielen Dank euch beiden!

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.