Ein kleines Problem mit VHDL

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren