Hallo Leute, ich möchte mit meinem FPGA Rechnen und zwar folgendermassen: Ich habe eine Komponente die einen 32Bit std_logic_vector bekommt. Mit diesem möchte ich weiter rechnen. Sprich dieser wird addiert, subtrahiert und dividiert. Ich habe allerdinsg das Problem dass ich keine 32Bit unsigned variablen anlegen kann die ich innerhalb meines processen nutzen möchte. Gibt es hier irgend nen Trick? Ne andere Frage ist: Wie kriege ich einen real- wert mit kommawert über einen 16Bit parallelbus an den FPGA übertragen damit dieser auch als real im FPGA erkannt wird? Danke und Gruss, Peter.
> Ich habe allerdinsg das Problem dass ich keine 32Bit unsigned variablen > anlegen kann die ich innerhalb meines processen nutzen möchte. ??? Wo liegt das Problem? Hast Du ein Beispiel? > Wie kriege ich einen real- wert mit kommawert über einen 16Bit > parallelbus an den FPGA übertragen damit dieser auch als real im FPGA > erkannt wird? Den Datentyp real kann man nicht synthetisieren. Du musst dafür einen der mathematischen Packages aus VHDL-2006 verwenden oder was eigenes machen.
Warum kannst Du keine 32 Bit unsigned Objekte anlegen? Du brauchst nur das Paket ieee.numeric_std und castest den std_logic vector auf die unsigned Variable.
Hallo, mit dem typen unsigned komm ich irgendwie nicht zurecht. ich habe dass volgendermassen versucht zu realisieren: variable ui_StartPosition : unsigned (31 downto 0); ... ... ui_StartPosition := conv_unsigned (Data, 32); Data ist von Typ std_logic_vector und ist ein eingang von der komponente. Hier bekomme ich eine Fehlermeldung: |No matching overload for conv_unsigned was mach ich denn falsch??? HAt mir einer ev. ein kleines Beispiel wie dass richtig gehört. Danke und gruss, PEter.
Peter wrote: > mit dem typen unsigned komm ich irgendwie nicht zurecht. > > ich habe dass volgendermassen versucht zu realisieren: > > variable ui_StartPosition : unsigned (31 downto 0); > [...] > ui_StartPosition := conv_unsigned (Data, 32); conv_unsigned kommt IIRC aus dem package ieee.std_logic_arith, das man nicht verwenden sollte (keine Lust, jetzt die Punkte aufzuzählen, man nutze Google zur Begründung ;-)). Was funktioniert ist sowas:
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.numeric_std.all; |
4 | |
5 | ...
|
6 | |
7 | signal foo : std_logic_vector(31 downto 0); |
8 | signal bar : unsigned(31 downto 0); |
9 | |
10 | ...
|
11 | |
12 | bar <= unsigned(foo); |
Grüsse, Torsten
Hallo, Torsten vielen Dank so klappt dass schon mal. Jetzt müsst ihr mir dass mit dem Real nur noch erklären. Ich möchte eine unsigned 32Bit variable durch eine Real (fliesskoma) dividieren und das Ergebniss wieder als Ganzzahl in eine unsigned ablegen. Ist dass möglich? Danke und Gruss, Peter.
Hi Peter, Peter wrote: > Torsten vielen Dank so klappt dass schon mal. freut mich. > Jetzt müsst ihr mir dass mit dem Real nur noch erklären. > > Ich möchte eine unsigned 32Bit variable durch eine Real (fliesskoma) > dividieren und das Ergebniss wieder als Ganzzahl in eine unsigned > ablegen. > > Ist dass möglich? Möglich schon, der Aufwand ist halt immens. Die Synthese-Werkzeuge können noch kein Fliesskomma, das darf man dann nötigenfalls selber auf Basis von signed und unsigned nachbilden. Genaueres findest Du natürlich in der Artikelsammlung, siehe Artiken Rechnen in VHDL. Hoffe, das hilft Dir weiter... Torsten
Hallo, ich hab immer noch ein kleines Problem mit dem Unsigned. Erstens spukt das Synthesetool haufenweise Found combinational loop during mapping... wenn ich eine Division durchführen möchte. Wenn es dann doch mal fertig ist dann will aber der Simulator (ModelSim) nicht laufen. Hier spukt er folgendes aus: Identifier "unsigned" is not directly visible. Kann mir jemand dieses Verhalten erklären? gruss, PEter
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.