www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Microblaze FSL


Autor: ferro (anfänger) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin gerade dabei, meinen ersten Schritte in diesem Bereich zu tätigen. 
Habe vor mir ein Xilinx Spartan Evaluationsboard , und als 
Entwicklungsumgebing das EDK 10.1.

Will nun zwischen zwei Microblaze Daten über zwei FSL-Busse (weil 
unidirektional) austauschen. Habe mir mein System schon im Xilinx 
Platform Studio zusammengeschustert. Bin gerade dabei mir ein C Programm 
zu überlegen, um den Datenaustausch zu realisieren, und den 
entsprechenden BRAMs zu initialisieren. Habe auf beiden Microblaze den 
xilkernel als RTOS im XPS eingestellt. Anschliessend habe ich mir die 
Software Librarys und BSP erstellen lassen.

Nun hab ich ne Menge von Header, die ich vermutlich verwenden kann. 
Beispielsweise die fsl.h. Da habe ich die macros put/getfslx gefunden.

Habe nur grundlegende Erfahrungen mit C.

1. Kann mir da jemand bisschen auf die Sprünge helfen, wie ich nun den 
Datenaustausch am besten realisiere?

2. Wird beim Empfänger ein Software-Interrupt geworfen, wenn Daten in 
der FSL-FIFO sind? Oder wie läuft das ab?

3. Kann mir jemand dazu gute Referenz oder url geben? Habe bereits die 
Datasheets, OS_Lib paper von Xilinx und mb_ref_guide gelesen.

4. kann man mit der put/get funktion auch ganze structs auf einmal 
verschicken?

Bin über jede Antwort/Hilfe sehr dankbar, am besten Code-Example

liebe grüße
ferro

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin, gehört wohl eher ins FPGA Forum, naja.

Du brauchst erstmal nur einen FSL Kanal, dann kanst du mit put ein byte 
senden und mit get ein byte empfangen (32bit)

Du kannst ganze structs versenden, mußt diese aber voher in 32bit pakete 
"zerlegen", am besten das erste paket mit commandbit
cputfsl(data, CH_SLOT_ID);
und den rest ohne dann weißt du wo es "anfängt" (gegenseite muß dan 
alles wieder zusammenbauen)

Du kannst das ganze interuptgestuert machen, mußt dann das Exists Signal 
auswerten.
Alternativ kann man die Abfrage selbst so gestalten das man das ganze 
pollt ob neue Daten da sind (schau dir mal im Ref guide die put/get 
instruktionen ganz am ende an da ist ne erklärung zu allen asm 
befehlen).

In c wird das über einen nonblocking rwead gemacht und dann mußt du mit 
fsl_isvalid() (so oder so änlich schau mal im header) prüfen ob es 
gültige Daten waren. (ebenso kann man mit fsl_error() prüfen ob ein 
commandread wirklich einer war...)

Autor: ferro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Läubi,

erstmal Danke, SUPER, hat mir schon einiges weitergeholfen.

Was ist die elegantere Methode? Interrupts oder Polling?

Wenn ich nur einen FSL zwischen die Microblaze häng, hab ich dann nicht 
das Problem, dass ich den Datenverkehr nur in eine Richtung steuern 
kann? Dann ist ja nur einer der beiden MB Master. Oder ist das auf der 
Softwareebene egal?

Gruss ferro

Autor: ferro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zur aktualität:

die FSL-Funktionen werden in den neuen Versionen von EDK mit

putfslx(val, id, flags) und getfslx(val, id, flags) aufgerufen. über die 
flags kann nun zwischen blocking, non blocking, control usw. 
differenziert werden.

gruss ferro

Autor: ferro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann mir bei meinem FSL Problem jemand weiterhelfen?

"Wenn ich nur einen FSL zwischen die Microblaze häng, hab ich dann nicht
das Problem, dass ich den Datenverkehr nur in eine Richtung steuern
kann? Dann ist ja nur einer der beiden MB Master. Oder ist das auf der
Softwareebene egal?"

Habe es so gemacht: an jedem MB ein FSL-Interface. Und dann zwei 
FSL-Busse. Jeder FSL ist an einem MB Master und am anderem Slave. Wenn 
ich dann ne put-Funktion realisiere, ist dann die id bei jedem 0? Da ja 
pro MB nur ein Interface gibt? Versteh das noch nicht so genau.

Gruss Ferro

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.