Forum: FPGA, VHDL & Co. Eigene Library einbinden


von Sebastian (Gast)


Lesenswert?

Hallo,

so ich habe ein eigenes Package Seg7Decoder in VHDL geschrieben und in
der Datei MyFirstPackage abgespeichert. Alles funktioniert super. Ich
habe nur ein Problem beim einbinden der Package in mein Projekt. Ich
dachte mit:

library Seg7Decoder
use work.Seg7Decoder.all

mache ich meinem Projekt die Library bekannt. Ich habe auch die Datei
MyFirstPackage in den work Ordner kopiert. Aber es funktioniert nicht.


Es funktiniert erst, wenn ich mein Projekt mittels Add Source die Datei
MyFirstPackage.vhdl bekannt mache. Ich finde das aber unschön.

Die Standard library IEEE kann ich schließlich auch ohne vorherige Add
Source benutzen.

Ich danke schon mal für Eure Tipps,
Sebastian

von FPGAküchle (Gast)


Lesenswert?

library Seg7Decoder
use work.Seg7Decoder.all
    ^^^^

der erste Teil nach use ist der Bibliotheksname, du nimmst das
package aus work, nicht seg7decoder. Deine Library zeile ist
zweckfrei.

Bibliothek meint nicht Quelltext sondern compilierten Quelltext.
Also du musst den Quelltext deines packages compilieren bzw. dem
automat. Compilieren bekannt machen (z.B mit add source). Und du musst
angeben in welche Bibliothek compiliert werde soll. Wenn nicht, wird
standardmäßig nach work compiliert.

Die IEEE ist als standardbibliothek schon vorcompiliert, deshalb musst
Du das add nicht ausführen.

von Sebastian (Gast)


Lesenswert?

Hallo,

@FPGAküchle danke für Deine Antwort. Damit komme ich, bestimmt weiter.
 Aber ich hab da noch zwei Fragen.

Ich habe mein Package in einem "neuen Projekt" erstellt. Mir fällt
auf, dass ich das nie compiliert habe. Sondern ich habe immer nur die
Syntax checken lassen. Hier meine erste Frage, wie lasse ich mein
Package compilieren? Ich sehe da kein XST- oder Compile-Knopf.

Welche Endung hat meine compilierte Package dann??? *.lib ???

Danke für Eure Geduld,
Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

also es tut mir echt leid aber ich denke ich bin zu blöd. Ich weiß
nicht wie ich den Pfad ändern kann wohin XST compiliert. Ich habe in
meinem extra Projekt, indem ich das Package geschrieben habe, einen
Ordner namens work. In diesem befindet sich die Dateien:

hdpdeps.ref
hdlib.ref

und dann noch einen Subordner namens sub00 mit
vhpl00.vho und vhpl01.vho

Ist da mein Package drin???? Wenn ja, dann finde ich das komisch, weil
dann meine Packages immer den gleichen Dateienname bekommen. Ich bin es
gewohnt von meinen C++Projekten libraries einfach in ein Projekt zu
kopieren und fertig....#include...

Danke
Sebastian.

von FPGAküchle (Gast)


Lesenswert?

Ein #include oder ähnlichees gibt es in VHDL nicht. Allerdings steht
es Dir frei deinen Quelltext vor Synthese/Simulation-Complation durch
einen Präprozessor (wie der von C) zu schicken. Dann kannst Du
natürlich mit #include arbeiten.

von Sebastian (Gast)


Lesenswert?

Mal für einen Idionten wir mir:

1.Schritt:
Ich habe eine VHDL File namens MyFirstPackage.vhd (in einem völlig
neuen Projekt). Das muss ich jetzt compilieren. Aber wie?

von Klaus F. (kfalser)


Lesenswert?

Für die Synthese kannst Du nicht die Library aus einem anderen Projekt
einbinden, Du kannst nur den Quelltext einbinden.
Das geht mit Menu "Projekt/Add Source..". Damit bleibt das Quellfile
im Verzeichnis wo es ist.
Du kannst aber auch mit "Project/Add Copy of source.." eine Kopie des
Files MyFirstPackage.vhd in dein Projektverzeichnis kopieren.

Wenn Du unbedingt dein File in eine getrennte Library kompilieren
willst, dann mußt Du erst mit "Projekt/New Source.." eine neue VHDL
Library erzeugen. Dann kannst Du dein Quellfile in diese Library
verschieben (im rechten Fenster "Sources" das File auswählen, rechts
klicken und "Move to Library .. ").
Das Arbeiten mit Libraries bei der Synthese macht nur Sinn, wenn man
bei der Simulation sein großes Projekt in Libraries aufgeteilt hat, und
man am Quellcode kein Komma ändern will.

Es ist aber nicht notwendig, dein Package in eine getrennte Library zu
kompilieren.
Du darfst Libraries in VHDL nicht unbedingt mit C++ Libraries
vergleichen. Libraries sind logische Einheiten, wie der Compiler sie
auf Files und Directories abbildet, ist implementierungsabhängig.

Libraries machen Sinn um z.B. Testbench und Projekt zu trennen und
generische Teile wiederzuverwenden.
Bei Test und Simulation funktioniert dies gut, und der Simulator kann
auf vorkompilierte Libraries einbinden und verwenden.
XST ist ein Compiler für Hardware, er will alles jedesmal frisch
kompilieren (jedenfalls bei den meisten Projekten, man kann ihn auch
dazu bringen nur inkrementell zu kompilieren). Du darst jedenfalls
nicht ein Verzeichnis aus einem Projekt in ein anders kopieren.

Grüße
Klaus

von Sebastian (Gast)


Lesenswert?

Danke Klaus für Deine ausführliche Antwort. Ich werde mir das mal in
Ruhe am WE durch den Kopf gehen lassen.

Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo,

also ich habe den Vorschlag vom Klaus Falser ausprobiert und ich bin
damit sehr zufrieden. Auch die use & library Zeilen sind nun wirksam.
Ich kann alles synthetisieren und auf mein Starterkit flashen :-) und
alles funktioniert wie erhofft.

Das einzigste was jetzt nicht mehr geht ist die Simulation. Ich bekomme
immer den Fehler:

Bad pointer access... closing vish.

Irgendwie habe ich die Vermutung, dass die Testbench, die
MyPackage.vhd-Datei in meinem MyLib-Ordner, NICHT einbindet.

Gibt es dafür ein Lösung?

von FPGAküchle (Gast)


Lesenswert?

Hm, schau mal noch ner Warning von Modelsim, wie:
"...No default binding..." "...will crash...". (Sorry ich weiss es
nicht genauer). Dort
sagt er dir was nicht stimmt, also das er ein Package oder Componente
nicht findet, oder die die er findet nicht passt "port missmatch"
oder so. Diese Warning kannst
Du uns in Forum stellen, dann kann man eher sagen woran es liegt und
was er nicht findet. Du kannst auch im Library Browser vom Modelsim
(Irgendeinmenupunkt im Hauptfenster) schauen was in den Bibliotheken
drin ist.

Wenn was in der Bibliothek fehlt musst du es dort hinein compilieren,
Das mache ich mit Modelsim selber, ich trau dem projektnavigator der
ISE nicht. Da gibbets irgendwie den Menüpunkt compile, da klappet dan
ein fenster auf zur Auswahl welches File in welche Bibliothek soll.

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.