mikrocontroller.net

Forum: FPGA, VHDL & Co. EDK_FSL Schnittstelle vom Microblaze


Autor: Peter M. (whitsha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgenden C-Code:

#include "xparameters.h"
#include "mb_interface.h"
#include "fsl.h"


int main()
{
  unsigned int input_0[1]= {12345};
  unsigned int output_0[1]= {0};
  int i;

  for (i=0; i<1; i++)\
   {
      putfslx(input_0[i], 0, FSL_NONBLOCKING);

      xil_printf(" pong %d\n", input_0[i]);
   }

//   fsl_isinvalid(invalid);

    for (i=0; i<1; i++)\
   {
      getfslx(output_0[j], 0, FSL_NONBLOCKING);

      xil_printf(" ping %d\n", output_0[i]);
   }



  return 0;
}


Wie aus diesem ersichtlich, will ich die Daten an die  FSL Schnittstelle 
schicken und dann einfach ins register im Microblaze einlesen. Zum 
Schluss überprüfe ich ob die Operation erfolgreich verlaufen ist.

Meine Ausgabe lautet: pong 12345 ping 0;

Nun meine Frage, wieso wird von der FSL Scnittstelle die Null eingelesen
?

Vielen Dank, Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Peter M. schrieb:
> Nun meine Frage, wieso wird von der FSL Scnittstelle die Null eingelesen
Garnix wird da eingelesen, das non blocking kehrt vermutlich zurück ohne 
das Daten vorhanden waren und gibt daher den default (0) den du oben 
festgelegt hast zurück.
Du prüfst ja nichtmal ob die Schreiboperation Erfolg hatte... Ich würde 
für den Anfang erstmal blokierend lesen und schreiben.
Was hängt den auf der anderen Seite drann?

Autor: Peter M. (whitsha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe einen ip_core generiert und diesen mit Microblaze per FSL 
verbunden.

grundsätzlich will ich die Daten vom FPGA zum Microblaze schicken, zuvor 
wollte ich die Schnittstelle einfach testen.

also zuerst ein ausschnitt vom mhs file:

BEGIN microblaze
 PARAMETER INSTANCE = microblaze_0
 PARAMETER HW_VER = 7.10.a
 PARAMETER C_DEBUG_ENABLED = 1
 PARAMETER C_AREA_OPTIMIZED = 1
 PARAMETER C_FSL_LINKS = 1
 PARAMETER C_FAMILY = spartan3adsp
 PARAMETER C_INSTANCE = microblaze_0
 BUS_INTERFACE DPLB = mb_plb
 BUS_INTERFACE IPLB = mb_plb
 BUS_INTERFACE DEBUG = microblaze_0_dbg
 BUS_INTERFACE DLMB = dlmb
 BUS_INTERFACE ILMB = ilmb
 BUS_INTERFACE SFSL0 = fsl_v20_1
 BUS_INTERFACE MFSL0 = fsl_v20_0
 PORT MB_RESET = mb_reset
 PORT DBG_STOP = microblaze_0_DBG_STOP_chipscope
 PORT Trace_PC = microblaze_0_Trace_PC_chipscope
 PORT MB_Halted = microblaze_0_MB_Halted_chipscope
END

BEGIN fsl_v20
 PARAMETER INSTANCE = fsl_v20_0
 PARAMETER HW_VER = 2.11.a
 PARAMETER C_EXT_RESET_HIGH = 0
 PARAMETER C_FSL_DEPTH = 1
 PARAMETER C_USE_CONTROL = 0
 PORT FSL_Clk = sys_clk_s
 PORT SYS_Rst = sys_rst_s
 PORT FSL_Rst = OPB_Rst
END

BEGIN fsl_v20
 PARAMETER INSTANCE = fsl_v20_1
 PARAMETER HW_VER = 2.11.a
 PARAMETER C_EXT_RESET_HIGH = 0
 PARAMETER C_FSL_DEPTH = 1
 PARAMETER C_USE_CONTROL = 0
 PORT FSL_Clk = sys_clk_s
 PORT SYS_Rst = sys_rst_s
 PORT FSL_Rst = OPB_Rst
END

im generierten IP_Core habe ich folgende Änderungen im VHDL File 
gemacht:

FSL_M_Data <= "01010101010101010101010101010101";



jetzt will ich diese Zahl vom Microblaze einlesen, dazu folgender C-Code
im SDK:


int main()
{
  unsigned int output_0[1]= {0};
        int j;

    for (j=0; j<1; j++)\
   {
      getfslx(output_0[j], 0, FSL_DEFAULT);

      xil_printf(" ping %d\n", output_0[j]);
   }



  return 0;
}

...

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.