Ein kleines Problem mit VHDL

Gast #1522721
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
Angehängte Dateien:
Gast
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
Gast
@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
Gast
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
Moderator (Firma: Titel) Persönliche Seite
> 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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.