Forum: FPGA, VHDL & Co. Error: Identifier "unsigned" is not directly visible.


von Stephan H. (stiph5)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
Ich bin gerade dabei VHDL zu lernen. Bin dabei auf folgendes Problem 
gestoßen:
Ich möchte abhängig von der Adresse die an einem Bus anliegt ein Array 
beschreiben. Dazu muss ich einen std_logic_vector in ein integer 
konvertieren. Habe folgende Möglichkeit gefunden:
1
variable addr : integer range 0 to 65535 := to_integer(unsigned(sbus_i_addr));
leider bekomme ich beim kompilieren mit dem ModelSim Compiler  folgende 
Fehlermeldung:
1
Error: Identifier "unsigned" is not directly visible.
2
Potentially visible declarations are:
3
        ieee.std_logic_arith.UNSIGNED (type declaration)
4
        ieee.NUMERIC_STD.UNSIGNED (subtype declaration)

Ich habe aber folgende Bibliotheken in Verwendung:
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
USE ieee.std_logic_arith.all;
4
USE ieee.NUMERIC_STD.all;
5
6
library work;
7
use work.busdef.all;
8
use work.adc_ramdef.all;
Die von HDL Designer vorgeschlagenen Bibliotheken sollten also 
inkludiert sein. Des Weiteren verwende ich die „std_logic_vector“ sowie 
die „to_unsigned“ Funktion um einen integer in einen std_logic_vector zu 
konvertieren. Das also der hdl-Designer was verloren hat kann also 
eigentlich nicht sein da diese Funktionen ja zumindest im 
ieee.numeric_std drin sein sollten.
Interessant finde ich auch das ich die „unsigned“ Funktion weder in der 
„ieee.std_logic_arith“ Bibliothek noch in der „ieee.numeric_std“ 
Bibliothek finde:
http://www.csee.umbc.edu/portal/help/VHDL/packages/std_logic_arith_syn.vhd
http://www.csee.umbc.edu/portal/help/VHDL/packages/numeric_std.vhd

wäre toll wenn mir jemand weiter helfen könnte.
Im Anhang ist noch der gesamte „generierte“ Code vom HDL Designer.
LG Stephan

von Fpgakuechle K. (Gast)


Lesenswert?

Stephan H. schrieb:

>
1
Error: Identifier "unsigned" is not directly visible.
2
> Potentially visible declarations are:
3
>         ieee.std_logic_arith.UNSIGNED (type declaration)
4
>         ieee.NUMERIC_STD.UNSIGNED (subtype declaration)
>
> Ich habe aber folgende Bibliotheken in Verwendung:
> [vhdl]LIBRARY ieee;
> USE ieee.std_logic_1164.all;
> USE ieee.std_logic_arith.all;
> USE ieee.NUMERIC_STD.all;

> Interessant finde ich auch das ich die „unsigned“ Funktion weder in der
> „ieee.std_logic_arith“ Bibliothek noch in der „ieee.numeric_std“
> Bibliothek finde:

Dat is koa function do is a sub/type - und der ist in beiden 
Bibliotheken definiert. Eine von beiden muss weg.

MfG,

von Tobias L. (murxwitz)


Lesenswert?

std_logic_arith: alt und nicht standardisiert -> nicht verwenden
numeric_std: "neuer" und ieee standard

beide definieren signed und unsigned

von Georg A. (georga)


Lesenswert?

> Eine von beiden muss weg.

... und das sollte ieee.std_logic_arith.all sein. An sich sollte jedes 
use davon eine dicken (fatalen) Fehler bringen, den man nur durch 
Eingabe eines 30 Zeichen langen Captchas mit gotischen Zeichen 
deaktivieren kann. Sonst stirbt das Zeug nie aus...

von Stephan H. (stiph5)


Lesenswert?

Vielen Dank! Genau das war das Problem. Ich habe zwar damit 
experimentiert eine davon weg zu lassen, jedoch war im Top Level auch 
noch die std_logic_arith inkludiert. Ich denke das war der Fehler.

VIELEN DANK!! War eine Große Hilfe, suche schon die eine oder andere 
Stunde.

LG
Stephan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stephan H. schrieb:
> jedoch war im Top Level auch noch die std_logic_arith inkludiert.
> Ich denke das war der Fehler.
In VHDL wird jedes Modul ohne Referenzen nach aussen (abgesehen von den 
eingebundenen Packages/Bibliotheken) compiliert. Es gibt also keinen 
Bezug zum Toplevel. Allerdings wird es einfach so sein, dass der selbe 
Fehler auch im Toplevel war...

Stephan H. schrieb:
> Interessant finde ich auch das ich die „unsigned“ Funktion weder in der
> „ieee.std_logic_arith“ Bibliothek noch in der „ieee.numeric_std“
> Bibliothek finde
Gleich in den ersten Zeilen der numeric_std kommt die Typdefinition:
1
library ieee;
2
use ieee.STD_LOGIC_1164.all;
3
4
Package numeric_std is
5
  --===========================================================================
6
  -- Numeric array type definitions
7
  --===========================================================================
8
 
9
  type UNSIGNED is array ( NATURAL range <> ) of STD_LOGIC;
10
  type SIGNED is array ( NATURAL range <> ) of STD_LOGIC;
Und dann gibt es nur noch die Funktionen vom Signed/Unsigned-Vektor 
zum Integer und zurück. Die Schritte vom Signed/Unsigned-Vektor zum 
std_logic-Vektor und zurück sind nur Casts.
Sieh dir das mal an:
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std

: Bearbeitet durch Moderator
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.