Hi,
ich muss mich gerade in einem VHDL Projekt zu Recht finden, welches
nicht von mir ist. Dazu hätt ich mal eine Frage. Ich habe mir immer VHDL
Module geschrieben, die ich mir dann mittels "component ... end
component" in ein anderes VHLD Modul eingebunden habe. Hier geschieht
dies, das das Modul ebenfalls so geschrieben ist und eine Hierarchie
höher mittels Libraries eingebunden ist. Bsp.:
entity ad5245_i2c is
...
end ad5245_i2c;
Hierarchie höher:
library digipoti_controller_v1_00_a;
use digipoti_controller_v1_00_a.all;
...
...
ad5245_i2c_1 : entity digipoti_controller_v1_00_a.ad5245_i2c
port map (
...
);
Warum macht man das mit den Libs so? Wieso ist die Componente überhaupt
in der lib (wo steht/geschieht das)? Was bringt mir das für einen
Vorteil?
Danke
matzunami
Das ist die direkte Instantiierung. Damit erspart man sich die
(redundante) component-Angabe und macht gleich das port map. Ich finde
es schöner so, da weniger Tipparbeit.
Hi Matzunami,
ist natürlich Geschmacksache, aber ich würde sagen was die Components in
einer Bibliothek (Package) bringen ist auf jeden Fall eine aufgeräumtere
VHDL Architektur. Sonst hat man zuerst ggfs. mehrere Seiten Code, die
einem irgendwann nicht mehr so richtig interessieren, weil das ganze bei
der Instanziierung noch mal sichtbar ist, bevor man zu dem
'funktionellen' Code gelangt. Best case ist die VHDL Datei dadurch nur
ca. halb so gross. Es ist irgendwie vergleichbar mit C/C++ Header
Dateien.
Ich schreibe mein VHDL Code gerne so. Es gibt bestimmt eine ganze Menge
Leute, die es genau anders sehen. Es gibt halt mehrere richtige
Lösungen.
Wo das alles steht? in der Bibliothek 'digipoti_controller_v1_00_a'. Die
Sichtbarkeits regel ist: alles was eine 'Primary Unit' (d.h. Entity,
Configuration, Package Header) sieht ist auch in der assoziierten
'Secondary Unit' (Architecture, Package Body) sichtbar.
Grüße
Charles
ok, schonmal danke.
Das Problem was ich noch habe ist, das ich die lib
digipoti_controller_v1_00_a in dem vhd File in dem sie verwendet wird
zum ersten mal lese? Und dann halt die Verwendung ad5245_i2c_1 : entity
digipoti_controller_v1_00_a.ad5245_i2c.
Wo wird die lib digipoti_controller_v1_00_a erstellt? In dem vhd File
ad5245_i2c in dem natürlich auch die entsprechende Entity liegt, les ich
nix von digipoti_controller_v1_00_a.
Ich habe bisher mur Packages eingebunden und da stand der Name ja mit in
der vhd Datei bsp. package BSP is ...
ok,
noch als kleine Info, ich arbeite zum ersten mal mit Lattice (sonst
Xilinx). Habe mir ispLEVER-Starter und Synplify Synthesis Module
herruntergeladen und zum laufen bekommen. Bei build Database bekomme ich
nun den Fehler "Object digipoti_controller_v1_00_a is not a library",
also fehlt da ja doch noch was. Was?
Hi Matzunami,
habe ich zwar selber noch nie gemacht, aber ich denke es geht ungefähr
so:
Alle Objekte, die in die Library 'digipoti_controller_v1_00_a'
kompiliert werden muessen mit der rechten Maus taste selektieren and das
'Library Name' Feld ausfüllen. Wenn Du viele Dateien hast, ist es
tatsächlich etwas mühsam. Möglicherweise geht es schneller über die Tcl
Interface.
Aus den Zeilen, die Du gepostet hast, kommt es mir so vor, als ob der
Code Ersteller gar nicht mit dem Verzeichnis 'WORK' gearbeitet hat
sondern nur mit 'digipoti_controller_v1_00_a'. IMHO keine optimale
Lösung. Besser wäre gewesen mit WORK zu arbeiten und falls man das ganze
als portables Verzeichnis führen möchte, in einem anderen
Projekt/Teil-Projekt dann erst auf 'digipoti_controller_v1_00_a' zu
mappen.
Viel Erfolg,
Charles
oh man ich steh grad mächtig auf dem Schlauch... code Bsp:
1
--USER libraries added here
2
libraryled_controller_v1_00_a;
3
useled_controller_v1_00_a.all;
4
5
entityled_controlleris
6
port
7
...
rechte Maus dann Name ist ja vielleicht ok, aber auf welche datei???
Hier kommt die Entity led_controller und drüber wird davon eine Lib
eingebunden??? Wenn ich das mit "Library Name" überall so mach wie ich
denke, dass dies ja die Libs sind, kommt der Fehler immer noch... Der
Vorteil ist mir auch nicht klar, wenn ich beim einbinden der vhd Dateien
erstmal Libs drauß machen muss? wenn nicht mal ersichtlich ist aus
welcher Datei welche Lib entsteht???
HILFE!!!
Hallo Matzunami,
aus den Zeilen oben, denke der Code Erfinder hat z.B. alle Submodule von
led_controller in die Bibliothek led_controller_v1_00_a kompiliert.
Möglicherweise hat er pro 'Containing Entity/Architecture' eine eigene
Bibliothek angelegt. IMHO entsetzlich.
Frage, übernimmst Du die Wartung des Codes jetzt offiziell? Falls ja,
würde ich vorschlagen einfach alle 'library led_controller_v1_00_a'
sowie die folgende Zeile zu löschen. Defaultmaessig ist sowieso WORK
sichtbar. Sofern er keine Modul-Namen doppelt verwendet hat und alle
Component Namen gleich Entity Namen sind, muesste das elaborieren
trotzdem klappen. Dann bräuchtest Du nur eine Script, die die richtige
Kompilierreihenfolge einhält.
Ich bin jetzt leider bis heute abend wahrscheinlich offline.
Viel Erfolg,
Charles
ok, dann danke ich dir. Werd mal ein bischen rumprobieren. Die Firma
(extern) von dem der Code stammt, wird warscheinlich auch noch weitere
Sachen für uns machen und ich will eigentlich nicht immer das ganze
Projekt neu aufarbeiten.
...so ein murks...
Daran musst Du dich gewöhnen. Die zulieferfirmen versuchen immer, sich
Arbeit zu sparen und machen nur das Nötigste. Wiederverwendbares gibt es
nur intern :-)