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
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....
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 ... :)
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
Duke Scarring schrieb: > Hier mal die simulierbare und synthetierbare Umwandlung zu > floating-Point: Danke! Für meine Testbench gold wert! :)
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!
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);
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.