Forum: FPGA, VHDL & Co. additionsproblem


von Gabriel (Gast)


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 ! ! !

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


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:
1
  datas_o <= std_logic_vector(unsigned('0'&data0_i) + unsigned('0'&data1_i));

von Gabriel (Gast)


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?

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


Lesenswert?

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

von Kest (Gast)


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

von Gabriel (Gast)


Angehängte Dateien:

Lesenswert?

Danke nochmals für die Mühe.

Das Programm soll so zerfleddert sein, ist vorgabe.

von Gabriel (Gast)


Lesenswert?

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

von Gabriel (Gast)


Lesenswert?

Code ist übrigens oben im Anhang.

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


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.
1
  :
2
 if    datas_i <= '0'&X"10" then lvl0_o <= '1'; --da nach erfüllung einer Bedingung 
3
 elsif datas_i <= '0'&X"1B" then lvl1_o <= '1'; --die IF Schleife verlassen wird
4
 elsif datas_i <= '0'&X"43" then lvl2_o <= '1'; -- kann die Abfrage so erfolgen.
5
  :
6
  :

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

von Gabriel (Gast)


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

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


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 ;-)

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.