mikrocontroller.net

Forum: FPGA, VHDL & Co. SystemC - Ganze Zahlen aus Feskommazahl ermitteln


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bruchrechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend zusammen,
wirklich viel Erfahrung mit SystemC oder C++ habe ich leider nicht.
Ich suche aktuell ein eleganteres Konstrukt wie ich aus einer 
Festkommazahl die ganzen Zahlen ermitteln kann. Aktuell benutze ich 
folgendes:
ap_fixed<32,22> tempc = 12.421875;
output4 = static_cast <ap_fixed <32,22> > (static_cast <int> (tempc));
Geht das auch eleganter?
Danke im Voraus!

Autor: S. R. (svenska)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Passend nach rechts shiften?

Autor: dfIas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie ist Eleganz definiert?
Ganz ehrlich, als Programmierer der ersten Stunde sind mir diese 
modernen Spacherweiterungen eher zuwider, als dass sie in irgendeiner 
Weise den ganzen Sermon leserlicher machen.
Ich selbst würde zur klassischen Programmierung zurückfinden und die 
Festpunktzahl als gewöhnlichen 32-Bit-Integer definieren - mit 10 
Nachkommastellen im Sinn (Format "22.10"). Der Vorkommaanteil ergibt 
sich dann, wie bereits von S. R. erwähnt, durch Schieben um diese 10 
Positionen nach rechts. Mit der Zuweisung im Gleitkommaformat 
entsprechend:
tempc = (int)(12.421875 * 1024);
output4 = tempc / 1024;
Die 1024 könnte man als #define festlegen oder man definiert sich Makros 
zur Umrechnung:
tempc = DBL2FIX (12.421875);
output4 = FIX2INT (tempc);
Das wäre zumindest mein Verständnis von Eleganz.

Autor: daniel__m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

keine Ahnung wie in SystemC der Type ap_fixed aufgebaut ist, in Xilinx 
HLS ist das eine Klasse, welche die Methode to_int() hat.

Autor: daniel__m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:
> Passend nach rechts shiften?

Dann würde sich sicherlich der repräsentierte Wert ändern, z.B.
16.00 >> 2 = 4.000

Autor: daniel__m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dfIas schrieb:
> Das wäre zumindest mein Verständnis von Eleganz.

Ich habe früher auch so gearbeitet, bin davon aber weggekommen. Macros 
sind nicht typsicher und "5 im Sinn" bei mir zu Fehleranfällig. Irgendwo 
(z.B. beim Refactoring) wird ürgendwas übersehen.

Daher nutze ich lieber die ap_(u)fixed Klassen (in Xilinx HLS) und kann 
diese wie Floats einfach addieren, multiplizieren, etc und brauche nicht 
händisch die Wertigkeit korrigieren. Natürlich muss man Wissen, was man 
beschreibt, aber es entlastet.

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.

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