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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.