Shift von STD_LOGIC_VECTOR

OP #3683119
Lesenswert?

Hallo

Ich weiss diese Frage ist schon einige male gestellt worden, aber ich 
versteh es immer noch nicht.

Ich möchte eigentlich nur ein STD_LOGIC_VECTOR um 16 Stellen nach links 
verschieben.

Das müsste doch so gehen:

SIGNAL ZEILE9E:STD_LOGIC_VECTOR (23 downto 0);
SIGNAL ZEILE9: STD_LOGIC_VECTOR (7 downto 0);


ZEILE9E<=ZEILE9 rol 16;

Ich benutze Quartus 2 12.0
Folgende Fehlermeldung erscheint:
Error (10327): VHDL error at Vhdl1.vhd(245): can't determine definition 
of operator ""rol"" -- found 0 possible definitions

Mit sll oder ähnlichem Funktioniert es genauso wenig.

Vielen Dank für eure Hilfe
OP #3683214
Lesenswert?

Hallo Marco

Das ergibt leider auch eine Fehlermeldung:

Error (10393): VHDL error at Vhdl1.vhd(247): left bound (23) of slice 
must belong to range (7 downto 0) of corresponding object

Error (10658): VHDL Operator error at Vhdl1.vhd(247): failed to evaluate 
call to operator ""&""

Ist das Problem das die beiden STD_Logic_Vector nicht dieselbe länge 
haben ?
Gast #3683219
Lesenswert?

Die Idee von marco ist schon richtig, aber leider im Detail 
schiefgegangen.
Auf der rechten Seite steht ja der kurze Vektor. Die slices davon können 
natürlich nicht größer sein.
Und ja: Das "Problem" ist die unterschiedliche Größe.

Aber vom Ansatz her sollte:
1
ZEILE9E <= ZEILE9 (7 downto 10) & x"0000"

Die Fehlermeldung wegen dem undefinierten &-Operator ist möglicherweise 
ein Folgefehler. Falls das aber so nicht geht, gucke mal welche 
Libraries Du eingebunden hast. In der Dokumentation zu den Libraries 
steht auch welche Operatoren mit welchen Argumenten definiert sind.
OP #3683228
Lesenswert?

Hallo Bitflüsterer

Jetzt habe ich folgende Fehlermeldung:

Error (10324): VHDL Expression error at Vhdl1.vhd(247): expression 
""0000000000000000"" has 16 elements ; expected 24 elements.

Die & Operator Fehlermeldung war anscheinend ein folgefehler.

Folgende Libraries habe ich verwendet:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_arith.all;

Wahrscheinlich eher zu viel als zu wenig. Kann das auch ein Problem sein 
?
Gast #3683236
Lesenswert?

Leider habe ich zwei Tipfehler gemacht, die Du hoffentlich nicht so 
übernommen hast (die Dir also aufgefallen sind). Der rechte Index war 
falsch und das Semikolon hat auch gefehlt.
1
ZEILE9E <= ZEILE9 (7 downto 0) & x"0000";
#3683555
Lesenswert?

Das funzt durchaus auch mit "rol" (wie im ursprünglichen Ansatz). Das 
Problem ist, daß "rol" halt nur für bit_vector definiert ist:
1
signal ZEILE9E:std_logic_vector(31 downto 0);
2

3
vec_out <= to_stdlogicvector(to_bitvector(ZEILE9E) rol 16);

rol rotiert aber - aber wenn's Rotieren sein soll...

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