Forum: FPGA, VHDL & Co. Fremden VHDL Code entziffern


von matzunami (Gast)


Lesenswert?

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

von dito (Gast)


Lesenswert?

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.

von cfgardiner (Gast)


Lesenswert?

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

von matzunami (Gast)


Lesenswert?

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

von matzunami (Gast)


Lesenswert?

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?

von cfgardiner (Gast)


Lesenswert?

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

von matzunami (Gast)


Lesenswert?

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!!!

von cfgardiner (Gast)


Lesenswert?

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

von matzunami (Gast)


Lesenswert?

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

von A. F. (chefdesigner)


Lesenswert?

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
Noch kein Account? Hier anmelden.