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 | library led_controller_v1_00_a; |
3 | use led_controller_v1_00_a.all; |
4 | |
5 | entity led_controller is |
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.