Hi, Ich habe einen Vektor x von variabler länge der allerdings immer nur an einer stelle ungleich 0 sein kann. z.B x<="00100" Wie kann ich daraus einen Vektor erstellen, der oberhalb mit 1 aufgefüllt ist. Also y<="11000", bzw. kann man die Stelle an welcher x(i)= '1' gilt herausfinden ?
mit etwas code process(x) variable t : boolean; begin t := false for i in x'range loop if x(i) = '1' then t := true; y(i) <= '1'; elsif t then y(i) <= '0'; else y(i) <= '1'; end if; end for; end process;
Lothar Miller schrieb: > Ich würde den Vektor invertieren und eins dazu zählen.... Und das Ganze dann noch einmal nach links schieben. Dann sollte es passen: 00100 Quelle 11011 invertiert 11100 Eins addiert 11000 nach links geschoben Gruß, Thomas PS: Alternativ kann man auch nach der Addition das Ergebnis mit der Quelle "exklusiv-oder"-verknüpfen. Ergibt das gleiche Ergebnis ...
Thomas T. schrieb: > PS: Alternativ kann man auch nach der Addition das Ergebnis mit der > Quelle "exklusiv-oder"-verknüpfen. Ergibt das gleiche Ergebnis ... nur das der left-shift keine Hardware Ressourcen verbraucht :)
Thomas T. schrieb: > dann noch einmal nach links schieben. Dann sollte es passen: Richtig. Mir kam es vor allem drauf an, zu zeigen, dass man zwar schnell mal eine VHDL Schleife (mit unbestimmtem Ergebnis bzgl. Ressourcenbedarf) hinschreiben kann. Oder alternativ auch einfach mal Nachdenken, wie man das mit simplen Bitfunktionen erledigen könnte...
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.