Forum: FPGA, VHDL & Co. VHDL + std_logic als return einer Funktion


von Karsten (Gast)


Lesenswert?

Guten Abend

Ich arbeitet zur Zeit an einem kleinen VHDL-Projekt, leider bin ich im 
Zusammenhang mit Funktionen auf ein Problem gestossen.

Die grobe Struktur meines Codes:
1
LIBRARY IEEE;
2
USE ieee.std_logic_1164.all;
3
USE ieee.std_logic_unsigned.all;
4
USE work.DefinitionsPKG.all;
5
ENTITY Processor is PORT (
6
....);
7
END Processor;
8
9
ARCHITECTURE ProcessorARCH OF Processor IS
10
...
11
END ProcessorARCH;
12
13
PACKAGE parity IS
14
  FUNCTION parity_odd return std_logic; -- *
15
END parity;
16
--- body
17
PACKAGE BODY parity IS
18
FUNCTION parity_odd return std_logic IS
19
  -- return variable
20
  signal ret:  std_logic:='0';
21
  BEGIN
22
    RETURN ret;
23
  END parity_odd;
24
END parity;
In der mit einem * markierten Zeile tritt der erste Compiler-Error auf.
Error: CSVHDL0002: MICRO2.VHD: (line 379): syntax error, unexpected 
IDENTIFIER, expecting TYPE_NAME or LIBRARY_NAME or PACKAGE_NAME

Ist es tatsächlich nicht erlaubt std_logic als Rückgabetyp für eine 
Funktion zu verwenden?
Oder was mache ich falsch?

Vielen Dank für Eure Hilfe.
Gruss

Karsten

von Jörg (Gast)


Lesenswert?

Vieleicht ist es besser, Dein Package in ein getrenntes File zu packen.
Wenn nicht: Bei mir kennt er std_logic als Typ nicht. Füge ich aber
zwischen "end architecture" und "begin package" all Deine LIBRARY- and
USE-Anweisungen ein, dann klappts mit std_logic als Typ (anscheinend
vergisst mein Compiler die Bibliotheken ?? , ich verwende ISE WebPack).

Ein weiterer Fehler: Signale in Funktionen!! Verwende Variablen

von DaMicha (Gast)


Lesenswert?

Hallo.

Ich vermute, Signale deklarieren ist in functions nicht erlaubt.

Versuch mal:
1
-- return variable!!!
2
  variable ret:  std_logic:='0';


Gruß DaMicha.

von Karsten (Gast)


Lesenswert?

Hallo Jörg

Danke für deine Antwort. Tatsächlich funktioniert es, wenn ich nochmals 
die Library Definitionen und USE einbinde. Ich habe nun für meine 
Funktionen ein eigenes File erstellt, ist eine bessere Trennung.

Danke für den Hinweis bezüglich variable anstatt signal.

P.S.: Ich verwende Galaxy und Simili.

von Jörg (Gast)


Lesenswert?

Ja aber warum "vergisst" er LIBRARY- und USE-Anweisungen?
Möchte ich auch mal wissen (obwohl die Aufteilung in mehrere
Module eindeutig vorzuziehen ist).

von Rick Dangerus (Gast)


Lesenswert?

Der erste "use"-Stapel gilt nur für Deine Prozessor-entity.
Daher kennt das Package dann kein std_logic mehr, außer du bindest die
entsprechende Bibliothek wieder ein.

Neben der Trennung von Prozessor und Package, wie du sie schon vollzogen 
hast, empfiehlt es sich die Datei ganz genau so zu bennenen, wie die 
entity bzw. das package.

Rick

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.