Forum: FPGA, VHDL & Co. Wie grössere VHDL-Projekte angehen?


von JoeTheNoob (Gast)


Lesenswert?

Hi,

ich habe als FPGA-Hobbyist bis jetzt nur Erfahrung mit kleineren
Projekten gemacht, z.B. LED/Taster IO, VGA,UART,Ethernet,Simulation
uÄ. Da ich als Fachfremder keinerlei Kontakt zu Profis habe, möchte
ich mal gerne wissen, wie ein grösseres Projekt (was man halt so
in endlicher Hobbyzeit noch angehen kann) angegangen wird.

Was mich in erster Linie interessiert: Werden meine Komponenten
grösser oder werden Cores wie DSP48/TEMAC etc. eingebunden,
entwickeln sich schnell Signalgräber (teils im Port-, teils auf
Komponentenebene). Und dann einen TEMAC mit einer anderen
Komponente auf der selben Ebene zu verbinden birgt immer das
Risiko von Signal vertauscht/vergessen etc.

Gibt's hier gute Ansätze, Ordnung in die Signalmenge zu bringen
(z.B. Gruppieren mittels RECORDS etc.)?

Gruss

von Franko (Gast)


Lesenswert?

Wichtig ist, Hierarchien einzufügen und Signale zu nutzen, die die 
Funktionen repräsentieren. Möglichst eine zentrale Verwaltung, die 
Untermodule eindeutig steuert. Das ist am einfachsten zu verifizieren 
und zu beweisen.

von Duke Scarring (Gast)


Lesenswert?

Ja, mit records und einheitlichen Bussystemen (AMBA, Avalon, Wishbone, 
OBP/PLB etc.) für die Funktionsblöcke ist sowas einigermaßen in Griff zu 
bekommen.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Es hilft nur, teile deinen Code in mehrere Dateien auf.

Dann musst du dir für deine Componenten eine Skizze zeichnen, was du in 
in welcher Datei codest. Diese Skizze muss während der Entwicklung 
aktuell gehalten werden.

Für jede Datei eine viereckigen Kasten. Auf den Rand schreibst du die 
Schnittstellen und in den Kasten den was in der Datei berechnet wird.

von JoeTheNoob (Gast)


Lesenswert?

Hi,

nach einiger Erfahrung mit VHDL/FPGAs sollte es natürlich
selbstverständlich sein, Projekte bzw. Komponenten
auf mehrere Ebenen/Dateien zu unterteilen. Das hilft aber
nur zu einem sehr kleinen Teil.

Nur mal als "kleines" Beispiel: Ich habe eine einfache
Verbindung zu PC mittels Ethernet/SimplesUDP relalisiert.
Verwendet wird der Xilinx-Core TEMAC (Virtex4,ug074.pdf).
Alleine schon die Signale des TEMACs implizieren auf
Modulebene glaube ich 80-100 Signale/Signalvektoren. Die
lassen sich aber relativ leicht in Gruppen unterteilen und
an andere Module (z.B. Phy etc.) anbinden. Die vielen Signale
auf einer Ebene bleiben trotzdem.

Mein Ansatz wäre, den TEMAC in ein eigenes Modul auszulagern
und je Gruppe RECORDs für je IN und OUT nach Aussen weiter
zureichen (irgendwo hier im Forum wurde mal ein ähnlicher
Ansatz vorgestellt). So hat man auf der nächsthöheren Ebene
nur noch zwei RECORDs je Gruppe/Aufgabenteil. Dazu kommt, dass
sich diese Ebene nicht mehr um Implementierungdetails kümmern
muss.

Gibt es in der Praxis vergleichbare Ansätze oder Standard?
Oder gibt's im Internet gute Quellen, die Schnittstellen
bzw. deren Implementierung beschreiben?

Gruss

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Duke Scarring schrieb:
> Ja, mit records und einheitlichen Bussystemen (AMBA, Avalon, Wishbone,
> OBP/PLB etc.) für die Funktionsblöcke ist sowas einigermaßen in Griff zu
> bekommen.
>
> Duke

Duke hast du eine Übersicht zu den Bussystemen?

Ich habe mich noch nicht so richtig beschäftigt wie sich die Busse 
unterscheiden.
Ich habe immer mir mein eigenes Bussystem geschnitten, was sicher nicht 
immer effektiv war. Ein vorhandener Standard hätte mir sicher schon 
Arbeit erspart.

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
> hast du eine Übersicht zu den Bussystemen?
Nein, leider nicht. Mit Wishbone und OPB/PLB habe ich mal gearbeitet, 
Avalon kenne ich nur vom Namen her und AMBA (AHB/APB) verwende ich 
aktuell.

Wishbone: Da hab ich den Eindruck, das er bei opencores einigermaßen 
verbreitet ist. Wirkt etwas angestaubt, ist auch relativ einfach zu 
verstehen, aber die opencores-Module sind nicht unbedingt vorbildlich 
dokumentiert, welche Bus-Features verwendet werden.
Als Interconnect hatte ich ein Stück Code, welches von einem Perl-Skript 
generiert wurde. Für jeden neuen Busteilnehmer mußte das Perl-Skript 
aufgerufen werden, welches leider keine records für die Bussignale 
erzeugt hat.

OPB/PLB: Das ist das, was Xilinx beim Microblaze und PPC verwendet. Da 
wird einem schon schlecht wenn man sich die entity eines Moduls anguckt. 
Man könnte da Wrapper schreiben um die vielen Signale mit records in den 
Griff zu bekommen. Das Zusammengeklicke im EDK ist auch ganz nett, aber 
man weiß nicht was er da wirklich tut. Arbeiten möchte ich damit nicht, 
nur wenn ich muß :-)

AMBA: Gute Dokumentation (bei ARM) und coole Implementation in der grlib 
von Gaisler (open source). Die Busse sind als arrays von records 
definiert und ein neues Modul hänge ich einfach auf einen freien Platz 
im array. Portabel, keine Voodoo-GUI, gut dokumentierte fertige IP 
(grlib.pdf).


Mein Eindruck ist, daß sich die Bussysteme von der Leistungsfähigkeit 
nicht großartig unterscheiden. Im Handling möchte ich records und den 
Verzicht auf "Drittprogramme" nicht mehr missen.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Duke

du meinst ich sollte mir mal die AMBA reinziehen?!

Ich sitzte gerade an einem MIPS32 Softcore und muss mir langsam 
überlegen, wie die "externen" Module einbinde. Da werde ich nicht an 
einem Bus vorbeikommen.

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
> du meinst ich sollte mir mal die AMBA reinziehen?!
Warum nicht ;-)

Ich arbeite hier mit einer ZPU, die per Wrapper am AHB hängt...

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Ich arbeite hier mit einer ZPU, die per Wrapper am AHB hängt...
>
> Duke

Duke kannst du mich mal anmailen. Du bist nicht angemeldet.

von Matthias G. (mgottke)


Lesenswert?

Wenn Du mit Altera arbeitest, dann würde ich den Avalon-Bus bevorzugen. 
Der ist denkbar einfach und über den SOPC-Builder wird dir alles 
abgenommen was mit der Zusammenschaltung, Adressierung und Arbitrierung 
zu tun hat.

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.