Forum: FPGA, VHDL & Co. VHDL Vektor füllen


von Laura H. (laura_h)


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 ?

von user (Gast)


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich würde den Vektor invertieren und eins dazu zählen....

von Thomas T. (knibbel)


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 ...

von Paebbels (Gast)


Lesenswert?

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 :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

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
Noch kein Account? Hier anmelden.