Forum: FPGA, VHDL & Co. Component Editor SOPC Builder


von Florian G. (badscher)


Lesenswert?

Servus,

ich habe vor längerer Zeit einen VHDL Code zusammengetippt mit dem sich 
ein FPGA von einem A/D-Wandler parallel aquirierte Daten einholen kann. 
Diesen VHDL Prozess nutze ich seit dem in diversen FPGA-Entwicklungen.

Nun will ich diesen VDHL-Code an die Avalon-Bridge eines NIOS2 "hängen".

Dazu erlaubt es der Component Editor im SOPC Builder aus einer HDL-Datei 
eine SOPC-Komponente zu erstellen, die man dann in das SOPC-Projekt 
einbinden kann.

Hat diesbezüglich jemand hier bereits Erfahrung mit der HDL 
Instanziierung gemacht? Auf der Altera-Seite bekomme ich nur spärliche 
und ungenügende Informationen, mit denen ich irgendwie nicht weiter 
komme.

Danke für hilfreiche Tips.

von Kest (Gast)


Lesenswert?

siehe hier:

Beitrag "Re: Avalon Master"

Das sollte funktionieren. Avalon-Slave ist sau-einfach. Dass bei Altera 
nur spärliche Informationen zu finden sind, glaube ich erstmal nicht ;-)

Grüße,
Kest

von Florian G. (badscher)


Lesenswert?

Ja ich bin selbst erstaunt. ich arbeite ja schon seit Jahren mit den 
Produkten von Altera, auch meine Diplomarbeit bezieht sich da drauf. 
Hatte bis dato auch nie Probleme mich selbst durch die Dokumentationen 
durchzuarbeiten.

nur bei diesem Thema will's ncht so recht laufen. :)

Dennoch danke für die Antwort :)

von Matthias G. (mgottke)


Lesenswert?

Die Avalon Busanbindung ist wirklich denkbar einfach.

Von Vorteil ist es, wenn man sich an die Namensgebung hält die im 
Quartus 2 Handbuch vorgeschlagen werden. Dort im Band "Volume 4: SOPC 
Builder" nach der Überschrift "Naming Signals for Automatic Type and 
Interface Recognition" suchen. Dann werden die Signale auch gleich 
richtig vom SOPC-Builder erkannt.

Allerdings gibt es doch ein paar kleine Stolperfallen auf die man achten 
sollte:
- Beim Avalon Master sind die Adressen immer Byteadressen.
- Beim Avalon Slave sind die Adressen immer an die Datenbusbreite 
gekoppelt.
  Bei 32 Bit Datenbus sind es also 4-Byte-Adressen.
Da kann man leicht auf die Nase fallen.

von Florian G. (badscher)


Lesenswert?

Thema nochmal warmkoch

Nach dem Durcharbeiten des "Avalon Interface Specification"-Skriptes 
habe ich einen guten Einblick, von der Hardware-Seite aus, in das 
Einbinden von HDL-Komponenten erhalten. Von dem einen gelösten Problem 
komme ich zum nächsten. Für die Software-Ansteuerung der Komponenten 
habe ich versucht mich mit dem "NIOS2 Software Developer's Handbook" 
schlau zu machen. Natürlich habe ich schon die HAL API Reference 
gefunden, da ich allerdings nciht täglich Umgang mit C/C++ habe fällt es 
mir schwer aus den Befehlen und deren umsetzung schlau zu werden.

Ich bevorzuge für sowas Beispiele. Auch davon habe ich im Netz einiges 
gefunden. Diese "Beispiel-Projekte" sind aber wiederum so beladen mit 
anderem Zeugs dass sich mein Problem dadurch nicht besonders gelöst hat.

Ich habe zum Testen ein einfaches D-Flipp in VHDL hergerichtet, das ein 
eingelesenes Byte über 8 LEDs ausgeben soll. Dieses wurde erfolgreich im 
SOPC Builder eingebunden und erscheint auch in meiner system.h - Datei 
folgendermaßen:

#define NEW_COMPONENT_0_NAME "/dev/new_component_0"
#define NEW_COMPONENT_0_TYPE "new_component"
#define NEW_COMPONENT_0_BASE 0x00011028
#define NEW_COMPONENT_0_SPAN 1
#define NEW_COMPONENT_0_TERMINATED_PORTS ""
#define ALT_MODULE_CLASS_new_component_0 new_component

Wie sieht nun die Übergabe eines Bytes an diese Komponente aus?
Kann mir das jmd in aller Einfachheit mal posten? Ich habe auch schon 
ein wenig das Gefühl, dass ich da den Wald vor lauter Bäume nciht mehr 
sehe :)
Bin mir sicher dass es total einfach geht, nur stehe ich halt z.Z. total 
aufm Schlauch.

Danke für Antworten

von Kest (Gast)


Lesenswert?

ganz einfach:

IOWR_8DIRECT(NEW_COMPONENT_0_BASE, 0, Byte);

An die Adresse 0 Deiner Komponente wird ein byte geschrieben. Dabei ist 
zu beachten, dass wenn Du in Deiner Komponente z.B. Adresse 1 haben 
möchtest, müsstest Du:

IOWR_8DIRECT(NEW_COMPONENT_0_BASE, 4, Byte);

schreiben. Also in der Avalon-Slave komponente sind die Word-Adressen, 
vom NIOS aus muss man Byte-Adresse verwenden.

Grüße,
Kest

von Florian G. (badscher)


Lesenswert?

Danke Kest für die Antwort,

dieser Makro-Befehl ist bis jetzt ein keinem Manual zu finden gewesen. 
Ich lese da nur was von fopen(), open(), write(), read() close() etc. 
K.A. wie ich jetzt da drauf hätte kommen sollen ;)

Das Ganze ist schon ein wenig verwirrend.


Grüße, Flo

von ben (Gast)


Lesenswert?

dieser Makro-Befehl ist bis jetzt ein keinem Manual zu finden gewesen.
Ich lese da nur was von fopen(), open(), write(), read() close() etc.
K.A. wie ich jetzt da drauf hätte kommen sollen ;)

Das Ganze ist schon ein wenig verwirrend.


Steht auf Seite 75 in dem von dir gelesenen "NIOS2 Software Developer's 
Handbook". Verwirrt ?

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.