mikrocontroller.net

Forum: FPGA, VHDL & Co. Ein kleines Problem mit VHDL


Autor: Der Besucher (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nach einigen Monaten Forum lesen habe ich nun auch einmal eine Frage:

In "problem.vhd" steht ein lauffähiges Testbenchfragment.
Ich habe alles soweit reduziert, dass nur noch das eigentliche Problem 
sichtbar bleibt.

Und zwar möchte ich, dass die Procedure "send" in den Faellen 1a und 1b, 
sowie im Fällen 2a und 2b jeweils die Daten in der selben Reihenfolge 
überträgt. Die a-Fälle liefern das von mir gewünschte Ergebnis. die 
b_fälle übertragen die Daten in der falschen Reihenfolge.

Ich suche aber einen Weg, auf die Variablen sdata5/8 zu verzichten und 
trotzdem bei variabler Vektorlänge die Daten MSB first auf line 
auszugeben.

Wie muß nun "send" umgeschrieben werden?

Ich habe schon viel mit 'high und 'low experimentiert, aber irgendwie 
nicht das erwünschte Resultat erhalten. Sicherlich ist die Lösung ganz 
einfach...
Default scheint eine aufsteigende Reihenfolge (to) bei std_logic_vector 
zu sein.

Der Besucher

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm
     for i in data'range loop

Autor: Wolfgang Kopp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

entweder ich habe das Problem nicht ganz verstanden, oder es ist 
wirklich recht einfach:

variable sdata8 : std_logic_vector(0 to 7);
mit "to" anstelle von "downto" ergiben die Fälle "a" und "b" das gleiche 
Resultat.

Wenn du alles dann noch umdrehen willst, einfach die Loop Zählweise 
umdrehen:
for i in data'length-1 downto 0 loop
"downto" anstelle von "do"

Wolfgang

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfgang:
ja, die Ergebnisse sind dann die selben. Aber LSB first. Das möchte ich 
nicht.

@Lothar:
Danke, das löst das Problem.
Muss jetzt nur noch rausfinden wieso eigentlich...

Ich ahnte doch, das es was simples ist...

Der Besucher

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang Kopp schrieb:
> Wenn du alles dann noch umdrehen willst
dann nimm
     for i in data'reverse_range loop

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe mal den Schleifenzähler auf eine weitere Variable gelegt.
Nun ist mir die Funktionsweise von 'RANGE klar und wo der eigentliche 
Unterschied in den beiden Procedureaufrufen liegt.

Vielen Dank für die Mühe!
Der Besucher

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Danke, das löst das Problem.
> Muss jetzt nur noch rausfinden wieso eigentlich...
Wenn der Default für einen unconstrained std_logic_vector ein Range von 
(0 to x) ist, dann hat das MSB den Index 0. Und weil die Schleife von 0 
to x läuft, kommt das MSB voran.
Wenn du einen constrained std_logic_vector mit (x downto 0) hast, dann 
hat das MSB den Index x. Und deine Schleife läuft von x downto 0.

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.