Forum: FPGA, VHDL & Co. Signed / Std Logic


von Mark (Gast)


Lesenswert?

Hallo Leute

Darf man eigentlich innerhalbe einer Entity/Architectur nicht signed
und std logic Daten verarbeiten, obwohl die sich gar nicht
"berühren"?
Ich vermische diese auch nicht.
Std Logic Daten arbeiten für sich.
Signed Daten arbeiten für sich.

Folgende Fehlermeldung:
# Error: COMP96_0334: saf_mod.vhd : (119, 17):
Subprogram "=" is ambiguous.

Ich habe folgende Bibliotheken eingebunden:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_signed.all;


Mark

von Mark (Gast)


Lesenswert?

Sorry, aber wenn ich
use ieee.std_logic_unsigned.all;
entferne, dann motzt der Compiler nicht mehr.
Aber erkennt der Compiler dann noch die Std_Logic Daten als
vorzeichenlos an oder betrachtet er diese nun also vorzeichenbehaftet?

Thanks for help!

Mark

von Mark (Gast)


Lesenswert?

Kann mir keiner diesbezüglich helfen?

von Dennis S. (klopfer)


Angehängte Dateien:

Lesenswert?

Ich habe gelernt, dass zuviele eingebundene Bibliotheken sich
gegenseitig behindern. Einige der Schlüsselwörter sind identisch in
mehreren Bibliotheken.

Bei der Verwendung von unsigned, signed und std_logic Typen binde ich
nur die
   ieee.std_logic_1164.ALL;
ein. Damit kann ich fast alle Operationen ausführen. Der Conpiler
unterscheidet dann immer noch zwischen signed und unsigned.
Für mathematische Funktionen binde ich dann noch die
   ieee.numeric_std.ALL;
ein.

Welche Bibliotheken Du brauchst, kannst Du der angehängten Kurzreferenz
entnehmen.

von Ines (Gast)


Lesenswert?

Hallo Mark,

Du schreibst:
> Darf man eigentlich innerhalbe einer Entity/Architectur nicht
> signed und std logic Daten verarbeiten ...

Was meinst Du denn damit? std_logic-Daten sind entweder signed oder
unsigned. Signed ist also ein std_logic.

von Dennis S. (klopfer)


Angehängte Dateien:

Lesenswert?

Sorry hier kommt die andere Referenz, die ich eigentlich schicken
wollte.

von Mark (Gast)


Lesenswert?

Hallo Ines

Das verstehe ich ja nicht.
Ich habe Eingangssignale, welche als SIGNED "reinkommen" und ich habe
Eingangssignale, welche als "STD_LOGIC" reinkommen.

Die SIGNED Daten sollen als 2er Komplement behandelt werden, während
die STD_LOGIC Daten nur positive Werte sind.

"Wie" muss ich also die USE IEEE...... definieren, damit ich keine
"ambiguous"-Meldung mehr bekomme?

(Bin noch nicht so lange im Bereich VHDL tätig...)

Mark

von Mark (Gast)


Lesenswert?

Wow Dennis, das ist ja ein Ding, was du mir da um die Ohren haust...

Muss ich erst mal alles durchlesen...

von Ines (Gast)


Lesenswert?

Hallo Mark,

kannst Du mal den Code schicken?

Ines

von Mark (Gast)


Lesenswert?

Hallo Ines

Im Moment komme ich nicht an meinen eigenen Code ran.
Es reicht ja auch aus, wenn du's mir (Anfänger) verständlich
erklärst:

Also Input-Signale habe ich als SIGNED-Signale und STD_LOGIC-Signale.
SIGNED arbeiten doch im 2er Komplement. STD_LOGIC hingegen sollten die
positiven Werte darstellen und eben nicht im 2er Komplement arbeiten.

So, dann definiert man:
library IEEE;

Und dann die USE...

Nur, welches USE... ist für welchen Datentypen zuständig?

So...
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_signed.all;
...bekommt man die oben beschriebene "ambiguous" Fehlermeldung...

Mark

von Ines (Gast)


Lesenswert?

Hallo Mark,

gleich vorweg, ich arbeite nicht mit SIGNED und UNSIGNED, sondern nur
mit std_logic_vector, der sowohl als signed als auch als unsigned
aufgefasst werden kann, je nachdem ob man die std_logic_signed oder die
std_logic_unsigned einbindet.

Du willst ja aber innerhalb eines Designs mischen. Probier doch mal
deine std_logic_vector-en als UNSIGNED zu definieren und binde dann die
numeric_std ein, also:
  library ieee;
  use ieee.numeric_std.all;

Was auch gehen müsste - wenn ich dich richtig verrstanden habe ist:
  library ieee;
  use ieee.std_logic_1164.all;
  use ieee.std_logic_unsigned.all;

Wie gesagt, ich mache dass so nie, aber probier's doch mal.

Gruß
Ines

von Mark (Gast)


Lesenswert?

Danke Ines.

----
Mark

von high_speed (Gast)


Lesenswert?

Der Fehler liegt daran, dass du gleichzeitig die beiden Biblioteken
benutzt.

use ieee.std_logic_unsigned.all; Definiert std_logic als unsigned.
use ieee.std_logic_signed.all;   Definiert std_logic als signed.

Um in einer Entity signed und unsigned benutzen zu können, gibt es noch
die beiden Ableitungen von std_logic : signed und unsigned

Holger

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.