Rechnen mit VHDL und 32Bit unsigned

Gast #831124
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.
Gast #831243
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.
Gast #832850
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.
#832896
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
Gast #832920
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.
#833923
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
Gast #835844
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

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