Forum: FPGA, VHDL & Co. Herangehensweise an fremdes, großes VHDL Projekt


von Andreas B. (loopy83)


Lesenswert?

Hallo zusammen,

ich habe aktuell die Aufgabe, mich in ein fremdes VHDL Projekt 
einzuarbeiten. Dieses besteht aus nicht weniger als 116 .vhd Dateien, 
die natürlich ineinander verschachtelt sind.

Um einen Überblick zu erhalten, habe ich mir ein Baumdiagramm 
geschaffen. In diesem zeichne ich ein, welches entity in welcher vhd 
Datei eingebunden wurde. So ist eine gute Übersicht antstanden, was das 
topfile ist und welche Datei wo eine Rolle spielt.

Nun habe ich das Problem, dass ich nicht weiter weiss, wie ich mir den 
tieferen Sinn des Projektes erschließe. Die einzelnen Funktionen sind 
mir nur ganz grob bekannt. Ich habe also nur eine sehr grobe 
Funktionsbeschreibung und die Spezifikationen des Chips. Wie die Specs 
eingehalten wurden und vor allem wie es umgestezt wurde, dazu fehlen mir 
jegliche Angaben.

Im Detail sieht das dann so aus: Kryptische Variablen-Namen, schlechte 
Dokumentation im Code (war ja klar!) und dazu kommt noch, dass er 
Urheber dieses Projektes nicht mehr greifbar ist.

Gibt es hier Erfahrungen für die Herangehensweise an eine solche 
Aufgabe? Hangle ich mich nun von oben nach unten, oder von unten nach 
oben im Baumdiagramm?

Ich habe schon versucht, die diversen vhd Dateien in kleinere 
Funktionseinheiten zu zerlegen und diese losgelöst zu verstehen. Aber 
aufgrund der undurchsichtigen Abkürzungen bei den Variablen fehlt dann 
der Bezug zur Außenwelt und das fehlende Verständnis für die Integration 
in das Gesamtprojekt.

Ich wäre für Hinweise in diesem Bezug dankbar.
Vielen Dank!

MfG Andi

von PittyJ (Gast)


Lesenswert?

Bei Altera im Quartus ist ein RTL-Viewer Tool. Das zeichnet selber 
Übersichtsdiagramme.

Also einfach mal versuchen, den Code mit Quartus zu übersetzen, und dann 
sich den RTL-Graphen zeichnen lassen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Dieses besteht aus nicht weniger als 116 .vhd Dateien,
> die natürlich ineinander verschachtelt sind.
Weil ich einen simplen Addierer locker aus 4 Dateien beschreiben könnte, 
wäre es mal wichtig, die reale Größenordnung abzuschätzen. Da ist 
interessant:
Wann wurde das Originaldesign erstellt?
Zielplattform: ASIC oder FPGA?
Falls FPGA: Welches? Wie voll ist das?

von Matthias (Gast)


Lesenswert?

Ich zeichne in solchen Situationen immer endlos viele Blockdiagramme und 
gehe das Design von oben nach unten durch. Das Ziel ist dabei, 
Funktionsgruppen zu erkennen und Teile abstrahieren zu können.

von Andreas B. (loopy83)


Lesenswert?

Hallo,

Zielplattform ist ein ASIC und die 116 .vhd Dateien umfassen 31853 
Zeilen. Abzüglich der Kopfblöcke und der paar Kommentare kommt also 
trotzdem noch richtig viel zusammen. Das Projekt kann also in meinen 
Augen als "groß" bezeichnet werden.

Das Projekt stammt von 2008-2009.

Ich werde den Hinweis mit Quartus mal weiter verfolgen und das Ergebnis 
mit meinem Diagramm vergleichen. Vielleicht habe ich ja noch Fehler 
gemacht. Vielleicht gibt es ja auch eine Möglichkeit im ISE. Dort gibt 
es ja auch einen RTL Viewer und vielleicht helfen mir die schematics 
weiter.

Ansonsten wäre mein nächster Schritt die in/out-Ports der Dateien in 
einer Art Blockdiagramm aufzuzeichnen um zu schauen, welche Signale 
wohin übergeben und wo genutzt werden. Aber das könnte viiiiele Stunden 
dauern. Oder gibt es auch hier Automatismen?

Vielen Dank für alle bisherigen Antworten!

MfG Andi

von P. K. (pek)


Lesenswert?

Für den Chip müsste es ja vermutlich eine Spec geben, die aussagt, was 
das Teil machen soll. Da würde ich mir mal den Datenpfad aufzeichnen, 
und schauen wie sich das auf Dein schon gezeichnetes Blockschaltbild 
passt.

Als nächstes wäre sicher eine Toplevel-RTL-Funktional-Simulation 
sinnvoll. Wenn Du Glück hast, findet sich irgendwo im Projekt noch sowas 
(da es sich um einen ASIC handelt, bin ich mir fast zu 100% sicher dass 
extensiv simuliert wurde). Mit der Simulation, dem Blockdiagramm und der 
Spec solltest Du dann in der Lage sein, mal grundsätzlich einiges 
einzugrenzen, z.B. Unterscheidung in:
- Datenpfad, Processing-Units (DSP, etc.)
- Controlling (FSM, Register, uProc etc.)
- I/F, Bridges
- Memory, DMA
- Eingekaufte IP's (ev. separate Blockspec suchen...)

Vielleicht sind bis da auch einige der Namen (Signal & Entities) nicht 
mehr so kryptisch, wie sie am Anfang schienen (ausser sie wurden 
absichtlich nachträglich durch krypische ersetzt im Stile von "Security 
through Obscurity")

Viel Erfolg

von Hans (Gast)


Lesenswert?

Und was genau soll dann deine Aufgabe sein, nachdem Du das 
Re-Engineering durchgefühtt hast?

von Uwe (Gast)


Lesenswert?

Ein so großes Projekt einfach mal so voll zu durchblicken ist 
warscheinlich, selbst wenn du es entwickelt hast, schwer. Sich an den 
Stil des Vorgängers zu gewöhnen und sich einzelne Funktionseinheiten 
anschauen und in das Gr0ße Bild einzufügen wird wohl erstmal die Aufgabe 
sein. Versuch doch einfach mal eine neue Funktion bzw. Feature in das 
jetzige Design einzufügen. An der Grundlegenen Struktur wirst du ohne 
Redesign eh nichts ändern können.
Nach meiner Erfahrung dauert es seine Zeit sich wirklich efektiv in ein 
Fremdes Design (das schlecht Dokumentiert) ist einzuarbeiten. Jedoch 
hilft damit Arbeiten am meißten (vor allem wenn man unter Druck steht) 
;-)

von Frank (Gast)


Lesenswert?

Bei VHDL-Entwicklern scheint sich hierarchisches Design, 
Top-Down-Entwurf und saubere zielführende Dokumentation noch nicht 
herumgesprochen zu haben, oder wie ist es zu erklären, dass es über 100 
Files mit Code gibt, deren Zusammenhang erst umständlich rekonstruiert 
werden muss, statt ihn einfach in einer Doku einzusehen und den 
Zusammenhang zwischen Anforderung und Realisation zu erkennen.

Macht ihr keine reviews?

Gibt es keine Dokumenationsanforderungen?

Wie soll der Code gepflegt und Abkömmlinge verwaltet werden, wenn es 
keine Übersichten gibt?

von Mark B. (markbrandis)


Lesenswert?

Frank schrieb:
> saubere zielführende Dokumentation

Die gibt es in sehr, sehr vielen Softwareprojekten entweder gar nicht, 
oder sie ist unvollständig, oder sie ist von einer schlechten Qualität. 
Mit VHDL speziell hat das eher wenig zu tun, denke ich.

Siehe auch das Bild "How it was documented" in dem allseits bekannten 
und beliebten Cartoon:
http://www.projectcartoon.com/cartoon/55791

von Strubi (Gast)


Lesenswert?

Ein Tip: Mit GHDL lassen sich auf simple Weise HTML-Kreuzreferenzen 
erstellen:

ghdl --xref-html $(FILES)

Klickbar, ergo gut zu navigieren.
Moeglichweise kommt man auch mit Doxygen zu einer guten Uebersicht.

Gruss,

- Strubi

von berndl (Gast)


Lesenswert?

N'Abend,

GHDL wollte ich dir auch empfehlen, gibt zumindest mal eine brauchbare 
Crossreference.

30K Zeilen ist schon was. Aber das 'Ding' muss doch irgendwas machen, 
das auch bekannt und beschrieben ist. Und das kannst du ja mit 
Testbenches mal nachvollziehen. Testfall beschreiben der was elementares 
im Design ausloest und dann mal die Signale der im Toplevel 
eingebundenen Komponenten anschauen, zur Not mit von dir eingefuegten 
Aliasen oder Hilfssignalen wegen der kryptischen Namen (und sich auch 
die Prozesse im Toplevel mal genau ansehen).
Damit solltest du denke ich recht schnell wenigstens einen Ueberblick 
ueber die Funktion kriegen und auch welche Komponenten was machen.
Danach kommen dann die Details...

Wenn du rausgefunden hast, wo es bei bestimmten Operationen zuckt, ist 
auch der Rest nicht sooo schwierig.

von Höffi (Gast)


Lesenswert?

Poste einfach den Code im Forum wie analysieren das dann für Dich :-)














;-)

von Georg A. (Gast)


Lesenswert?

Typischer Fall für ein Studentenprojekt. Einfach 10 Studies dranstellen 
und dokumentieren lassen. Dann jeden eine Testbench machen lassen und 
die Timingdiagramme auswerten. Dann den Studies die Aufgaben zuteilen 
:-)

von Stefan W. (wswbln)


Lesenswert?

...und einer darf dann am Schluss alles zusammenfassen. Genau so 
entstehen an manchen Instituten die Doktorarbeiten.... :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan Wimmer schrieb:
> zusammenfassen
Ist das die deutsche Übersetzung für "plagiieren"?  ;-)

von Andreas B. (loopy83)


Lesenswert?

Strubi schrieb:
> Ein Tip: Mit GHDL lassen sich auf simple Weise HTML-Kreuzreferenzen
>
> erstellen:
>
> ghdl --xref-html $(FILES)

Wenn man ISE gewohnt ist und man alles anklicken kann, ist GHDL echt 
eine Umstellung. Da muss ich mir mal anschauen, wie ich ihm vor allem 
alle librarys beibringen kann. Denn wenn er nicht fehlerfrei kompilieren 
kann, erzeugt er auch keine html Dateien :)

Vielen Dank!

Ich habe erstmal angefangen das Projekt im ISE zu verarbeiten, habe alle 
fehlenden librarys angelegt und nun meckert er noch rum:
1
"Cannot find <attributes> in library <synopsys>. Please ensure that the library was compiled, and that a library and a use clause are present in the VHDL file."
Ich vermute mal, dass es noch eine Leiche von Bibliotheken ist... muss 
ich erstmal klären, wo und wie die verwendet wird und wo ich die unter 
Umständen herbekomme. Bei der GHDL Installation war eine dabei, aber die 
ist nicht die richtige, weil die Fehlermeldung auch nach Erstellen der 
synopsys Bibliothek die gleich bleibt.

MfG Andi

von Martin S. (strubi)


Lesenswert?

Moin,

> Wenn man ISE gewohnt ist und man alles anklicken kann, ist GHDL echt
> eine Umstellung. Da muss ich mir mal anschauen, wie ich ihm vor allem
> alle librarys beibringen kann. Denn wenn er nicht fehlerfrei kompilieren
> kann, erzeugt er auch keine html Dateien :)
>

Zu den Libraries hat René Doss eine sehr brauchbare kurze Einführung 
geschrieben:
http://www.dossmatik.de/ghdl/ghdl_unisim.pdf

Klappt bei mir gut, ausser, dass manche Xilinx-Primitiven (v.a. die 
'obfuscated coregen' Sachen so übel geschrieben sind, dass sie illegale 
Werte produzieren).

Punkto "klickbar" hast du natürlich recht. Allerdings amortisiert sich 
das Erstellen eines Makefiles nach maximal zwei Tagen wiederkehrender 
Simulations/Entwicklungs-Zyklen, auch für Isim. Pfeil oben und Return 
ist einfach schneller als klicken, ausserdem verbrät mein ISE ne Menge 
Rechenzeit nur fürs Anzeigen des "Ich arbeite gerade"-Rädchens.
Mit GHDL/gtkview lässt sich so im Schnitt ca. 3x schneller arbeiten, 
besonders, wenn man Signale und gewisse Bedingungen schnell anspringen 
muss.

>
1
"Cannot find <attributes> in library <synopsys>. Please ensure
2
> that the library was compiled, and that a library and a use clause are
3
> present in the VHDL file."
> Ich vermute mal, dass es noch eine Leiche von Bibliotheken ist... muss
> ich erstmal klären, wo und wie die verwendet wird und wo ich die unter
> Umständen herbekomme. Bei der GHDL Installation war eine dabei, aber die
> ist nicht die richtige, weil die Fehlermeldung auch nach Erstellen der
> synopsys Bibliothek die gleich bleibt.

Kenne das "attributes" package nicht. Kommt das von einem 'use 
synopsys.attributes.all' statement? Vermutlich musst Du irgendwelche 
synopsys-Library-Extensions im Source in GHDL importieren?

Noch so ein Aspekt: ich nehme erst mal Isim, um die ganze Hierarchie und 
die zugehörigen Files aufzulösen (wenn ich nich schon einfach mal ALLE 
VHDL-Files importiere), konvertiere dann die .prj-Datei in 'ne 
Dateiliste fürs Makefile und dann geht's an die 
Auflösung/xref-htmlisierung per GHDL.

Irgendwie hat sich dieser Parallel-Ansatz bewährt (ich bin recht 
ungeduldig wenn Weg A nicht geht, und probiere dann Weg B), auch wenn 
man sich mit der doppelten Anzahl an Tools beschäftigen muss...

Grüsse,

- Strubi

von Ingenieur (Gast)


Lesenswert?

Also die Beste Herangehensweise an ein fremdes, großes VHDL Projekt ist 
immer noch, die Beine in die Hand zu nehmen und zu verduften! So ein 
Zeug überlässt man den Anfängern und schreibt eine sauber SPEC und baut 
der Kram selber

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.