www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht 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:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

...

signal foo : std_logic_vector(31 downto 0);
signal bar : unsigned(31 downto 0);

...

bar <= unsigned(foo);

Grüsse, Torsten

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.