mikrocontroller.net

Forum: FPGA, VHDL & Co. in Schleife inkrementieren


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen!
Ich verzweifel langsam. Innerhalb einer Schleife, möchte ich ein Signal 
(16-bit) erhöhen.
Dazu habe ich im Moment folgenden Code, der Taktsynchron arbeitet.
signal zahler : STD_LOGIC_VECTOR(0 to 15)

if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
...
  for i in 0 to 20000 loop
    zahler <= CONV_STD_LOGIC_VECTOR(i,16);
  end loop;
...

Seltsamerweise erfolg die Zuweisung zu dem Signal "zahler" nur, wenn 
schon die ganze Schleife durchlaufen ist (also wird der Wert 20000 
zugewiesen).
Es soll aber kontinuierlich hochgezählt werden.
Wäre nett, wenn mir irgendjemand einen Tip geben kann und auch erklären 
kann, wieso sich das obere Codesegment so verhält.

Danke!
Klaus

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for-Schleifen sind in VHDL da, um mehrfach Hardware zu generieren. Suche 
mal nach dem Stichwort "Counter", da solltest du fündig werden.

Rcik

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann nicht funktionieren. Eine for-Schleife in VHDL ist nicht gleich 
einer for-Schleife in C! In VHDL dient das Konstrukt nur dazu, 
Schreibarbeit zu sparen. Deine Schleife wird also zu:
zaehler <= '0';
zaehler <= '1';
...
zaehler <= '2000';
Und das dabei 2000 rauskommt, duerfte klar sein.

Was du brauchst, ist ein synchroner Prozess, der in jedem Takt dem 
Signal einen um eins hoeheren Wert zuweist.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp, Schleifen in VHDL werden AFAIK immer ausgerollt (und die 
Wahrheitstabelle anschließend optimiert, falls möglich) und ergeben 
entsprechende Hardware. Also Vorsicht, häufig entsteht kaskadierte 
(=langsame) Logik oder Arithmetik.
Die Zuweisung eines Signals findet immer erst beim Verlassen des 
processes statt (oder bei einem wait).

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.