www.mikrocontroller.net

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

Autor: Karsten (Gast)
Datum: 12.05.2008 18:33

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: 12.05.2008 18:59

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: 12.05.2008 19:04

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: 12.05.2008 20:07

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: 12.05.2008 20:17

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: 14.05.2008 20:30

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net