Hallo, ich habe Probleme mit der Ansteuerung eines LCD-Displays. Ich versuche mich ersteinmal an Beispielcodes. Komm jedoch nicht weiter. Ich habe einen Virtex 6. Programmieren tue ich in VHDL. Ich habe einen Microblaze aufgesetzt. Dieser fuktioniert auch (habe Hello Word etc ausprobiert). Diesen programmiere ich in C. Bei Xilinx war eine lcd.c, lcd.h dabei. Hier ein Beispiel: https://source.ece.iastate.edu/scm/viewvc.php/*checkout*/bootloader/sdram_test/lib/src/lcd_char/lcd.c?root=sdmay11-14 Problem: Z.B XGpio_WriteReg(LCD_BASEADDR, ... gibt es nicht. Nun habe ich nach Include-Dateien gesucht. Jedoch keinen Erfolg. Ich habe mir gedacht, dass die Funktion "XGpio_WriteReg()" ja scheinbar lediglich Register beschreibt. Also habe ich statt XGpio_WriteReg() die Funktion XIOModule_DiscreteWrite() aus der Bibilothek "xiomodule.h" hergenommen. Das Argument "LCD_BASEADDR" habe ich durch "&gpo" ersetzt (Pointer gibt Register des Ports an). Als zweites Argument habe ich den Kanal GPIO 2 genommen (dort hängt das LCD dran). Z.B. in dieser Zeile aus dem geposteten Quellcode: void LCDInit() { // Sets CHAR LCD Reg to Write Mode XGpio_WriteReg(LCD_BASEADDR, 0x4, 0x00000000); steht ja scheinbar nicht an zweiter Stelle der Kanal (sondern 0x4). Hatb hier jemand für mich vielleicht eine Lösung/Ansatz/ Quelle ? Da
User schrieb: > https://source.ece.iastate.edu/scm/viewvc.php/*che... > > Problem: Z.B XGpio_WriteReg(LCD_BASEADDR, ... gibt es nicht. Ich glaube das heißt nun XGpio_mWriteReg oder so ähnlich. > Nun habe > ich nach Include-Dateien gesucht. Jedoch keinen Erfolg. Also wenn du das Xilinx SDK nutzt, dann finden sich die einfach in dem von dir eingerichteten BSP. > Ich habe mir > gedacht, dass die Funktion "XGpio_WriteReg()" ja scheinbar lediglich > Register beschreibt. Also habe ich statt XGpio_WriteReg() die Funktion > XIOModule_DiscreteWrite() aus der Bibilothek "xiomodule.h" hergenommen. Naja, bleib doch einfach lieber bei XGpio, und schau mal nach wie man das richtig nutzt. > Das Argument "LCD_BASEADDR" habe ich durch "&gpo" ersetzt (Pointer gibt > Register des Ports an). Als zweites Argument habe ich den Kanal GPIO 2 > genommen (dort hängt das LCD dran). Z.B. in dieser Zeile aus dem > geposteten Quellcode: > > void LCDInit() > { > // Sets CHAR LCD Reg to Write Mode > XGpio_WriteReg(LCD_BASEADDR, 0x4, 0x00000000); > > steht ja scheinbar nicht an zweiter Stelle der Kanal (sondern 0x4). Hatb > hier jemand für mich vielleicht eine Lösung/Ansatz/ Quelle ? > Der erste Parameter ist hier die Basisasdresse, der zweite das Offset und der dritte der Wert, der geschrieben werden soll. Diese Funktion schreibt also Nullen in die Adresse LCD_BASEADDR+4. Was das bedeutet, kannst du unter http://www.xilinx.com/support/documentation/ip_documentation/axi_gpio/v1_01_b/ds744_axi_gpio.pdf#page=8 nachlesen.
Ein Hinweis noch. Ich habe im Virtex 6 lediglich den Microblaze IPCore eingebunden. (nicht den hier aufgezeigten LogiCORE IP AXI GPIO). Ich möchte (zum Test der genannten Funktion) LEDs anschalten. Diese sind mit dem Port "GPO1" vom Microblaze verbunden.
User schrieb: > Danke. Die C_BASEADDR wo finde ich die? Die Adressen der Hardware finden sich in der Hardwarekonfiguration des BSP (siehe xparameters.h). User schrieb: > Ein Hinweis noch. Ich habe im Virtex 6 lediglich den Microblaze > IPCore > eingebunden. (nicht den hier aufgezeigten LogiCORE IP AXI GPIO). Ich > möchte (zum Test der genannten Funktion) LEDs anschalten. Diese sind mit > dem Port "GPO1" vom Microblaze verbunden. Der normale MicroBlaze hat gar keine I/O-Ports. Hast du das Microblaze MCS verwendet? Das kenn ich überhaupt nicht, kann dazu also nichts sagen. Aber Xilinx hat eigentlich (fast) alles ganz gut dokumentiert.
Habe den Cor MicroBlaze mcs verwendet. Hierbei habe ich den GPO mit 7 Bit herausgeführt. Soweit ich es sehe brauche ich um auf das Display zu schreiben lediglich Ausgänge.
Ich habe einmal in die xparameters.h geschaut (hatte ich auch eingebunden). Da steht u.a. // mit diesem Ausgang sind die sieben Display-Pins verbunden #define XPAR_IOMODULE_0_USE_GPO2 1 #define XPAR_IOMODULE_0_GPO2_SIZE 7 ... #define XPAR_IOMODULE_INTC_MAX_INTR_SIZE 0 #define XPAR_IOMODULE_SINGLE_BASEADDR 0x80000000 #define XPAR_IOMODULE_SINGLE_HIGHADDR 0x8000007F #define XPAR_IOMODULE_INTC_SINGLE_DEVICE_ID XPAR_IOMODULE_0_DEVICE_ID Daraus leite ich ab, dass die Addresse die ich suche die 0x80000000 ist, korrekt? Also schreibe ich: XGpio_mWriteReg(0x80000000, 0x4, 0x00000000); Damit spreche ich Register 0x80000000 + 0x4 = 0x80000004 und schreibe den Wert 0x00000000 in dieses. Korrekt?
User schrieb: > Problem: Z.B XGpio_WriteReg(LCD_BASEADDR, ... gibt es nicht. Nun habe > ich nach Include-Dateien gesucht. Jedoch keinen Erfolg. Ich habe mir > gedacht, dass die Funktion "XGpio_WriteReg()" ja scheinbar lediglich > Register beschreibt. Also habe ich statt XGpio_WriteReg() die Funktion > XIOModule_DiscreteWrite() aus der Bibilothek "xiomodule.h" hergenommen. -- Resource ist Xilinx_Spartan3E_RevD_v2_2_0.xbd Tool: Version 10.1, Xilinx Platform Studio (XPS) Project: Microblaze 16×2 LCD Driver Hier ist ein Step by Step Tutorial,wie du via gpio ein LDC Modul einbinden kannst. Link: http://www.fpgadeveloper.com/2008/10/microblaze-16x2-lcd-driver.html Tip: ganz unten ist Web Page ist der Source Code. Bzw. hier https://github.com/fpgadeveloper/Microblaze-16x2-LCD-Driver/blob/master/ML505/edk10-1/TestApp_Peripheral/src/TestApp_Peripheral.c ######## Gruss Holger.
Was dem Beispiel noch fehlt ist die Umschaltung als ein (<-|->) bidrektionalen Port mit Output_O bzw. Input_I. Damit kann man am Data-Bus des LCD’s einlesen danach Bit 0x80 ausmaskieren, und somit immmer in der Schleife pollen, bis das LCD das 4-Bit Nibble gelatcht hat… ################################### Dadurch wird der Timer-delay eingespart. (Hand-Shake-LDC) via bidir Driver-Data-Port. Das pollen am Data-Port bei LCD C Code Beispiel machen die eben nicht so gerne. Fire Data to Bus>onLCD make a short ‘delay and next geht das eben einfacher…. ######################################################################## ###### Datenrichtungs-Register auf out-put…mit jeweiliger Status-Abfrage via variable. Status_out = XGpio_Initialize(&GpioOutput,XPAR_XPS_GPIO_0_DEVICE_ID); Status_in = XGpio_Initialize(&GpioInput,XPAR_XPS_GPIO_0_DEVICE_ID); Link: http://www.fpgadeveloper.com/2008/02/manually-add-peripheral-to-project-2.html Status_in = XGpio_Initialize(&GpioInput,XPAR_DIPSWS_4BIT_DEVICE_ID); ######################################################################## ### Viel Erfolg. Gruss Holger. Anhang ist die Board generic auf dem das EDK usw helper..Tool aufsetz.
Vielen Dank. Bin weitergekommen. Hab die Dokumentation zu den Registern gefunden. Die Initialisierung klappt (fast). Ich sehe statt des Strings einen blinkenden Curser sowie undefinierte Zeichen (Ich denke, dass das nun ein Problem mit der von mir verwendeten Delay-Funktion ist..auf "nop" Basis). Die ist noch ziemlich ungenau. In dem Beispiel (Post von Holger Harten) verwendet der Autor die "delay_us(Xuint32 time)". Ich habe mein "Test-Projekt" zur Timer-Funktion wie folgt aufgebaut: #include <stdio.h> #include "gpio_l.h" #include "xiomodule.h" #include "xparameters.h" #include "xtmrctr.h" #include "xstatus.h" void delay_us(Xuint32 time); XTmrCtr DelayTimer; int main() { while(1){ XGpio_mWriteReg( 0x80000010, 0x00000000, 0x00000001); // LED 1 "on" delay_us(500000); //Warte 0.5 s XGpio_mWriteReg( 0x80000010, 0x00000000, 0x0000000); // LED 1 "off" delay_us(500000);} //Warte 0.5 s return 0; } void delay_us(Xuint32 time) { XTmrCtr_SetResetValue(&DelayTimer, 1, time * 125); XTmrCtr_Start(&DelayTimer, 1); while(!(XTmrCtr_IsExpired(&DelayTimer, 1))){} XTmrCtr_Stop(&DelayTimer, 1); } Ich habe neben der "xtmrctr.h" folgende Dateien ins Projekt eingebunden: - "xtmrctr.c" - "xtmrctr_l.h" - "xtmrctr_l.c" - "xtmrctr_i.h" In "xtmrctr.c" ist XPAR_XTMRCTR_NUM_INSTANCES noch undefiniert. Mir ist noch nicht ganz klar, welchen Timer diese Funktion nutzt? Habe im MicroBlaze ja mehrere FIT und PIT zur Verfügung (Habe nicht gesehen wo die Registeraddresse angegeben wird). Zudem weiß ich nicht, wie der XPAR_XTMRCTR_NUM_INSTANCES zu belegen ist, bzw. was dieser aussagt.
Sorry habe gerad entdeckt, dass es sich bei dem Parameter XPAR_XTMRCTR_NUM_INSTANCES bei dem Auto um einen im File xparameters.h definierten Namen handelt. Dieser ist bei mir nicht vorhanden. Heißt wohl jetzt anders.
Eine einfachere Variante: void delay_us_(long int time) // clk = 200 MHz { XGpio_mWriteReg(0x80000040,0,time*200);//PIT1 Preload Register XGpio_mWriteReg(0x80000048,0,0x00000003);//PIT1 Control Register: Counter Starten ( EN = 1, PRELOAD = 1) while(!(XGpio_mReadReg(0x80000044,0x00000000))){ //PIT1 Counter Register: Ausgabe des Zählerstandes } XGpio_mWriteReg(0x80000010,0,0x00000024);//Counter angehalten } Würde so auch gehen,oder seht ihr Nachteile?
Hallo ! @User ! Den Ansatz von deinem prev.Posting ist mir nicht so verstaendlich ! XTmrCtr_Initialize XTmrCtr_SetResetValue XTmrCtr_Reset -Der System-Takt ist hier leider nicht mit einbezogen. (1.5 MHz to 400 MHz) Mein erster Ansatz für den Delay via Timer. .Sniplet..
1 | #include "stdio.h" |
2 | #include "math.h" |
3 | #include "xparameters.h" |
4 | #include "xtmrctr.h" |
5 | |
6 | #define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID
|
7 | #define TIMER_COUNTER_0 0 // ???
|
8 | |
9 | XTmrCtr TimerCounter; /* The instance of the timer counter */ |
10 | |
11 | ////////////////////// sleep_ms function //
|
12 | /* execution is sleeping during time equal pause ms */
|
13 | u32 sleep_ms(u32 pause) |
14 | {
|
15 | u32 Status; |
16 | u32 timer_counter_value = 0; |
17 | XTmrCtr *TmrCtrInstancePtr = &TimerCounter; // Store By-Ref |
18 | |
19 | // _Initialize the TmrCtr driver so that it is ready to use
|
20 | Status = XTmrCtr_Initialize(TmrCtrInstancePtr, TMRCTR_DEVICE_ID); |
21 | if (Status != XST_SUCCESS) |
22 | return (XST_FAILURE); |
23 | // To do: Kommt da noch ein Timer-Stop dazu, und dann der reset.
|
24 | // Set Timer-Start-Params. At Zero_0, to ramp up…32Bits wide '''ticks
|
25 | XTmrCtr_SetResetValue(TmrCtrInstancePtr, TIMER_COUNTER_0, 0x00000000); |
26 | XTmrCtr_Reset(TmrCtrInstancePtr, TIMER_COUNTER_0); |
27 | // optional nach dem Reset
|
28 | // XTmrCtr_SetResetValue(TmrCtrInstancePtr, TIMER_COUNTER_0, 0x00000000);
|
29 | |
30 | // Start-Run 'ticks:
|
31 | XTmrCtr_Start(TmrCtrInstancePtr, TIMER_COUNTER_0); |
32 | |
33 | // Fetch ticks at first time ....
|
34 | timer_counter_value = XTmrCtr_GetValue(TmrCtrInstancePtr, TIMER_COUNTER_0); |
35 | // < 'compare via an unsigned ??? ohne Vorz. pause Mulply * --< may overflow???.
|
36 | while( timer_counter_value < pause * MS_CYCLES) |
37 | {
|
38 | // Fetch act running ticks, and compare
|
39 | timer_counter_value = XTmrCtr_GetValue(TmrCtrInstancePtr, TIMER_COUNTER_0); |
40 | xil_printf("timer_counter_value0=%d,\n ",timer_counter_value); |
41 | }
|
42 | xil_printf("end - while, \n"); |
43 | XTmrCtr_Stop(TmrCtrInstancePtr, TIMER_COUNTER_0); |
44 | return (RET_OK); |
45 | |
46 | }
|
Hint: Das Sample mit Link ist etwas komplexer, aber das lese ich noch. Link: http://www.eng.iastate.edu/vie/courses/cpre488x_f05/Lab_Files/Lab_2/system.c MicroBlaze Soft Processor Core Link: xtmrctr_8c Referenz. http://www.cs.indiana.edu/hmg/le/project-home/xilinx/ise_13.2/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/tmrctr_v2_01_a/doc/html/api/xtmrctr_8c.html http://www.cs.indiana.edu/hmg/le/project-home/xilinx/ise_13.2/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/tmrctr_v2_01_a/doc/html/api/files.html ######################### Microblaze Timer Counter: Quelle von Anhang des Code-Sniplet. http://forums.xilinx.com/t5/Embedded-Processor-System-Design/Microblaze-PLB-timer-help/td-p/137778 Ansatz#2: ####################################################### Timing: TimeRun = (EndTime - BeginTime - Calibration); http://forums.xilinx.com/t5/Embedded-Processor-System-Design/XPS-Timer/td-p/46649 ####################################################### Link: alg. LCD Display-Hardware. ( Trap: [ Mein 4Bit-LCD-Data-Bus is a 'shared Bus via Intel-Strata-Flash Chip: CE=HIGH, CS=HIGH ). http://joshuagalloway.com/lcd.html ################################## -Xilinx EDK Tutorial - Adding MPMC to an EDK Project - Part 3 ############ Viel Erfolg. Gruss Holger ############
Danke. Wie meinst du das, dass du den Systemtakt nicht einbeziehst Holger? Ich habe momentan auch eine Funktion "ohne" den Systemtakt direkt zu berücksichtigen. void usleep(unsigned int useconds) { int i,j; for (j=0;j<useconds;j++) for (i=0;i<6;i++) asm("nop");} Ist aber sehr unsauber. Habe mir versucht die Funktion mittels Oszi abzugleichen. Funktioniert aber nicht besonders. Wenn deine Funktion den Takt auch nicht einbezieht, wie unterscheiden sich dann beide Funktionen? Benötige eine Funktion, welche sich am Takt orientiert. Deswegen mein vorheriger Versuch. Ich kann ihn nochmal erläutern (über bessere Vorschläge freue ich mich). Der Eingangstakt ist z.B. 200 MHz (steht ja in der #include "xparameters.h"). Die Registernamen habe ich aus folgender Beschreibung: http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ds865_microblaze_mcs.pdf. (Seite 30, Seite 31) void delay_us_(long int time) { XGpio_mWriteReg(0x80000040,0,time*200);//Hier lade ich einen Wert in das Register. Z.B. 200 (time = 1us bei 200 MHz (1 Takt 5 ns). XGpio_mWriteReg(0x80000048,0,0x00000003);//PIT1 Control Register: Counter Starten ( EN = 1, PRELOAD = 1). Hier Starte ich den Counter. Im nächsten Schritt frage ich den Zählerstand ab. Sind 200 Takte um, dann halte ich den Zähler an und springe aus der delay_us_-Funktion. Das war mein Gedanke. Funktioniert aber nicht. Leider. while(!(XGpio_mReadReg(0x80000044,0x00000000))){ //PIT1 Counter Register: Ausgabe des Zählerstandes } XGpio_mWriteReg(0x80000010,0,0x00000024);//Counter angehalten }
Ich teste gerade mal für das Beispiel oben nur die XGpio_mReadReg()-Funktion. In der Dokumentation (http://www.cs.indiana.edu/hmg/le/project-home/xilinx/ise_13.2/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/gpio_v2_13_a/doc/html/api/xgpio__l_8h.html#a17) steht: "Read a value from a GPIO register. A 32 bit read is performed. If the GPIO component is implemented in a smaller width, only the least significant data is read from the register. The most significant data will be read as 0." Als Rückgabewert wird der Registerinhalt angegeben: "Returns: Data read from the register." Folgendes habe ich umgesetzt: #include "gpio_l.h" ... data = XGpio_mReadReg(GPI1, 0x00); xil_printf("Data(%x): %x\n\r", GPI1, data); Am GPI1-Port hängen Dip-Schalter. Ich bekomme jedoch keinen Rückgabewert. Im xgpio_l.h-File (http://users.ece.gatech.edu/~hamblen/4006/xup/embedded/labs/lab4mb/microblaze_0/include/xgpio_l.h) steht als Kommentar: * Set the input/output direction of the signals of the specified GPIO channel. * * @param BaseAddress contains the base address of the GPIO device. * @param Channel contains the channel (1 or 2) to operate on. * @param DirectionMask is a bitmask specifying which discretes are input and * which are output. Bits set to 0 are output and bits set to 1 are * input. * * @return None. * * @note None. Nutze ich die Funktion falsch,oder habe ich das falsche Header-File erwischt? (Registeraddresse stimmt! Gebe ich die Schalterstellungen direkt auf LEDs funktioniert es)
Ziehe die Frage zurück. Der Offset muss bei GPI1 auf den Wert 1 gestellt werden.
User schrieb: > Wie meinst du das, dass du den Systemtakt nicht einbeziehst Ja wenn das System 125 MHz hat, muss ich das scalen können, mit System mit nur 50 MHz. Holger Harten schrieb: > http://www.fpgadeveloper.com/2008/02/manually-add-peripheral-to-project-2.html Hallo! Freu mich das du mit den Code-Snips und #define Tabellen usw. das LCD Display ans laufen bekommst. ######################################################################## #### data = XGpio_mReadReg(GPI1, 0x00); // !!! Fehler Frage: Hast du das jetz so geschrieben ? data = XGpio_mReadReg(GPI1, XGPIO_DATA_OFFSET ); // OK??? ######################################################################## ### #define XGPIO_DATA_OFFSET Data register for 1st channel ------------------------------------------------------------------------ --- Ich bin noch am überlegen wie ich ein bidirectionles Port hinbekomme. Das ich auf out, bzw auf in stellen kann. ?? Gruss Holger. // Initialize the GPIO driver so that it's ready to use, status = XGpio_Initialize(&GpioInput, XPAR_DIPSWS_4BIT_DEVICE_ID); if (status != XST_SUCCESS) return XST_FAILURE; // Set the direction for all signals to be inputs XGpio_SetDataDirection(&GpioInput, 1, 0xFFFFFFFF); // Initialize the old data register OldData = 0xFF; while(1){ // Read the state of the DIP switches DataRead = XGpio_DiscreteRead(&GpioInput, 1); // Send the data to the UART if the settings change if(DataRead != OldData){ xil_printf("DIP Switch settings: 0x%X\r\n", DataRead);
Soweit bin ich beim Timer gekommen: #include <stdio.h> #include "platform.h" #include "gpio_l.h" #include "xiomodule.h" #include "xparameters.h" #include <stdlib.h> // GPO4: 0x8000001C int main() { init_platform(); unsigned long data = 0x0; unsigned long null = 0x3E8; //Grenze, sollte eigentlich 0 sein //200000000 => 1 s bei 200 MHz XGpio_mWriteReg(0x80000040, 0x01, 0x0BEBC200); XGpio_mWriteReg(0x80000048, 0x01, 0x03); data = XGpio_mReadReg(0x80000044, 1); while(data >= null){ data = XGpio_mReadReg(0x80000044, 1);} XGpio_mWriteReg(0x80000048, 0x01, 0x00); //Timer EN = 0 cleanup_platform(); return 0; } Ich sehe am Oszi einen Takt. Jedoch etwa 6,6 MHz. Ist mein Ansatz brauchbar, oder ist es sinnvoller den Ansatz zu verwerfen? Danke
@USER Frage: Kannst du diese Konstanten wie z.B 0x80000010 durch #defines ersetzen, oder ist die #define dafür im Project immer noch nicht auffindbar ?? XGpio_mWriteReg(0x80000010,0,0x00000024);//Counter angehalten ######################################################################## ## Hallo ! So habe ich das erst gedacht. Da in den Links ist auch noch so ein begin end timer Benchmark test drin. Aber so für den Anfang: Link: https://github.com/fpgadeveloper/Microblaze-16x2-LCD-Driver/blob/master/ML505/edk10-1/TestApp_Peripheral/src/TestApp_Peripheral.c // Delay function (microseconds) void delay_us(Xuint32 time) { // Hier scale system 125MHz. XTmrCtr_SetResetValue(&DelayTimer, 1, time * 125); XTmrCtr_Start(&DelayTimer, 1); while(!(XTmrCtr_IsExpired(&DelayTimer, 1))){} XTmrCtr_Stop(&DelayTimer, 1); } Gruss Holger.
Holger Harten schrieb: > Autor: > > Holger Harten > (holger-h-hennef) ------------------------------------------------------------------------ -- > > Datum: 07.12.2013 19:21 User schrieb: > Ist mein Ansatz > brauchbar, oder ist es sinnvoller den Ansatz zu verwerfen? Danke Den Beispiel Beitrag #3453215 Datum: 07.12.2013 19:21
1 | include "stdio.h" |
2 | #include "math.h" |
3 | #include "xparameters.h" |
4 | #include "xtmrctr.h" |
5 | |
6 | #define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID
|
7 | #define TIMER_COUNTER_0 0 // ???
|
8 | |
9 | XTmrCtr TimerCounter; /* The instance of the timer counter */ |
10 | |
11 | ////////////////////// sleep_ms function //
|
12 | /* execution is sleeping during time equal pause ms */
|
13 | u32 sleep_ms(u32 pause) |
14 | {
|
15 | u32 Status; |
16 | u32 timer_counter_value = 0; |
17 | XTmrCtr *TmrCtrInstancePtr = &TimerCounter; // Store By-Ref |
18 | |
19 | // _Initialize the TmrCtr driver so that it is ready to use
|
20 | Status = XTmrCtr_Initialize(TmrCtrInstancePtr, TMRCTR_DEVICE_ID); |
21 | if (Status != XST_SUCCESS) |
22 | return (XST_FAILURE); |
23 | // To do: Kommt da noch ein Timer-Stop dazu, und dann der reset.
|
24 | // Set Timer-Start-Params. At Zero_0, to ramp up…32Bits wide '''ticks
|
25 | XTmrCtr_SetResetValue(TmrCtrInstancePtr, TIMER_COUNTER_0, 0x00000000); |
26 | XTmrCtr_Reset(TmrCtrInstancePtr, TIMER_COUNTER_0); |
27 | ......
|
Den versuchen einzubauen, da ist das über die Diskriptoren, und den C *Funktion-Pointer gemacht, ID ect.pp Also ohne 0x80000xx und so. Mit der Error Konstante testest du ob das System das ok findet. via XST_SUCCESS if (Status != XST_SUCCESS) return (XST_FAILURE); Damit ist das autark von den feseten Adressen, und besser lesbar für mich. Viel Erfolg. Gruss Holger. Aber halt musst du die #defines in deinem Project finden. Das war ja auch dein Problem am Anfang.
:
Bearbeitet durch User
Danke dir Holger. Ich habe hier einmal die xparameters.h kopiert. Die meinst du doch wahrscheinlich. (Ein wenig lang, tut mir leid). Vielleicht kannst du mir zeigen, wo ich da die richtigen defines herauslese. Danke nochmals. #define STDIN_BASEADDRESS 0x80000000 #define STDOUT_BASEADDRESS 0x80000000 /* Definitions for driver BRAM */ #define XPAR_XBRAM_NUM_INSTANCES 2 /* Definitions for peripheral DLMB_CNTLR */ #define XPAR_DLMB_CNTLR_DEVICE_ID 0 #define XPAR_DLMB_CNTLR_DATA_WIDTH 32 #define XPAR_DLMB_CNTLR_ECC 0 #define XPAR_DLMB_CNTLR_FAULT_INJECT 0 #define XPAR_DLMB_CNTLR_CE_FAILING_REGISTERS 0 #define XPAR_DLMB_CNTLR_UE_FAILING_REGISTERS 0 #define XPAR_DLMB_CNTLR_ECC_STATUS_REGISTERS 0 #define XPAR_DLMB_CNTLR_CE_COUNTER_WIDTH 0 #define XPAR_DLMB_CNTLR_ECC_ONOFF_REGISTER 0 #define XPAR_DLMB_CNTLR_ECC_ONOFF_RESET_VALUE 1 #define XPAR_DLMB_CNTLR_WRITE_ACCESS 2 #define XPAR_DLMB_CNTLR_BASEADDR 0x00000000 #define XPAR_DLMB_CNTLR_HIGHADDR 0x00003FFF #define XPAR_DLMB_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF #define XPAR_DLMB_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF /* Definitions for peripheral ILMB_CNTLR */ #define XPAR_ILMB_CNTLR_DEVICE_ID 1 #define XPAR_ILMB_CNTLR_DATA_WIDTH 32 #define XPAR_ILMB_CNTLR_ECC 0 #define XPAR_ILMB_CNTLR_FAULT_INJECT 0 #define XPAR_ILMB_CNTLR_CE_FAILING_REGISTERS 0 #define XPAR_ILMB_CNTLR_UE_FAILING_REGISTERS 0 #define XPAR_ILMB_CNTLR_ECC_STATUS_REGISTERS 0 #define XPAR_ILMB_CNTLR_CE_COUNTER_WIDTH 0 #define XPAR_ILMB_CNTLR_ECC_ONOFF_REGISTER 0 #define XPAR_ILMB_CNTLR_ECC_ONOFF_RESET_VALUE 1 #define XPAR_ILMB_CNTLR_WRITE_ACCESS 2 #define XPAR_ILMB_CNTLR_BASEADDR 0x00000000 #define XPAR_ILMB_CNTLR_HIGHADDR 0x00003FFF #define XPAR_ILMB_CNTLR_S_AXI_CTRL_BASEADDR 0xFFFFFFFF #define XPAR_ILMB_CNTLR_S_AXI_CTRL_HIGHADDR 0xFFFFFFFF /* Canonical definitions for peripheral DLMB_CNTLR */ #define XPAR_BRAM_0_DEVICE_ID XPAR_DLMB_CNTLR_DEVICE_ID #define XPAR_BRAM_0_DATA_WIDTH 32 #define XPAR_BRAM_0_ECC 0 #define XPAR_BRAM_0_FAULT_INJECT 0 #define XPAR_BRAM_0_CE_FAILING_REGISTERS 0 #define XPAR_BRAM_0_UE_FAILING_REGISTERS 0 #define XPAR_BRAM_0_ECC_STATUS_REGISTERS 0 #define XPAR_BRAM_0_CE_COUNTER_WIDTH 0 #define XPAR_BRAM_0_ECC_ONOFF_REGISTER 0 #define XPAR_BRAM_0_ECC_ONOFF_RESET_VALUE 1 #define XPAR_BRAM_0_WRITE_ACCESS 2 #define XPAR_BRAM_0_BASEADDR 0x00000000 #define XPAR_BRAM_0_HIGHADDR 0x00003FFF /* Canonical definitions for peripheral ILMB_CNTLR */ #define XPAR_BRAM_1_DEVICE_ID XPAR_ILMB_CNTLR_DEVICE_ID #define XPAR_BRAM_1_DATA_WIDTH 32 #define XPAR_BRAM_1_ECC 0 #define XPAR_BRAM_1_FAULT_INJECT 0 #define XPAR_BRAM_1_CE_FAILING_REGISTERS 0 #define XPAR_BRAM_1_UE_FAILING_REGISTERS 0 #define XPAR_BRAM_1_ECC_STATUS_REGISTERS 0 #define XPAR_BRAM_1_CE_COUNTER_WIDTH 0 #define XPAR_BRAM_1_ECC_ONOFF_REGISTER 0 #define XPAR_BRAM_1_ECC_ONOFF_RESET_VALUE 1 #define XPAR_BRAM_1_WRITE_ACCESS 2 #define XPAR_BRAM_1_BASEADDR 0x00000000 #define XPAR_BRAM_1_HIGHADDR 0x00003FFF /* Definitions for driver IOMODULE */ #define XPAR_XIOMODULE_NUM_INSTANCES 1 /* Definitions for peripheral IOMODULE_0 */ #define XPAR_IOMODULE_0_DEVICE_ID 0 #define XPAR_IOMODULE_0_BASEADDR 0x80000000 #define XPAR_IOMODULE_0_HIGHADDR 0x8000007F #define XPAR_IOMODULE_0_MASK 0xC0000000 #define XPAR_IOMODULE_0_FREQ 20000000 #define XPAR_IOMODULE_0_USE_UART_RX 1 #define XPAR_IOMODULE_0_USE_UART_TX 1 #define XPAR_IOMODULE_0_UART_BAUDRATE 921600 #define XPAR_IOMODULE_0_UART_PROG_BAUDRATE 0 #define XPAR_IOMODULE_0_UART_DATA_BITS 8 #define XPAR_IOMODULE_0_UART_USE_PARITY 0 #define XPAR_IOMODULE_0_UART_ODD_PARITY 0 #define XPAR_IOMODULE_0_UART_RX_INTERRUPT 0 #define XPAR_IOMODULE_0_UART_TX_INTERRUPT 0 #define XPAR_IOMODULE_0_UART_ERROR_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_FIT1 1 #define XPAR_IOMODULE_0_FIT1_NO_CLOCKS 200 #define XPAR_IOMODULE_0_FIT1_INTERRUPT 1 #define XPAR_IOMODULE_0_USE_FIT2 0 #define XPAR_IOMODULE_0_FIT2_NO_CLOCKS 6216 #define XPAR_IOMODULE_0_FIT2_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_FIT3 0 #define XPAR_IOMODULE_0_FIT3_NO_CLOCKS 6216 #define XPAR_IOMODULE_0_FIT3_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_FIT4 0 #define XPAR_IOMODULE_0_FIT4_NO_CLOCKS 6216 #define XPAR_IOMODULE_0_FIT4_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_PIT1 1 #define XPAR_IOMODULE_0_PIT1_SIZE 32 #define XPAR_IOMODULE_0_PIT1_READABLE 1 #define XPAR_IOMODULE_0_PIT1_PRESCALER 0 #define XPAR_IOMODULE_0_PIT1_INTERRUPT 1 #define XPAR_IOMODULE_0_USE_PIT2 0 #define XPAR_IOMODULE_0_PIT2_SIZE 32 #define XPAR_IOMODULE_0_PIT2_READABLE 1 #define XPAR_IOMODULE_0_PIT2_PRESCALER 0 #define XPAR_IOMODULE_0_PIT2_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_PIT3 0 #define XPAR_IOMODULE_0_PIT3_SIZE 32 #define XPAR_IOMODULE_0_PIT3_READABLE 1 #define XPAR_IOMODULE_0_PIT3_PRESCALER 0 #define XPAR_IOMODULE_0_PIT3_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_PIT4 0 #define XPAR_IOMODULE_0_PIT4_SIZE 32 #define XPAR_IOMODULE_0_PIT4_READABLE 1 #define XPAR_IOMODULE_0_PIT4_PRESCALER 0 #define XPAR_IOMODULE_0_PIT4_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_GPO1 1 #define XPAR_IOMODULE_0_GPO1_SIZE 8 #define XPAR_IOMODULE_0_USE_GPO2 1 #define XPAR_IOMODULE_0_GPO2_SIZE 7 #define XPAR_IOMODULE_0_USE_GPO3 0 #define XPAR_IOMODULE_0_GPO3_SIZE 32 #define XPAR_IOMODULE_0_USE_GPO4 0 #define XPAR_IOMODULE_0_GPO4_SIZE 32 #define XPAR_IOMODULE_0_USE_GPI1 1 #define XPAR_IOMODULE_0_GPI1_SIZE 8 #define XPAR_IOMODULE_0_GPI1_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_GPI2 0 #define XPAR_IOMODULE_0_GPI2_SIZE 32 #define XPAR_IOMODULE_0_GPI2_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_GPI3 0 #define XPAR_IOMODULE_0_GPI3_SIZE 32 #define XPAR_IOMODULE_0_GPI3_INTERRUPT 0 #define XPAR_IOMODULE_0_USE_GPI4 0 #define XPAR_IOMODULE_0_GPI4_SIZE 32 #define XPAR_IOMODULE_0_GPI4_INTERRUPT 0 #define XPAR_IOMODULE_0_INTC_USE_EXT_INTR 0 #define XPAR_IOMODULE_0_INTC_INTR_SIZE 1 #define XPAR_IOMODULE_0_INTC_HAS_FAST 1 #define XPAR_IOMODULE_0_INTC_BASE_VECTORS 0 #define XPAR_IOMODULE_0_USE_IO_BUS 0 #define XPAR_IOMODULE_0_IO_BASEADDR 0xC0000000 #define XPAR_IOMODULE_0_IO_HIGHADDR 0xFFFFFFFF #define XPAR_IOMODULE_0_IO_MASK 0xC0000000 /* Additional definitions for peripheral IOMODULE_0 */ #define XPAR_IOMODULE_0_GPO1_INIT 0x00000000 #define XPAR_IOMODULE_0_GPO2_INIT 0x00000000 #define XPAR_IOMODULE_0_GPO3_INIT 0x00000000 #define XPAR_IOMODULE_0_GPO4_INIT 0x00000000 #define XPAR_IOMODULE_0_INTC_LEVEL_EDGE 0x0000 #define XPAR_IOMODULE_0_INTC_POSITIVE 0xFFFF #define XPAR_IOMODULE_INTC_MAX_INTR_SIZE 0 #define XPAR_IOMODULE_SINGLE_BASEADDR 0x80000000 #define XPAR_IOMODULE_SINGLE_HIGHADDR 0x8000007F #define XPAR_IOMODULE_INTC_SINGLE_DEVICE_ID XPAR_IOMODULE_0_DEVICE_ID /******************************************************************/ /******************************************************************/ /* Definitions for bus frequencies */ /******************************************************************/ /* Canonical definitions for bus frequencies */ /******************************************************************/ #define XPAR_CPU_CORE_CLOCK_FREQ_HZ 20000000 #define XPAR_MICROBLAZE_CORE_CLOCK_FREQ_HZ 20000000 /******************************************************************/ /* Definitions for peripheral MICROBLAZE_MCS */ #define XPAR_MICROBLAZE_MCS_SCO 0 #define XPAR_MICROBLAZE_MCS_FREQ 20000000 #define XPAR_MICROBLAZE_MCS_DATA_SIZE 32 #define XPAR_MICROBLAZE_MCS_DYNAMIC_BUS_SIZING 1 #define XPAR_MICROBLAZE_MCS_AVOID_PRIMITIVES 0 #define XPAR_MICROBLAZE_MCS_FAULT_TOLERANT 0 #define XPAR_MICROBLAZE_MCS_ECC_USE_CE_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_LOCKSTEP_SLAVE 0 #define XPAR_MICROBLAZE_MCS_ENDIANNESS 1 #define XPAR_MICROBLAZE_MCS_AREA_OPTIMIZED 1 #define XPAR_MICROBLAZE_MCS_OPTIMIZATION 0 #define XPAR_MICROBLAZE_MCS_INTERCONNECT 2 #define XPAR_MICROBLAZE_MCS_STREAM_INTERCONNECT 0 #define XPAR_MICROBLAZE_MCS_DPLB_DWIDTH 32 #define XPAR_MICROBLAZE_MCS_DPLB_NATIVE_DWIDTH 32 #define XPAR_MICROBLAZE_MCS_DPLB_BURST_EN 0 #define XPAR_MICROBLAZE_MCS_DPLB_P2P 0 #define XPAR_MICROBLAZE_MCS_IPLB_DWIDTH 32 #define XPAR_MICROBLAZE_MCS_IPLB_NATIVE_DWIDTH 32 #define XPAR_MICROBLAZE_MCS_IPLB_BURST_EN 0 #define XPAR_MICROBLAZE_MCS_IPLB_P2P 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_WRITE 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_DP_PROTOCOL AXI4LITE #define XPAR_MICROBLAZE_MCS_M_AXI_DP_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DP_READ_ISSUING 1 #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DP_WRITE_ISSUING 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_WRITE 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_IP_PROTOCOL AXI4LITE #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_IP_READ_ISSUING 1 #define XPAR_MICROBLAZE_MCS_D_AXI 0 #define XPAR_MICROBLAZE_MCS_D_PLB 0 #define XPAR_MICROBLAZE_MCS_D_LMB 1 #define XPAR_MICROBLAZE_MCS_I_AXI 0 #define XPAR_MICROBLAZE_MCS_I_PLB 0 #define XPAR_MICROBLAZE_MCS_I_LMB 1 #define XPAR_MICROBLAZE_MCS_USE_MSR_INSTR 0 #define XPAR_MICROBLAZE_MCS_USE_PCMP_INSTR 0 #define XPAR_MICROBLAZE_MCS_USE_BARREL 0 #define XPAR_MICROBLAZE_MCS_USE_DIV 0 #define XPAR_MICROBLAZE_MCS_USE_HW_MUL 0 #define XPAR_MICROBLAZE_MCS_USE_FPU 0 #define XPAR_MICROBLAZE_MCS_USE_REORDER_INSTR 0 #define XPAR_MICROBLAZE_MCS_UNALIGNED_EXCEPTIONS 0 #define XPAR_MICROBLAZE_MCS_ILL_OPCODE_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_M_AXI_I_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_M_AXI_D_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_IPLB_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_DPLB_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_DIV_ZERO_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_FPU_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_FSL_EXCEPTION 0 #define XPAR_MICROBLAZE_MCS_USE_STACK_PROTECTION 0 #define XPAR_MICROBLAZE_MCS_PVR 0 #define XPAR_MICROBLAZE_MCS_PVR_USER1 0x00 #define XPAR_MICROBLAZE_MCS_PVR_USER2 0x00000000 #define XPAR_MICROBLAZE_MCS_DEBUG_ENABLED 0 #define XPAR_MICROBLAZE_MCS_NUMBER_OF_PC_BRK 1 #define XPAR_MICROBLAZE_MCS_NUMBER_OF_RD_ADDR_BRK 0 #define XPAR_MICROBLAZE_MCS_NUMBER_OF_WR_ADDR_BRK 0 #define XPAR_MICROBLAZE_MCS_INTERRUPT_IS_EDGE 0 #define XPAR_MICROBLAZE_MCS_EDGE_IS_POSITIVE 1 #define XPAR_MICROBLAZE_MCS_RESET_MSR 0x00000000 #define XPAR_MICROBLAZE_MCS_OPCODE_0X0_ILLEGAL 0 #define XPAR_MICROBLAZE_MCS_FSL_LINKS 0 #define XPAR_MICROBLAZE_MCS_FSL_DATA_SIZE 32 #define XPAR_MICROBLAZE_MCS_USE_EXTENDED_FSL_INSTR 0 #define XPAR_MICROBLAZE_MCS_M0_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S0_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M1_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S1_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M2_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S2_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M3_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S3_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M4_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S4_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M5_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S5_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M6_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S6_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M7_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S7_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M8_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S8_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M9_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S9_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M10_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S10_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M11_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S11_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M12_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S12_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M13_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S13_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M14_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S14_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_S15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_MCS_M0_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S0_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M1_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S1_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M2_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S2_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M3_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S3_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M4_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S4_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M5_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S5_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M6_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S6_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M7_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S7_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M8_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S8_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M9_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S9_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M10_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S10_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M11_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S11_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M12_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S12_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M13_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S13_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M14_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S14_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_S15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_ICACHE_BASEADDR 0x00000000 #define XPAR_MICROBLAZE_MCS_ICACHE_HIGHADDR 0x3FFFFFFF #define XPAR_MICROBLAZE_MCS_USE_ICACHE 0 #define XPAR_MICROBLAZE_MCS_ALLOW_ICACHE_WR 1 #define XPAR_MICROBLAZE_MCS_ADDR_TAG_BITS 0 #define XPAR_MICROBLAZE_MCS_CACHE_BYTE_SIZE 16384 #define XPAR_MICROBLAZE_MCS_ICACHE_USE_FSL 0 #define XPAR_MICROBLAZE_MCS_ICACHE_LINE_LEN 4 #define XPAR_MICROBLAZE_MCS_ICACHE_ALWAYS_USED 0 #define XPAR_MICROBLAZE_MCS_ICACHE_INTERFACE 0 #define XPAR_MICROBLAZE_MCS_ICACHE_VICTIMS 0 #define XPAR_MICROBLAZE_MCS_ICACHE_STREAMS 0 #define XPAR_MICROBLAZE_MCS_ICACHE_FORCE_TAG_LUTRAM 0 #define XPAR_MICROBLAZE_MCS_ICACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_WRITE 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_PROTOCOL AXI4 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_USER_VALUE 0b11111 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_SUPPORTS_USER_SIGNALS 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_AWUSER_WIDTH 5 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_WUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_RUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_IC_BUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_IC_READ_ISSUING 2 #define XPAR_MICROBLAZE_MCS_DCACHE_BASEADDR 0x00000000 #define XPAR_MICROBLAZE_MCS_DCACHE_HIGHADDR 0x3FFFFFFF #define XPAR_MICROBLAZE_MCS_USE_DCACHE 0 #define XPAR_MICROBLAZE_MCS_ALLOW_DCACHE_WR 1 #define XPAR_MICROBLAZE_MCS_DCACHE_ADDR_TAG 0 #define XPAR_MICROBLAZE_MCS_DCACHE_BYTE_SIZE 16384 #define XPAR_MICROBLAZE_MCS_DCACHE_USE_FSL 0 #define XPAR_MICROBLAZE_MCS_DCACHE_LINE_LEN 4 #define XPAR_MICROBLAZE_MCS_DCACHE_ALWAYS_USED 0 #define XPAR_MICROBLAZE_MCS_DCACHE_INTERFACE 0 #define XPAR_MICROBLAZE_MCS_DCACHE_USE_WRITEBACK 0 #define XPAR_MICROBLAZE_MCS_DCACHE_VICTIMS 0 #define XPAR_MICROBLAZE_MCS_DCACHE_FORCE_TAG_LUTRAM 0 #define XPAR_MICROBLAZE_MCS_DCACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_WRITE 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_DATA_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_PROTOCOL AXI4 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_USER_VALUE 0b11111 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_SUPPORTS_USER_SIGNALS 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_AWUSER_WIDTH 5 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_WUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_RUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_M_AXI_DC_BUSER_WIDTH 1 #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DC_READ_ISSUING 2 #define XPAR_MICROBLAZE_MCS_INTERCONNECT_M_AXI_DC_WRITE_ISSUING 32 #define XPAR_MICROBLAZE_MCS_USE_MMU 0 #define XPAR_MICROBLAZE_MCS_MMU_DTLB_SIZE 4 #define XPAR_MICROBLAZE_MCS_MMU_ITLB_SIZE 2 #define XPAR_MICROBLAZE_MCS_MMU_TLB_ACCESS 3 #define XPAR_MICROBLAZE_MCS_MMU_ZONES 16 #define XPAR_MICROBLAZE_MCS_MMU_PRIVILEGED_INSTR 0 #define XPAR_MICROBLAZE_MCS_USE_INTERRUPT 2 #define XPAR_MICROBLAZE_MCS_USE_EXT_BRK 0 #define XPAR_MICROBLAZE_MCS_USE_EXT_NM_BRK 0 #define XPAR_MICROBLAZE_MCS_USE_BRANCH_TARGET_CACHE 0 #define XPAR_MICROBLAZE_MCS_BRANCH_TARGET_CACHE_SIZE 0 #define XPAR_MICROBLAZE_MCS_PC_WIDTH 32 /******************************************************************/ #define XPAR_CPU_ID 0 #define XPAR_MICROBLAZE_ID 0 #define XPAR_MICROBLAZE_SCO 0 #define XPAR_MICROBLAZE_FREQ 20000000 #define XPAR_MICROBLAZE_DATA_SIZE 32 #define XPAR_MICROBLAZE_DYNAMIC_BUS_SIZING 1 #define XPAR_MICROBLAZE_AVOID_PRIMITIVES 0 #define XPAR_MICROBLAZE_FAULT_TOLERANT 0 #define XPAR_MICROBLAZE_ECC_USE_CE_EXCEPTION 0 #define XPAR_MICROBLAZE_LOCKSTEP_SLAVE 0 #define XPAR_MICROBLAZE_ENDIANNESS 1 #define XPAR_MICROBLAZE_AREA_OPTIMIZED 1 #define XPAR_MICROBLAZE_OPTIMIZATION 0 #define XPAR_MICROBLAZE_INTERCONNECT 2 #define XPAR_MICROBLAZE_STREAM_INTERCONNECT 0 #define XPAR_MICROBLAZE_DPLB_DWIDTH 32 #define XPAR_MICROBLAZE_DPLB_NATIVE_DWIDTH 32 #define XPAR_MICROBLAZE_DPLB_BURST_EN 0 #define XPAR_MICROBLAZE_DPLB_P2P 0 #define XPAR_MICROBLAZE_IPLB_DWIDTH 32 #define XPAR_MICROBLAZE_IPLB_NATIVE_DWIDTH 32 #define XPAR_MICROBLAZE_IPLB_BURST_EN 0 #define XPAR_MICROBLAZE_IPLB_P2P 0 #define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_M_AXI_DP_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_WRITE 1 #define XPAR_MICROBLAZE_M_AXI_DP_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_M_AXI_DP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DP_PROTOCOL AXI4LITE #define XPAR_MICROBLAZE_M_AXI_DP_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DP_READ_ISSUING 1 #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DP_WRITE_ISSUING 1 #define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_M_AXI_IP_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_WRITE 0 #define XPAR_MICROBLAZE_M_AXI_IP_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_M_AXI_IP_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IP_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IP_PROTOCOL AXI4LITE #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_IP_READ_ISSUING 1 #define XPAR_MICROBLAZE_D_AXI 0 #define XPAR_MICROBLAZE_D_PLB 0 #define XPAR_MICROBLAZE_D_LMB 1 #define XPAR_MICROBLAZE_I_AXI 0 #define XPAR_MICROBLAZE_I_PLB 0 #define XPAR_MICROBLAZE_I_LMB 1 #define XPAR_MICROBLAZE_USE_MSR_INSTR 0 #define XPAR_MICROBLAZE_USE_PCMP_INSTR 0 #define XPAR_MICROBLAZE_USE_BARREL 0 #define XPAR_MICROBLAZE_USE_DIV 0 #define XPAR_MICROBLAZE_USE_HW_MUL 0 #define XPAR_MICROBLAZE_USE_FPU 0 #define XPAR_MICROBLAZE_USE_REORDER_INSTR 0 #define XPAR_MICROBLAZE_UNALIGNED_EXCEPTIONS 0 #define XPAR_MICROBLAZE_ILL_OPCODE_EXCEPTION 0 #define XPAR_MICROBLAZE_M_AXI_I_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_M_AXI_D_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_IPLB_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_DPLB_BUS_EXCEPTION 0 #define XPAR_MICROBLAZE_DIV_ZERO_EXCEPTION 0 #define XPAR_MICROBLAZE_FPU_EXCEPTION 0 #define XPAR_MICROBLAZE_FSL_EXCEPTION 0 #define XPAR_MICROBLAZE_USE_STACK_PROTECTION 0 #define XPAR_MICROBLAZE_PVR 0 #define XPAR_MICROBLAZE_PVR_USER1 0x00 #define XPAR_MICROBLAZE_PVR_USER2 0x00000000 #define XPAR_MICROBLAZE_DEBUG_ENABLED 0 #define XPAR_MICROBLAZE_NUMBER_OF_PC_BRK 1 #define XPAR_MICROBLAZE_NUMBER_OF_RD_ADDR_BRK 0 #define XPAR_MICROBLAZE_NUMBER_OF_WR_ADDR_BRK 0 #define XPAR_MICROBLAZE_INTERRUPT_IS_EDGE 0 #define XPAR_MICROBLAZE_EDGE_IS_POSITIVE 1 #define XPAR_MICROBLAZE_RESET_MSR 0x00000000 #define XPAR_MICROBLAZE_OPCODE_0X0_ILLEGAL 0 #define XPAR_MICROBLAZE_FSL_LINKS 0 #define XPAR_MICROBLAZE_FSL_DATA_SIZE 32 #define XPAR_MICROBLAZE_USE_EXTENDED_FSL_INSTR 0 #define XPAR_MICROBLAZE_M0_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S0_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M1_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S1_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M2_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S2_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M3_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S3_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M4_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S4_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M5_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S5_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M6_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S6_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M7_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S7_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M8_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S8_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M9_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S9_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M10_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S10_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M11_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S11_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M12_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S12_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M13_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S13_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M14_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S14_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_S15_AXIS_PROTOCOL GENERIC #define XPAR_MICROBLAZE_M0_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S0_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M1_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S1_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M2_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S2_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M3_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S3_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M4_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S4_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M5_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S5_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M6_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S6_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M7_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S7_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M8_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S8_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M9_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S9_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M10_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S10_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M11_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S11_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M12_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S12_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M13_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S13_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M14_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S14_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_S15_AXIS_DATA_WIDTH 32 #define XPAR_MICROBLAZE_ICACHE_BASEADDR 0x00000000 #define XPAR_MICROBLAZE_ICACHE_HIGHADDR 0x3FFFFFFF #define XPAR_MICROBLAZE_USE_ICACHE 0 #define XPAR_MICROBLAZE_ALLOW_ICACHE_WR 1 #define XPAR_MICROBLAZE_ADDR_TAG_BITS 0 #define XPAR_MICROBLAZE_CACHE_BYTE_SIZE 16384 #define XPAR_MICROBLAZE_ICACHE_USE_FSL 0 #define XPAR_MICROBLAZE_ICACHE_LINE_LEN 4 #define XPAR_MICROBLAZE_ICACHE_ALWAYS_USED 0 #define XPAR_MICROBLAZE_ICACHE_INTERFACE 0 #define XPAR_MICROBLAZE_ICACHE_VICTIMS 0 #define XPAR_MICROBLAZE_ICACHE_STREAMS 0 #define XPAR_MICROBLAZE_ICACHE_FORCE_TAG_LUTRAM 0 #define XPAR_MICROBLAZE_ICACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_M_AXI_IC_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_WRITE 0 #define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_M_AXI_IC_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_IC_PROTOCOL AXI4 #define XPAR_MICROBLAZE_M_AXI_IC_USER_VALUE 0b11111 #define XPAR_MICROBLAZE_M_AXI_IC_SUPPORTS_USER_SIGNALS 1 #define XPAR_MICROBLAZE_M_AXI_IC_AWUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_IC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_IC_WUSER_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_IC_RUSER_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_IC_BUSER_WIDTH 1 #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_IC_READ_ISSUING 2 #define XPAR_MICROBLAZE_DCACHE_BASEADDR 0x00000000 #define XPAR_MICROBLAZE_DCACHE_HIGHADDR 0x3FFFFFFF #define XPAR_MICROBLAZE_USE_DCACHE 0 #define XPAR_MICROBLAZE_ALLOW_DCACHE_WR 1 #define XPAR_MICROBLAZE_DCACHE_ADDR_TAG 0 #define XPAR_MICROBLAZE_DCACHE_BYTE_SIZE 16384 #define XPAR_MICROBLAZE_DCACHE_USE_FSL 0 #define XPAR_MICROBLAZE_DCACHE_LINE_LEN 4 #define XPAR_MICROBLAZE_DCACHE_ALWAYS_USED 0 #define XPAR_MICROBLAZE_DCACHE_INTERFACE 0 #define XPAR_MICROBLAZE_DCACHE_USE_WRITEBACK 0 #define XPAR_MICROBLAZE_DCACHE_VICTIMS 0 #define XPAR_MICROBLAZE_DCACHE_FORCE_TAG_LUTRAM 0 #define XPAR_MICROBLAZE_DCACHE_DATA_WIDTH 0 #define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_THREADS 0 #define XPAR_MICROBLAZE_M_AXI_DC_THREAD_ID_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_READ 1 #define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_WRITE 1 #define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_NARROW_BURST 0 #define XPAR_MICROBLAZE_M_AXI_DC_DATA_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DC_ADDR_WIDTH 32 #define XPAR_MICROBLAZE_M_AXI_DC_PROTOCOL AXI4 #define XPAR_MICROBLAZE_M_AXI_DC_EXCLUSIVE_ACCESS 0 #define XPAR_MICROBLAZE_M_AXI_DC_USER_VALUE 0b11111 #define XPAR_MICROBLAZE_M_AXI_DC_SUPPORTS_USER_SIGNALS 1 #define XPAR_MICROBLAZE_M_AXI_DC_AWUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_DC_ARUSER_WIDTH 5 #define XPAR_MICROBLAZE_M_AXI_DC_WUSER_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_DC_RUSER_WIDTH 1 #define XPAR_MICROBLAZE_M_AXI_DC_BUSER_WIDTH 1 #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DC_READ_ISSUING 2 #define XPAR_MICROBLAZE_INTERCONNECT_M_AXI_DC_WRITE_ISSUING 32 #define XPAR_MICROBLAZE_USE_MMU 0 #define XPAR_MICROBLAZE_MMU_DTLB_SIZE 4 #define XPAR_MICROBLAZE_MMU_ITLB_SIZE 2 #define XPAR_MICROBLAZE_MMU_TLB_ACCESS 3 #define XPAR_MICROBLAZE_MMU_ZONES 16 #define XPAR_MICROBLAZE_MMU_PRIVILEGED_INSTR 0 #define XPAR_MICROBLAZE_USE_INTERRUPT 2 #define XPAR_MICROBLAZE_USE_EXT_BRK 0 #define XPAR_MICROBLAZE_USE_EXT_NM_BRK 0 #define XPAR_MICROBLAZE_USE_BRANCH_TARGET_CACHE 0 #define XPAR_MICROBLAZE_BRANCH_TARGET_CACHE_SIZE 0 #define XPAR_MICROBLAZE_PC_WIDTH 32 #define XPAR_MICROBLAZE_HW_VER "8.40.a"
Hier finde ich z.b. die #defines nicht: "XPAR_XPS_TIMER_0_DEVICE_ID" status = XTmrCtr_Initialize(&DelayTimer,XPAR_XPS_TIMER_0_DEVICE_ID);
Hier wird zb. gesagt, dass der virtex 6 über den Timer verfügt: http://www.xilinx.com/products/intellectual-property/xps_timer.htm. Hat jemand eine Idee, wieso er nicht in den xparameters.h aufgelistet ist? Aus Beispielen vom Vitex 5 kenne ich diese defines nämlich.
User schrieb: > Hat jemand eine Idee, wieso er nicht in den xparameters.h aufgelistet #include "xparameters.h" #include "stdio.h" #include "xutil.h" #include "xgpio.h" #include "xtmrctr.h" /* timer_0 */ Hier bitte lesen. Wie der Timer bzw das System erstellt wird. (Also liegen die Periperie Addressen bzw. speziell timer Periperie im Header xtmrctr.h ) tmr --- symbol t_i_m_e_r. Die Bilder in dem Link ansehen. Link: http://www.cs.uni-paderborn.de/fileadmin/Informatik/AG-Platzner/Teaching/WS1213/Reconfigurable_Computing/Tutorials/tutorial_edk11.pdf Zitat aus dem Link: via *-pdf How to use the timer module: Include the header xtmrctr.h by adding the line: #include "xtmrctr.h" Add a timer handle by declaring an XTmrCtr variable: static XTmrCtr XPS_Timer; The Timer can be controlled with the following routines: Frage: Was hast du für ein Board, mit dem du da arbeitest. Frage: Hast du schon mal mit dem Xilinx Platform Studio gearbeitet, bzw. kannst du nachvollziehen wie das system da erstellt wird. Gruss Holger.
Hier ein Zusammen-Schnitt #include "xtmrctr.h" /* timer_0 */ und den Festen Address Konstanten die da als Symbole in den C-File eingebaut werden. Siehe Bild. 0x8C00xxx = timer Struktur ---------------- Gruss Holger. ToDo: Für mich. Besonderes Augenmerk ist noch da in dem *.pdf der Konstrukt mit volatile "Variabler" zu sehen. volatile sagt dem Compiler das er das datavalue nicht in ein Register packt. Somit zieht der Prozessor during runtime die Variable immer frisch.
Danke dir. Ich probiere es morgen gleich aus. Ich schau morgen nach, wie genau der Name der Entwicklungsumgebung ist. Auf alle Fälle von xilinx. Ich kann die xtmrctr.h anklicken. Die habe ich aus dem Internet geladen und in den projektordner kopiert. Ich schaue morgen, ob ich dadrin eine Timer Adresse finde. Ich gebe auf alle Fälle Rückmeldung. Danke
Ich habe ein Projekt in xilix Ise angelegt. In dem Projekt habe ich ml605 als Grundeinstellung gewählt. Als IPCore habe Ich den microblaze eingebunden. Um diesen zu programmieren bin ich nach dem Tutorial vorgegangen http://ece.wpi.edu/~xhuang/index_files/courses/ECE3829-Lab4.pdf. Ich weiß nun nicht, ob ich mit den Programmen arbeite, die du verwendest um diese Ansicht mit den Adressen zu bekommen. Bzw. Wie komme ich von meinem Standpunkt zu deiner Ansicht (sie Foto aus deinem Beitrag vom 23.12.2013 16:27 Uhr )?
Guten Morgen Holger, meine xtmrctr.h sieht wie folgt aus: http://users.ece.gatech.edu/~hamblen/4006/xup/embedded/labs/lab4mb/microblaze_0/include/xtmrctr.h. Von dieser Seite habe ich diese geladen und zum Projekt hinzugefügt. Wenn du sagst, dass eigentlich in der Datei die Address-Konstanten stehen, dann kann es bei mir ja nicht funktionieren (ist ja scheinbar keine von meiner Platform generierte Datei, richtig?). Lösche ich die extra von mir eingefügte Header-Datei, dann fehlt diese nach dem Einbinden. Dass heißt ja, dass sie von SDK nicht wirklich bereitgestellt wird. Hast du eine Idee, oder drehe ich mich im Kreis? Danke dir.
Ich denke mal, dass meine Probleme daher kommen, dass ich mit dem Virtex 6 auf dem ML605 arbeite. Die Hilfen, die ich mir anschaue stammen jedoch von älteren Versionen. Ich habe einmal ein neues Projekt mit dem von dir angesprochenen System Builder erstellt. Anbei befindet sich ein JPG mit den Konstanten. Dort habe ich nun die Timer BaseAddress entnommen. (Ich habe die Dateien alle hinzugefügt http://users.ece.gatech.edu/~hamblen/4006/xup/embedded/labs/lab4mb/microblaze_0/libsrc/tmrctr_v1_00_b/src/) #include "xstatus.h" #include "xparameters.h" #include "xtmrctr.h" /* axi_timer_0 */ #define BaseAddress 0x41C00000 // axi_timer_0 XTmrCtr DelayTimer; int main(){ Xuint32 status; status = XTmrCtr_Initialize(&DelayTimer,BaseAddress); if (status != XST_SUCCESS){ xil_printf("Timer failed to initialize\r\n"); return XST_FAILURE;} XTmrCtr_SetOptions(&DelayTimer, 1, XTC_DOWN_COUNT_OPTION); delay_ms(1); //Test return 0; } void delay_ms(Xuint32 time) { XTmrCtr_SetResetValue(&DelayTimer, 1, time * 125000); XTmrCtr_Start(&DelayTimer, 1); while(!(XTmrCtr_IsExpired(&DelayTimer, 1))){} XTmrCtr_Stop(&DelayTimer, 1); } Dann bekomme ich die Fehlermeldung: error: 'XPAR_XTMRCTR_NUM_INSTANCES' undeclared (first use in this function). Diese soll angeblich auch in der xparameters.h definiert sein... Setze ich einmal zum TEST "#define XPAR_XTMRCTR_NUM_INSTANCES 2", dann fehlen als nächstes XPAR_DELAY_DEVICE_ID und XPAR_DELAY_BASEADDR aus dem header "xtmrctr_g.c". Diese sollen angeblich wieder aus der Datei xparameters.h entnommen werden. Demnach zweifel ich gerade daran, ob der Virtex6 diesen Timer in der Art wie die Vorgänger besitzt. Ich habe wie gesagt scheinbar immernoch das Problem die defines zu finden.
Warum muß man eigentlich als Anfänger mit dem komplexesten Szenario, das es auf einem FPGA gibt anfangen? Frei konfigurierbare Logik + parametrierbare CPU + variable Peripherie + Software?!? Hast Du schon mal eine blinkende LED realisiert (ohne Softcore)? Lauflicht? State-Machine? Wenn nein, warum fängst Du dann mit einem LCD+Softcore an? Was für eine Version Deiner Entwicklungsumgebung hast Du (Webpack, Eval oder Full)? Hast Du Dir Deinen Microblaze selber konfiguriert oder wurde er vorgegeben? Normalerweise wird beim Parametrieren der CPU (und der Peripherie) ausgewählt, ob und wieviele GPIO, Timer, RAM etc. pp. man haben möchte (bzw. im FPGA unterbringen kann). Genau dort fällt auch ein Parameterfile raus, welches man hinterher in der Software einbindet. Wenn Du dieses File aus einem anderen Projekt nimmst, ist die Wahrscheinlichkeit hoch, das es bei Dir nicht passt. Machst Du das Projekt für Dich, für die Uni oder für Deinen Arbeitgeber? Duke
User schrieb: > Ich habe wie gesagt scheinbar immernoch das > Problem die defines zu finden. Du hast das Problem, daß Du noch nicht geblickt hast, wie die Tools aufeinander aufbauen (-> Toolflow). Hast Du schon mal die Tutorials vom Hersteller durchgearbeitet? Duke
Danke für die Antwort Duke. Ich habe mit einem FPGA schon ein Lauflicht, blinkende LEDs (mit der einfachen delay-Fkt - Stichwort "nop") usw. realisiert. VHDL Kenntnisse sind soweit vorhanden. Nun möchte ich mit dem MicroBlaze experimentieren. LCD läuft, LED- Ausgaben, DIP-Schalter-Eingaben, USB etc läuft. Ich habe früher auf AVRs in C programmiert. Tutorials habe ich einige durchgearbeitet. Aber du hast sicherlich recht, dass ich den "Toolflow" noch nicht verinnerlicht habe.
Zum Verständnis noch ein letztes mal. 1. Die Adressen des GPI, GPO, Timers usw. eines FPGAs (Virtex 5, Virtex 6, ...) sind vom Hersteller fest vorgegeben, richtig? 2. Die festen Register-Adressen muss ich im Datenblatt des jeweiligen FPGAs nachschauen, korrekt? 3. Die Adressen sollten damit unabhängig von der verwendeten ISE-Version usw. sein, richtig? Ich frage aus folgendem Grund: Ich habe euren Rat befolgt und einmal den Flow versucht nachzuvollziehen. Ich habe dieses Mal wie in Holgers obigen Beispiel erläutert ein neues Projekt gemäß Tutorial angelegt. Dazu habe ich (a) in „Xilinx Platform Studio“ ein neues Projekt angelegt. Ich kann da wählen zwischen einem AIX- und einem PLB-System. Ich habe das PLB-System wie im Beispiel erstellt. Der Timer „xps_timer_0“ (wie in Holgers Darstellung) ist vorhanden. Die Basis-Adresse habe ich mir notiert (0x83C00000). Ebenso die Adresse des GPO1-Registers, an dem die LEDs "angelegt" sind (0x81400000). (b) anschließend habe ich SDK geladen und ein Projekt angelegt. Binde ich nun "xparameters.h" ein, dann erscheint der Timer als Peripherie-Komponente. (Bis dahin stimmt scheinbar alles) (c) ein erster Test: "Hello world" über UART ausgeben funktioniert! (d) ein zweiter Test: LEDs einschalten. In dem funktionsfähigen Projekt von mir ging das über: #define XPAR_LEDS_8BIT_BASEADDR 0x81400000; XGpio_mWriteReg(XPAR_LEDS_8BIT_BASEADDR, 0x01, 0xFF); => LEDs leuchten nicht! Ich habe mein altes Projekt geladen. Hier funktioniert es. Mir ist aufgefallen, dass die Basis-Adresse für den GPO1 0x80000010 ist. (eine andere Adresse ?!) Aus diesem Grund meine oben gestellten Verständnisfragen, ob die Adressen fest sind. Die Adresse 0x80000010 hatte ich damals aus dem Dokument http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ds865_microblaze_mcs.pdf (Seite 24) Das Dokument beschreibt den MicroBlaze. Das Dokument ist ja gültig für "Virtex 5, Virtex 6 ... => Adresse doch lediglich abhängig von der Konfigurierung (Automatische Festlegung, wenn ich das Projekt erstelle?!) ? Ich versuche momentan ein wenig dahinterzukommen, wie das Ganze funktioniert. Es ist jedoch bei den vielen Dokumenten von Xilinx schwer die richtigen (ist ja auch abhängig von der ISE-Version) herauszufiltern. Danke
User schrieb: > Zum Verständnis noch ein letztes mal. > > 1. Die Adressen des GPI, GPO, Timers usw. eines FPGAs (Virtex 5, Virtex > 6, ...) sind vom Hersteller fest vorgegeben, richtig? Falsch! XPS geht zwar her und vergibt, wenn du mit dem Base-System-Builder arbeitest, automatisch "sinnvolle" Adressen, diese sind aber nur ein Vorschlag und können jederzeit geändert werden... Übrigens hast du glaube ich noch nicht ganz verstanden, dass du in deinen FPGA einen IP-Core einbaust der z.B. eben die Funktion eines Timers, der GPIOs,... realisiert und das keine feste komponente des FPGAs ist, oder? > 2. Die festen Register-Adressen muss ich im Datenblatt des jeweiligen > FPGAs nachschauen, korrekt? Siehe Antwort zu Frage 1 - sind einstallbar... > 3. Die Adressen sollten damit unabhängig von der verwendeten ISE-Version > usw. sein, richtig? Und wieder siehe 1. > > > Ich frage aus folgendem Grund: > > Ich habe euren Rat befolgt und einmal den Flow versucht > nachzuvollziehen. Ich habe dieses Mal wie in Holgers obigen Beispiel > erläutert ein neues Projekt gemäß Tutorial angelegt. Manchmal neu Anfangen ist gut wenn man den Wald vor Bäumen nicht mehr sieht ;) > Dazu habe ich > (a) in „Xilinx Platform Studio“ ein neues Projekt angelegt. Ich kann da > wählen zwischen einem AIX- und einem PLB-System. Ich habe das PLB-System > wie im Beispiel erstellt. Der Timer „xps_timer_0“ (wie in Holgers > Darstellung) ist vorhanden. Die Basis-Adresse habe ich mir notiert > (0x83C00000). Ebenso die Adresse des GPO1-Registers, an dem die LEDs > "angelegt" sind (0x81400000). Brauchst du dir nicht notieren da dir das die Tools abnehmen aber dazu gleich mehr... > (b) anschließend habe ich SDK geladen und ein Projekt angelegt. Binde > ich nun "xparameters.h" ein, dann erscheint der Timer als > Peripherie-Komponente. (Bis dahin stimmt scheinbar alles) Ganz genau das ist der Punkt. Hast du verstanden wofür diese Datei ist? Genau in dieser sind nämlich all diese vielen Addressen und weitere Parameter definiert - das will sich ja keiner merken ;) > (c) ein erster Test: "Hello world" über UART ausgeben funktioniert! Sehr schön - immer gut das so zu machen! > (d) ein zweiter Test: LEDs einschalten. In dem funktionsfähigen Projekt > von mir ging das über: > #define XPAR_LEDS_8BIT_BASEADDR 0x81400000; > XGpio_mWriteReg(XPAR_LEDS_8BIT_BASEADDR, 0x01, 0xFF); > => LEDs leuchten nicht! > Ich habe mein altes Projekt geladen. Hier funktioniert es. Mir ist > aufgefallen, dass die Basis-Adresse für den GPO1 0x80000010 ist. (eine > andere Adresse ?!) Genau - eine andere Addresse - und deswegen auch NICHT selber ein #define XPAR_*** machen. Das sollte in xparameters.h bereits vorhanden sein (ob der Name stimmt kann ich nicht sagen - aber da sollte es ein Define mit der RICHTIGEN Addresse geben! Einfach mal nach der Suchen dann findest auch das zugehörige Define) > Aus diesem Grund meine oben gestellten Verständnisfragen, ob die > Adressen fest sind. Die Adresse 0x80000010 hatte ich damals aus dem > Dokument > http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/ds865_microblaze_mcs.pdf > (Seite 24) Das Dokument ist für den LogiCORE Microblaze. Bin mir leider nicht sicher aber das ist doch ein spezieller Core der schon gewisse Baugruppen (UART etc.) mit dabei hat... Die Frage ist aber: Nutzt du wirklich den LogiCORE Microblaze oder den "normalen" Wie gesagt: LogiCORE kenn ich nicht bin also nicht sicher ob der Absatz hier grad so richtig ist - bitte korrigieren wenn ich falsch liege ;) > > Das Dokument beschreibt den MicroBlaze. Das Dokument ist ja gültig für > "Virtex 5, Virtex 6 ... Wie gesagt LogiCORE Microblaze! > > => Adresse doch lediglich abhängig von der Konfigurierung (Automatische > Festlegung, wenn ich das Projekt erstelle?!) ? > > Ich versuche momentan ein wenig dahinterzukommen, wie das Ganze > funktioniert. Es ist jedoch bei den vielen Dokumenten von Xilinx schwer > die richtigen (ist ja auch abhängig von der ISE-Version) > herauszufiltern. > Kann ich nur bestätigen, dass der Einstieg nicht einfach ist. Kommt halt daher, dass du auf der einen Seite deine Hardwarebeschreibung selbst konfigurierst und viel falsch machen kannst - und zusätzlich die Software - bei der genausoviel schief gehen kann... Aber das ist alles machbar sobald man mal irgendwann ein bisschen durchgestiegen ist. Ich beschäftige mich selber mit den Embedded sachen im FPGA erst etwa 4 Monate (mit FPGA allgemein auch nur wenig länger..) aber ich kann dich beruhigen - es wird manches leichter - dafür kommmen viele neue Probleme (okok - das war jetzt nicht wirklich beruhigend oder ;) Grüße Tobias
Danke dir. Also bis eben dachte ich, dass ich nur den IPCore "MicoBlaze" in mein VHDL-Projekt als "Blackbox" einbinden muss. Das habe ich auch im ISE-Projekt getan (bis die (bisher noch ungelöste) Frage nach einem Timer/ einer genauen Delay-Funktion auftauchte). Die Vorstellung fand ich eigentlich für meine Bastelzwecke gut. Mit den Adressen ist es klar geworden, danke. Also ist es schwierig nach ein paar Monaten z.B. zu einem bestehenden Projekt (im "Mikrocontroller" eine neue Komponente hinzuzufügen..da das xparameters.h sich ja nicht automatisch anzupassen scheint) C programmieren ist bei mir eigentlich nicht wirklich das Problem. VHDL ebenso wenig. Bemerkung/Überlegung: Später wollte ich eine Ethernet-Schnittstelle oder PCI nutzen, um mit dem PC Daten auszutauschen. Auch deswegen wollte ich mit dem Mikrocontroller experimentieren. (ich weiß, dass das viel viel anspruchsvoller ist, ein Ziel muss jedoch sein ;) )
User schrieb: > Danke dir. Also bis eben dachte ich, dass ich nur den IPCore "MicoBlaze" > in mein VHDL-Projekt als "Blackbox" einbinden muss. Das habe ich auch im > ISE-Projekt getan (bis die (bisher noch ungelöste) Frage nach einem > Timer/ einer genauen Delay-Funktion auftauchte). Die Vorstellung fand > ich eigentlich für meine Bastelzwecke gut. Nunja wenn du den BaseSystemBuilder nimmst und für dein Board (ML605 wars glaube ich?) ein "Standard" Projekt erstellst bindet der automatisch schon einiges an Cores ein. Da sollte dabei sein GPIOs (Taster, LED,...), UART, Memorycontroller (DDR3), Ethernet, ... Prinzipiell kannst du all diese Blöcke als Blackbox ansehen und einfach sagen - ich will eine Funktion also schau ich mal welchen Core ich dafür finde > > Mit den Adressen ist es klar geworden, danke. Also ist es schwierig nach > ein paar Monaten z.B. zu einem bestehenden Projekt (im "Mikrocontroller" > eine neue Komponente hinzuzufügen..da das xparameters.h sich ja nicht > automatisch anzupassen scheint) Nein. Eigentlich kein Problem. Du fügst die Komponente im XPS hinzu und machst ein Export to SDK. Dann aktualisiert er dein Bitfile und automatisch deine Hardwareplatform und dann auch dein BSP wo die xparameters.h drin steckt. Aber immer vorher ne Sicherung machen! > > C programmieren ist bei mir eigentlich nicht wirklich das Problem. VHDL > ebenso wenig. Irgendwie kenn ich diesen Punkt. Und dann kommt da so ein riesiges System bei dem man erstmal die Abläufe verstehen muss und mit seinem bisherigen Wissen nur bedingt was anfangen kann ;) > > > Bemerkung/Überlegung: > Später wollte ich eine Ethernet-Schnittstelle oder PCI nutzen, um mit > dem PC Daten auszutauschen. Auch deswegen wollte ich mit dem > Mikrocontroller experimentieren. (ich weiß, dass das viel viel > anspruchsvoller ist, ein Ziel muss jedoch sein ;) ) Ethernet von der Hardwareseite ist kein großes Problem da das normalerweise für die Entwicklungsboards doch recht gut vorbereitet ist. Softwareseitig ist manches vorbereitet (Treiber). Spätestens wenn du Linux verwendest wird dir durch die Treiber viel abgenommen - wobei Linux auch wieder seine Eigenheiten hat. PCI(e) hab ich leider noch garkeine Erfahrungen gemacht. Grüße Tobias
Also baue Ich quasi mit dem System builder den mikrocontroller nach meinem Bedürfnissen selbst zusammen. Somit wäre dieses ja unausweichlich, wenn Ich in die Zukunft gesehen pci umsetzen mag.
Eher nein. Der Systembuilder nimmt dir ein paar Anfangsaufgaben ab (Einstellungen für deinen Memorycontroller-IP-Core z.B.) Du kannst dir aber jederzeit verschiedene IP-Cores auch selbst zusammenklicken - musst dann aber halt verstanden haben wie. Mein Tipp: Versuche die Vorlage die dir der BSB gibt anzusteuern (dein Timer z.B. läuft) und zu verstehen wie die ganzen IP-Cores (im XPS) konfiguriert werden, an welchen Bussen die hängen usw... Und dann schau mal bissle im IP-Core-Katalog was es noch so gibt - oder füge einfach einen zweiten Timer ein und versuche auch den Anzusteuern. Dadurch kommst du denke ich mit Erfolgserlebnissen recht schnell dahinter wie das alles funktioniert.
Danke. Ich habe meine ich das Problem gefunden (weswegen ich nie defines gefunden habe und der Timer nicht funktionierte). Bei meiner ISE-Version funktioniert es scheinbar nicht richtig, wenn man ein "PLB System" auswählt. Mit dem neueren AXI-System funktioniert alles super: LEDs, DIPs, LCD, UART ... der Timer funktioniert auch! Folgende Zeilen habe ich dafür umgesetzt: #include "platform.h" #include "xparameters.h" #include "xstatus.h" #include "xtmrctr.h" void delay_us(Xuint32 us); XTmrCtr TmrCtrInstancePtr; int main() { init_platform(); // AXI_Timer-Test -------------------------------------------------- Xuint32 status; status = XTmrCtr_Initialize(&TmrCtrInstancePtr, XPAR_AXI_TIMER_0_DEVICE_ID); if (status != XST_SUCCESS) { xil_printf("Timer failed to initialize\r\n"); return XST_FAILURE; } XTmrCtr_SetOptions(&TmrCtrInstancePtr, 1, XTC_DOWN_COUNT_OPTION); while(1) //Test, zur Überprüfung auf Oszi. { XGpio_mWriteReg(XPAR_GPIO_1_BASEADDR, 0, 0b00000000); delay_us(time); XGpio_mWriteReg(XPAR_GPIO_1_BASEADDR, 0, 0b00000001); delay_us(time); } return 0; } void delay_us(Xuint32 us) { XTmrCtr_SetResetValue(&TmrCtrInstancePtr, 1, us * XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ/1000000); XTmrCtr_Start(&TmrCtrInstancePtr, 1); while(!(XTmrCtr_IsExpired(&TmrCtrInstancePtr, 1))){} XTmrCtr_Stop(&TmrCtrInstancePtr, 1); } Ich muss jetzt nur noch einen Korrekturwert von "us * XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ/1000000" abziehen, um an Genauigkeit zu gewinnen. Die Ungenauigkeit kommt meiner Meinung nach aus der delay-us-Funktion selbst. Die Operationen XTmrCtr_SetResetValue() usw. benötigen ja auch ein paar Takte. Auf 1 us genau kann ich somit bei 50 MHz Takt (20 ns) nicht kommen. (Übergebe ich den Wert 1 an die Funktion delay_us(), dann messe ich am Oszi. eine Pulsbreite von 13,2 us. Damit suche ich einen konstanten Korrekturwert, richtig? Um auf 1 us und niedriger zu kommen, muss ich demnach entweder die Taktfrequenz erhöhen, oder doch die alte delay-Funktion mit „nop“ nehmen. Danke für die wertvollen Tipps.
Tobis du schriebst: " > Mit den Adressen ist es klar geworden, danke. Also ist es schwierig nach > ein paar Monaten z.B. zu einem bestehenden Projekt (im "Mikrocontroller" > eine neue Komponente hinzuzufügen..da das xparameters.h sich ja nicht > automatisch anzupassen scheint) Nein. Eigentlich kein Problem. Du fügst die Komponente im XPS hinzu und machst ein Export to SDK. Dann aktualisiert er dein Bitfile und automatisch deine Hardwareplatform und dann auch dein BSP wo die xparameters.h drin steckt. Aber immer vorher ne Sicherung machen!" Ich habe nun den Takt, mit welchem der virtuelle MicroBlaze arbeitet, in EDK geändert. Wie schaffe ich es, dass diese Änderung in die Konstante XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ im xparameters.h File automatisch übernommen wird? Finde keinen Knopf zum erneuern des sdk-projektes. Kann es natürlich per Hand nachtragen, wenns automatisch ginge fände ich es schöner.
Welche Version von ISE Nutzt du eigentlich? Weil die Probleme die du teils hast kommen mir spanisch vor... > Ich habe nun den Takt, mit welchem der virtuelle MicroBlaze arbeitet, in > EDK geändert. Wie genau? Vermutlich im Clockmanagement Core die Frequenzeinstellung geändert oder? Wenn ja sollte das passen. > Wie schaffe ich es, dass diese Änderung in die Konstante > XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ im xparameters.h File automatisch > übernommen wird? Finde keinen Knopf zum erneuern des sdk-projektes. Sind denn die Frequenz vom Microblaze und die vom Timer die gleichen? Meistens ist das so - aber das ist ja nicht zwingend. Nur der Bustakt ist zwingend gleich... Wenn das überprüft ist musst du die Hardware neu erzeugen, d.h. ein neues Bitfile erstellen. Und (sofern du in einer halbwegs aktuellen ISE Version arbeitest) dann einfach ein "Export to SDK" machen. Dann sollte er die Header-Files erneuern. > > Kann es natürlich per Hand nachtragen, wenns automatisch ginge fände ich > es schöner. Auf keinen Fall per Hand machen! Die Xilinx-Files solltest eher nicht anfassen da die so wie ich das verstehe bei besagtem "Export to SDK" überschrieben/aktualisiert werden. Da ich aber im Moment die Programme nicht hier hab kann ich das leider nicht testen. Falls das alles aber nicht tun sollte (was mich wundern würde) - einfach mal das BSP löschen und neu anlegen - spätestens dann sollten die aktuellen Daten drinstehen.
Danke Tobias. CLK Einstellung wird im xparameters.h übernommen. Hatte mich nur verklickt. Ich habe über den System Builder einmal ein Projekt wie beschrieben erstellt. Funktioniert auch super. Habe die LEDs auf dem Entwicklungsboard angesteuert. Die hängen ja an einem AIX GPIO. Nun wollte ich z.B. ein paar Pins ansteuern. Die möchte ich an einen anderen GPIO betreiben. Also führe ich "Schritt 1" aus. Der GPIO_1 und GPIO_2 usw. sind nun hinzugefügt. Ich habe nun die Pins (die ich ins ucf-File eingetragen habe zugewiesen) (Schritt 3). Ich verstehe nicht, wieso ich einmal GPIO_IO_O und einmal GPIO_IO habe. (rot umrandet). Setze ich die beiden auf GPIO_IO_O erscheint folgende Fehlermeldung: EDK:4074 - INSTANCE: GPIO_2, PORT: GPIO_IO, CONNECTOR: GPIO_2_GPIO_IO - No driver found ... ERROR:EDK:440 - platgen failed with errors! Wenn ich sie alle unterschiedlich setze, dann funktioniert es mit der Ansteuerung. Kann mich jemand aufklären? Ich habe wahrscheinlich das Konzept falsch verstanden ?!
@User Hier ein Hint von Silica Avnet ! ###################################################################### Xilinx EDK Tutorial - Adding custom IP to an EDK Project - Part 2 https://www.youtube.com/watch?v=WYOQpqlEY94&feature=player_detailpage ### Topic: custom IP Priperal I/0 also anlegen, export und import via EDK Tools usw... 3 Tutorials Play-List https://www.youtube.com/watch?v=MC1amstP_8A&list=PL6BCB2A81CBD665C5 ###################################################################### Gruss Holger. Anhang: EDK_SLAVE_REG_1.PNG ---------------------------------
Danke dir. Das scheint mir alles sehr kompliziert. Ich meine um ein LCD, acht LEDs und vielleicht noch weitere acht LEDs an den mikrocontroller anzuschließen. Mit kompliziert meine ich, dass irgendwie viel Vhdl Code erzeugt wird. Das Projekt wird sehr groß und unübersichtlich in meiner Augen. Damals, als ich nur den microblaze ip Core eingebunden habe (LCD, LED, switches ...) war die Main.vhd übersichtlich. Ich hatte im UCI file meine Peripherie, die in an den mikrocontroller über Signal angeschlossen habe. Beim Konzept mit dem systembuilder erscheint mir alles unklar. Wieso soll ich mir einen neuen Custom Pi erstellen und darf nicht einfach einen Gpio hinzufügen (ich meine der vom Programm selbst erstellte LED Bus war auch von der Sorte)? Kannst du mich vielleicht aufklären ;) Danke
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.