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
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 ?
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.
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 ?
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"; |
Ich habe mich etwas gewundert über die 7 downto 10 :). Vielen Dank Jetzt funktioniert es.
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...
Lukas W. schrieb: > Mit sll oder ähnlichem Funktioniert es genauso wenig. Der Schlüssel sind die richtigen Datentypen, VHDL ist da sehr streng: Beitrag "Links schieben geht nicht, warum?"
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.