ieee_proposed.fixed_pkg empfehlenswert?

Persönliche Seite #4883360
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
Persönliche Seite #4883418
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 ... :)
Gast #4883505
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
Persönliche Seite #4887590
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!
Persönliche Seite #4888087
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);
Persönliche Seite #4888607
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 :)
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren