VHDL Vektor füllen

OP #3099103
Lesenswert?

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
Lesenswert?

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;
#3099734
Lesenswert?

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 ...
Moderator (Firma: Titel) Persönliche Seite #3100110
Lesenswert?

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.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren