mikrocontroller.net

Forum: FPGA, VHDL & Co. additionsproblem


Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HILE!

Ich will 2 std_logic_vector (7 downto 0) addieren. (datas_o ist 8 downto 
0).

Da ich die nicht einfach addieren kann mache ich:

datas_o <= std_logic_vector(unsigned(data0_i) + unsigned(data1_i));

ich brauche aber einen Überlauf (alles was größer als FF ist).

Wenn ich einen Vektor mit "0" & data0_i erweitere verfälscht es meinen 
Wert.

Was kann ich machen?????

D A N K E ! ! !

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich einen Vektor mit "0" & data0_i erweitere
> verfälscht es meinen Wert.
Wenn data0_i vorzeichenlos ist, müsste das doch gehen.
Inwiefern wird dein Wert verfälscht?
Welche Libs verwendest du?
Mit der Numeric_Std gehts so:
  datas_o <= std_logic_vector(unsigned('0'&data0_i) + unsigned('0'&data1_i));

Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich einen Vektor mit "0" & data0_i erweitere
> verfälscht es meinen Wert.
Wenn data0_i vorzeichenlos ist, müsste das doch gehen.
Inwiefern wird dein Wert verfälscht?
Welche Libs verwendest du?
Mit der Numeric_Std gehts so:

Danke für die rasche Antwort.

So hab ich es eigentlich versucht. Ich überprüfe das Ergebnis dann mit
if bzw. ifels und da kommt immer was falsches raus. Mir fällt aber 
gerade ein, dass ich nur mit 8Bit im IF vergleiche. Kann das der Fehler 
sein?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann das der Fehler sein?
Zeig doch mal den Code.
Evtl. hilft das weiter...

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das, was Du geschrieben hast:

datas_o <= std_logic_vector(unsigned(data0_i) + unsigned(data1_i));

dürfte nicht funktionieren, da Du zwei 7-Bit unsigned addierst und es 
kommt auch ein 7-Bit unsigned raus. Du musst so machen, wie Lothar 
schrieb: erst erweitern auf 8 Bit und dann addieren. Dann ist Dein 
Überlauf in data_o(8). Was willst Du da mit IF's vergleichen? Verstehe 
ich nciht.

Grüße,
Kest

Autor: Gabriel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke nochmals für die Mühe.

Das Programm soll so zerfleddert sein, ist vorgabe.

Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
will nur je nachdem wie hoch der Wert ist verschiedene Ausgänge 
schalten. Ist eine Übungsaufgabe

Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code ist übrigens oben im Anhang.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Programm soll so zerfleddert sein, ist vorgabe.
Mann, das ist so gut wie eine Verschlüsselung,
der beste Kopier- und Kapierschutz... ;-)

> Mir fällt aber gerade ein, dass ich nur mit 8Bit im IF vergleiche.
> Kann das der Fehler sein?
Erweitere die Abfrage mal nach 9 Bits. Das hilft.
  :
 if    datas_i <= '0'&X"10" then lvl0_o <= '1'; --da nach erfüllung einer Bedingung 
 elsif datas_i <= '0'&X"1B" then lvl1_o <= '1'; --die IF Schleife verlassen wird
 elsif datas_i <= '0'&X"43" then lvl2_o <= '1'; -- kann die Abfrage so erfolgen.
  :
  :

BTW: Lass doch was hören, wenns geklappt hat ;-)

Autor: Gabriel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DU BIST GENIAL!!!

JA, jetzt funktioniert es. Die Erweiterung bei den IF Abfragen hat 
gefehlt.

Ich glaube ich stehe tief in Deiner Schuld.

Das beste daran, ich hab´s verstanden.

SUPER HILFE

LG
Gabriel

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich glaube ich stehe tief in Deiner Schuld.
¡De nada!

> Das beste daran, ich hab´s verstanden.
Das ist allerdings wirklich eine gute Nachricht ;-)

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.