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 ?
Gast
#3099444
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;
Ich würde den Vektor invertieren und eins dazu zählen....
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 ...
Gast
#3100075
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...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.