Forum: FPGA, VHDL & Co. VHDL Alu Shift-Operationen


von Markus (Gast)


Lesenswert?

Hallo Leute,

will eine Shift-Operation in VHDL machen.
a, b und out sind jeweils 32 Bit std_logic_vector Typen.

out <= std_logic_vector(unsigned(a) srl to_integer(unsigned(b)));

Leider kommt bei Out in der Simulation immer 0 raus egal welche Zahl ich 
um wie viel shifte.

Wäre lieb wenn mir einer helfen kann.
Danke!

von Markus (Gast)


Lesenswert?

Das gleiche passiert bei sll und sra auch.

von Klakx (Gast)


Lesenswert?

probier mal

numeric_std package laden


out <= 
std_logic_vector(SHIFT_LEFT(unsigned(a),to_integer(unsigned(b))));

von VHDL (Gast)


Lesenswert?

RSHIFT: ("0" & a(31-1 downto 0))

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


Lesenswert?

VHDL schrieb im Beitrag #4221959:
> RSHIFT: ("0" & a(31-1 downto 0))
Ja, knapp vorbei ist auch daneben. Und diese Zeile ist gleich 2 mal 
knapp vorbei...

> Leider kommt bei Out in der Simulation immer 0 raus egal welche Zahl ich
> um wie viel shifte.
1. "out" ist ein ganz schlechter Name für ein Signal...
2. Welche Simulation? Wie sieht der Rest der Beschreibung aus? Wie hast 
du den Fehler festestellt? Welchen Wert hättest du erwartet?
3. aus http://vhdl.renerta.com/mobile/source/vhd00047.htm
1
shift_operator ::= sll | srl | sla | sra | rol | ror
2
:
3
:
4
The shift operators are defined for the one-dimensional array with 
5
the elements of the type BIT or BOOLEAN

: Bearbeitet durch Moderator
von Markus (Gast)


Lesenswert?

Hallo Leute,

es geht inzwischen, der Fehler lag an der Testbench. Sorry dann für 
euren Aufwand.

Wollte eine 32 Bit Folge in der Testbench um dezimal drei Shiften, hatte 
aber die Eingänge an der Alu vertauscht. Die dezimal drei wurde dann um 
eine extrem hohe Zahl geschiftet, wo natürlich logisch ist, dass dann 
überall 0en standen in der Simulation.

Schlussendlich haben jetzt sogar beide Methoden funktioniert.
Sowohl mit der SLL  SRL  SRA operatoren als auch mit der SHIFT_LEFT / 
SHIFT_RIGHT Funktion!


Danke

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.