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
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
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.
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.
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).
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