mikrocontroller.net

Forum: FPGA, VHDL & Co. zwei zahlen subtrahieren (betrag)


Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Nur ne ganz kurze Frage. Ich habe zwei 5bit std_logic_vector zahlen.
Ich möchte nun von der größeren die kleinere abziehen bzw

result = abs( x - y);

berechnen.

momentan mache ich es so:
if (x > y) then
  result <= x - y;
else
  result <= y - x;
endif;

Da wird vom vhdl compiler ja der result = ... - ... Teil quasi doppelt
angelegt.

Gibt es einen weg das ganze zu optimieren ?
Das ganze soll auf nem Spartan3 FPGA laufen und ich brauche sehr viele

dieser Berechnungen (teils ineinander geschachtelt).

Bye, Simon

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

so als Idee. Teste, nach Subtrahktion, das msb (Vorzeichen) auf 1
(negativ). Wenn negativ dann führe ein Zweierkomplent aus. Ansonsten
mache nichts.

Zweierkomplent:
Gegeben: d-52 == 1.1001100 (negativ.52)
Lösung:            0110011
                        +1
Ist gleich:        0110100 (= d52)

Geht bestimmt schneller.

Gruß Sebastian

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zweierkomplement.

Ich sollte ins Bett gehen.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Da wird vom vhdl compiler ja der result = ... - ... Teil quasi >doppelt
angelegt.

Hast Du mal nachgeschaut?

Bei mir kommt folgende Meldung:

    Summary:
  inferred   1 Adder/Subtractor(s).
  inferred   1 Comparator(s).


Bei Sebastians Lösung braucht man zwar keinen Komparator, dafür aber
zwei Addierer.

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oha da hab ich den compiler aber unterschätzt :o

Hatte es nicht einzeln ausprobiert, bei meinem großes Projekt lässt
sich
das ganze nämlich nicht als RTL View anzeigen (rendert ewig rum, nach
1h hab ich abgebrochen g).
Damit hat sich dann meine Optimierungsidee erledigt g
Danke !!

Bye, Simon

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das ganze nämlich nicht als RTL View anzeigen

Brauchst Du gar nicht. Auch nicht in größeren Projekten. Im
Synthesizer-Bericht steht normalerweise alles drin:


 Synthesizing Unit <bla>.
 .....
 Found 5-bit subtractor for signal <result>.
 Found 5-bit comparator greater for signal <$n0003> created
 at line 30.

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider ist das ganze derart komplex dass man da im Bericht nicht mehr
durchblickt.
Der Vergleicher Teil belegt ~30% eines 400k Spartan3 ;)
Und da das mit procedure bzw function macros gebaut wird machen die
signalnamen auch nicht wirklich sinn ;)

Aber da der vhdl Compiler wirklich wieder einmal viel schlauer ist als
ich dachte brauch ich da ja eh nicht weiter optimieren :)
Ist immer wieder erstaunlich wie gut der opimiert...

Bye, Simon

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich sehe nur einen Addierer.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also ich sehe nur einen Addierer.

Ich nehme an Du beziehst Dich auf Deinen Vorschlag und meinen Kommentar
dazu.

Für die Subtraktion brauchst Du einen Addierer/Subtrahierer und für das
Zweierkomplement brauchst Du nochmal einen. Korrigiere mich falls ich
falsch liege.

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.