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


von Peter M. (whitsha)


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

von Läubi .. (laeubi) Benutzerseite


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?

von Peter M. (whitsha)


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;
}

...

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.