www.mikrocontroller.net

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


Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
USE work.DefinitionsPKG.all;
ENTITY Processor is PORT (
....);
END Processor;

ARCHITECTURE ProcessorARCH OF Processor IS
...
END ProcessorARCH;

PACKAGE parity IS
  FUNCTION parity_odd return std_logic; -- *
END parity;
--- body
PACKAGE BODY parity IS
FUNCTION parity_odd return std_logic IS
  -- return variable
  signal ret:  std_logic:='0';
  BEGIN
    RETURN ret;
  END parity_odd;
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

Autor: Jörg (Gast)
Datum:

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

Autor: DaMicha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich vermute, Signale deklarieren ist in functions nicht erlaubt.

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


Gruß DaMicha.

Autor: Karsten (Gast)
Datum:

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

Autor: Jörg (Gast)
Datum:

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

Autor: Rick Dangerus (Gast)
Datum:

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

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.