www.mikrocontroller.net

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


Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: cfgardiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: cfgardiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh man ich steh grad mächtig auf dem Schlauch... code Bsp:

--USER libraries added here
library led_controller_v1_00_a;
use led_controller_v1_00_a.all;

entity led_controller is
    port
       ...

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

Autor: cfgardiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Andreas F. (chefdesigner)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.