www.mikrocontroller.net

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


Autor: butze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: fpgaküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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'));
  ...

Autor: butze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: butze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool, hat geklappt^^


Vielen Dank euch beiden!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.