Forum: FPGA, VHDL & Co. Rechnen mit VHDL und 32Bit unsigned


von Peter (Gast)


Lesenswert?

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.

von Mathi (Gast)


Lesenswert?

> 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.

von Klaus Falser (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Torsten L. (bluehorn)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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.

von Torsten L. (bluehorn)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.