mikrocontroller.net

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


Autor: Corni .. (corni)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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?)

Autor: Corni .. (corni)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Corni .. (corni)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.