www.mikrocontroller.net

Forum: FPGA, VHDL & Co. signed, unsigend, std_logic ...


Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde des VHDL

Ich blick's überhaupt nicht mehr.
Wer kann mir helfen?

Also, ich habe einen 10 bit breiten Wert, der die Werte 0 bis 1023
haben kann. Nennen wir Ihn x.

Von diesem Wert muss ich einen anderen Wert abziehen, der ebenfalls die
Werte 0 bis 1023 annehmen kann. Nenn wir Ihn y.

So, jetzt kommt's:
Das Ergebnis soll aber vom Typ SIGNED sein, aber ebenfalls nur 10 bit
breit sein.

Hä?
Das Ergebnis, wenn es denn als SIGNED darzustellen ist, muss doch 11
bit breit sein, oder?

Wie schreibt man das dann?
Danke!

Mark

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bin nicht ganz sicher, ob ich Deine Frage richtig verstanden habe.

Für die richtige Breite Deines Registers musst Du schon selbst sorgen:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_signed.ALL;
...
PORT(   x,y : IN std_logic_vector(9 DOWNTO 0);
        o   : OUT std_logic_vector(10 DOWNTO 0)
);
...
 o <= ('0' & x) - ('0' & y);
...

sollen x und y auch negativ sein, so musst Du anstatt der Null jeweils
das MSB nocheinmal vorne anhängen.

VG Michael

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x = 10 bit = 0 ... 1023
y = 10 bit = 0 ... 1023

egal ob x + y oder x - y, das Ergebnis muss 1 bit breiter sein
als x bzw. y,

also z = 11 bit = 0 ... 2047 oder - 1024 ... + 1023

je nachdem, ob als signed oder unsigned betrachtet.

Da x und y positiv sein sollen, kann man einfach mit 1 MSB = '0'
erweitern, also vereinfacht geschrieben :

z <= ('0' & x) - ('0' & y); -- x und y sind immer positiv (MSB=0)

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Michael.
Danke FPGA-User.

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.