Forum: FPGA, VHDL & Co. ieee_proposed.fixed_pkg empfehlenswert?


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Guten Mittag!

ich bin beim Implementieren von DSP Algorithmen auf einem FPGA und habe 
eine Frage zur ieee_proposed.fixed_pkg Library.

Früher hatte ich alles per signed und unsigned gemacht und mir einfach 
gemerkt, wo mein Komma ist. Nach Multiplikationen von zB 9*9Bit hab ich 
dann einfach den Teil aus dem Vector geschnitten, der mein Ergebnis 
enthält usw ... Hat soweit funktioniert, war aber naja, etwas 
umständlich.

Da es sich jetzt um ein neues Projekt handelt, wollte ich mich 
informieren, ob es synthetisierbare Festpunkt-Libraries für VHDL gibt.

Google hat ieee_proposed.fixed_pkg ausgespuckt.

Ist es empfehlenswert, diese zu verwenden oder sollte ich das immer noch 
wie damals machen?

Viele Grüße,
Mampf

von Vancouver (Gast)


Lesenswert?

Ja, das habe ich vor etwas 2 Jahren einmal bei einem größeren Projekt 
benutzt und bin auf keine nennenwerten Probleme gestoßen. Ich wundere 
mich nur, dass das immernoch 'proposed' heißt. Aber die Mühlen der 
Standardisierung mahlen langsam....

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Vancouver schrieb:
> Ja, das habe ich vor etwas 2 Jahren einmal bei einem größeren
> Projekt
> benutzt und bin auf keine nennenwerten Probleme gestoßen. Ich wundere
> mich nur, dass das immernoch 'proposed' heißt. Aber die Mühlen der
> Standardisierung mahlen langsam....

Liegen den ufixed und sfixed Datentypen auch std_logic zugrunde, wie es 
bei signed und unsigned ist?

Ich würde mal vermuten: ja ... :)

von Vancouver (Gast)


Lesenswert?


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Vielen Dank!

von Duke Scarring (Gast)


Lesenswert?

Mampf F. schrieb:
> Da es sich jetzt um ein neues Projekt handelt, wollte ich mich
> informieren, ob es synthetisierbare Festpunkt-Libraries für VHDL gibt.
>
> Google hat ieee_proposed.fixed_pkg ausgespuckt.
>
> Ist es empfehlenswert, diese zu verwenden oder sollte ich das immer noch
> wie damals machen?

Bei Xilinx und Modelsim sollte es inzwischen in der ieee-Lib sein.
Hier mal die simulierbare und synthetierbare Umwandlung zu 
floating-Point:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
use ieee.fixed_pkg.all;
5
use ieee.float_pkg.all;
6
...
7
 si   : signed( ...)
8
 fr   : sfixed( -20 downto -32);
9
 fl   : float32;
10
...
11
 fr  <= to_sfixed( si);
12
 fl  <= to_float( fr); 
13
...

Duke

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Hier mal die simulierbare und synthetierbare Umwandlung zu
> floating-Point:

Danke! Für meine Testbench gold wert! :)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ich hab jetzt das fixed_pkg zum Laufen bekommen :)

Eine Frage hätte ich hierzu noch: Angenommen ich multipliziere 23.8 mit 
23.8, dann kommen eigentlich 46.16 heraus, aber ich benötige nur 23.8.

Ich hab dann resize(x,23,-8) verwendet und das Synthese-Tool ist 
zufrieden.

Allerdings kenne ich die Implementierung nicht. Ich würde am liebsten 
aus dem Ergebnis-Vektor einfach die Bits 23 downto -8 herausschneiden 
ohne Runden oder Saturierungseffekte.

Kostet mich das eine Menge Logikelemente, wenn ich resize verwende, 
anstatt mein ufixed nach std_logic zu konvertieren und anschließend 
einfach meine Bits zu selektieren, die mich wirklich interessieren?

Vielen Dank!

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ah, ich hab es gefunden:

https://www.thecodingforums.com/threads/truncate-with-fixed_pkg.636801/

> In short, the resize function has an argument for the rounding style,
> if you don't specify a value for that argument it defaults to
> 'fixed_round'. There is also an argument for overflow style that
> defaults to 'fixed_saturate'. You'll probably want to change both of
> these. Modify your use of resize to be of the form
> xyz <= resize(abc, xyz'left, xyz'right, fixed_wrap, fixed_truncate);

von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

Puh, jetzt kann ich endlich damit arbeiten ... GTKWave konnte bis zum 
Kompilieren aus dem Repo kein Festkomma (und wohl immer noch kein 
Floating-Point) und GHDL zickte mit den Compiler-Schaltern, i386 Libs 
und Reihenfolge der VHDL-Files rum ...

Das Festpunkt/Float-Package ist echt super ... Sowohl Synthese als auch 
Simulation funktioniert :)

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

Ah und GTKWave kann doch Fließkomma ... Allerdings fix auf 64Bit ...

Per:
1
fl_out <= to_float64(to_float(output));

funktionierts. Viel rumprobiert ... Anders scheint es nicht zu 
funktionieren. Entweder taucht fl_out dann nicht im GTKViewer auf, oder 
GHDL bringt einen Out-of-Bounds-Error oder oder oder ...

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.