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
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
@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
Wolfgang Kopp schrieb:
> Wenn du alles dann noch umdrehen willst
dann nimm
1 | for i in data'reverse_range loop |
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
> 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.