Forum: FPGA, VHDL & Co. VHDL - addition, logische Operatoren und rol mit einem typ möglich?


von Corni .. (corni)


Lesenswert?

Hallo,
Ich will mit einem 32 bit breiten Typ sowohl Additionen, logische 
Operaten (nand, or, xor, etc...) als auch Rotationen (rol) durchführen, 
welchen Typ soll ich hierführ wählen? Für bit_vector wäre die rotation 
kein problem, allerdings ist die Addition nicht definiert, bei 
std_logic_vecotor wiederum habe ich kein rol. Was empfehlt ihr mir, um 
mit möglichst wenig to_blablabla() auszukommen?
Corni

von Jan M. (mueschel)


Lesenswert?

Die einfachste Lösung ist, std_logic_vector verwenden und rol 
ausschreiben, ohne den rol-Operator zu benutzen.

signal : std_logic_vector(15 downto 0);
...
signal <= signal(0) & signal(15 downto 1);

Oder, um es generisch zu halten für verschiedene Vektorbreiten:
signal <= signal(signal'left) & signal(signal'right downto 
signal'left-1);

Die anderen möglichen Schiebeoperationen lassen sich genauso schreiben.


(Wer kam eigentlich auf die Idee, in VHDL für eine solche Operation 
einen eigenen Operator einzuführen?)

von Corni .. (corni)


Lesenswert?

Leute die wie ich (auch noch mehrmals) um 19 Stellen linksrotieren 
wollen...
Aber danke schonmal, ich hoffe, nur, das es noch ne einfachere Lösung 
gibt :(

von Thomas P. (pototschnig)


Lesenswert?

> signal : std_logic_vector(15 downto 0);
> ...
> signal <= signal(0) & signal(15 downto 1);

Du meintest mit "rotate LEFT" bestimmt:
signal <= signal (14 downto 0) & signal (15);
oder?

MfG
Thomas Pototschnig

von Jan M. (mueschel)


Lesenswert?

@Thomas: Ups, links ist ja die andere Seite ;-)

@Cornelius:
19 Stellen ist doch auch kein Problem (natürlich nur wenn Signal breiter 
als 19 Bit ist):

signal <= signal(signal'left-19 downto signal'right) & 
signal(signal'left downto signal'right+19);

von Corni .. (corni)


Lesenswert?

ah danke, ich dachte, ich müsste jetzt für jede stelle ein  & signal 
(xy) schreiben und war etwas entsetzt ;)
Meine Signale sind 32 bit breit, da sind 19 kein problem :)
MfG
Corni

von Mike (Gast)


Lesenswert?

Wenn du oft die Rotation brauchst, ist es am besten die Funktion in ein 
Package zu schreiben. So kannst du sie individuell aufrufen.
mfg, mike

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.