EDK device_id

Gast #1787112
Lesenswert?
• ▲
▼
Liebe Kollegen!

Ich möchte gerne einen Soft Core in meinen FPGA spielen. Der Microblaze 
ist fertig und kann auch in den FPGA geschrieben werden (zumindest lässt 
sich ein Bitstream mit Software erstellen). Leider habe ich Probleme mit 
der Software. Mein Programm sieht wie folgend aus.
1
#include "stdio.h"
2
#include "xgpio.h"
3
#include "xparameters.h"
4

5
#define LED_ID   XPAR_LED_DEVICE_ID 
6

7
int main(void)
8
{
9
XGpio led;
10

11
XGpio_Initialize(&led, LED_ID);
12
XGpio_SetDataDirection(&led,1,0); //Set LEDS as output ports
13

14
  while(1) 
15
  {
16
  XGpio_DiscreteWrite(&led, 1, 0xAF);
17
  }
18
return (0);
19
}

Das Processor Design ist im angehängten Bild.

Wenn ich die Software "bauen" will kommen folgende Fehlermeldungen:

/cygdrive/c/Nexys_EDK_Test/test_processor/TestApp_Peripheral_microblaze_ 
0/src/TestApp_Peripheral.c:  In function 'main':

/cygdrive/c/Nexys_EDK_Test/test_processor/TestApp_Peripheral_microblaze_ 
0/src/TestApp_Peripheral.c:69:  error: 'XPAR_LEDS_DEVICE_ID' undeclared 
(first use in this function)

/cygdrive/c/Nexys_EDK_Test/test_processor/TestApp_Peripheral_microblaze_ 
0/src/TestApp_Peripheral.c:69:  error: (Each undeclared identifier is 
reported only once

/cygdrive/c/Nexys_EDK_Test/test_processor/TestApp_Peripheral_microblaze_ 
0/src/TestApp_Peripheral.c:69:  error: for each function it appears in.)
make: *** [TestApp_Peripheral_microblaze_0/executable.elf] Error 1

Kann mir jemand sagen was ich falsch mache!?

In xparameters.h steht folgendes
1
/* Definitions for driver GPIO */
2
#define XPAR_XGPIO_NUM_INSTANCES 1
3

4
/* Definitions for peripheral LED */
5
#define XPAR_LED_BASEADDR 0x00000000
6
#define XPAR_LED_HIGHADDR 0x0000FFFF
7
#define XPAR_LED_DEVICE_ID 0
8
#define XPAR_LED_INTERRUPT_PRESENT 0
9
#define XPAR_LED_IS_DUAL 0

D A N K E ! ! !
Angehängte Dateien:
#1787297
Lesenswert?
• ▲
▼
Hast du die Ansteuerung der LED in VHDL/Verilog selber geschrieben oder 
ist es ein Core, wie die Bezeichnung mit xpar es schon andeutet, von 
Xilinx?

Grundsätzlich hast du da ein Problem mit den Makros. XPAR_LED_DEVICE_ID 
bezeichnet nur den GPIO Kanal. Willst du die/das Register für die LED 
beschreiben, musst du das über die Baseadresse machen. Hier mal ein 
kleines, funktionierendes Beispiel, damit du dir ein Bild machen kannst.
1
#include "xparameters.h"
2
#include "xstatus.h"
3
#include "xgpio_l.h"
4
#include "sleep.h"
5

6
#define LED_DEVICE_ID            XPAR_LEDS_8BIT_DEVICE_ID
7
#define LED_BASEADDR          XPAR_LEDS_8BIT_BASEADDR
8
#define LED_CHANNEL      1
9
#define LED_IO_BIT_MASK      0
10
#define LED_BIT_MASK      0x0A
11
#define LED_DELAY        250000000
12

13
int main(void)
14
{
15
  unsigned int Delay, i;
16
  
17
  XGpio_mSetDataDirection(LED_BASEADDR,LED_CHANNEL,LED_IO_BIT_MASK);
18
  
19
  while(1)
20
  {
21
    for(i = 0; i < 1024; i++)
22
    {
23
      XGpio_mSetDataReg(LED_BASEADDR,LED_CHANNEL,i);
24
      usleep(250000);
25
    }
26
  }
27
  
28
  return XST_SUCCESS;
29
}
Gast #1787328
Lesenswert?
• ▲
▼
Danke für die Antwort. Das mit der device_id hat sich inzwischen 
geklärt. Code funktioniert immer noch nicht. Ich versuche Dein BSP auf 
mein Board zu bekommen.

Irgendwie komme ich mit dem Prozessor nicht zurecht. Ich schaffe es 
nicht mal ein paar Leds leuchten zu lassen.

LG
Thomas
Gast #1787347
Lesenswert?
• ▲
▼
Hab Deine Befehle eingearbeitet. Meine Led´s sind immer noch dunkel.
1
 
2
#include "stdio.h"
3
#include <xgpio.h>
4
#include <xparameters.h>
5

6
//#define LED_ID   XPAR_LED_DEVICE_ID 
7

8
int main(void)
9
{
10
//XGpio led;
11

12
//XGpio_Initialize(&led, LED_ID);
13
XGpio_mSetDataDirection(XPAR_LED_BASEADDR,1,0); //Set LEDS as output ports
14

15
  while(1) 
16
  {
17
  XGpio_mSetDataReg(XPAR_LED_BASEADDR,1,0x6F);
18
  //XGpio_DiscreteWrite(&led, 1, 0xAF);
19
  }
20
return (0);
21
}

Ich hab ein Musterbeispiel aus dem Netz von einer Laborübung. Wenn ich 
das 1 zu 1 bei mir eingebe (auch nur LED´s) geht auch nichts. Kann es 
sein, dass ich einen Fehler mit dem Speicher BRAM oder dgl. gemacht 
habe?

Werde noch einmal das Design durchgehen. Vielleicht finde ich noch was.

LG
Thomas
#1787402
Lesenswert?
• ▲
▼
Es ist wichtig erstmal ganz kleine Brötchen zu backen, da das Thema FPGA 
eine nicht ganz so simple Geschichte ist. Klappt denn ein simples "Hallo 
World" auf der Standardausgabe? Vielleicht hilft dir ja dieser Link 
etwas weiter: 
http://www.fpgadeveloper.com/2008/10/create-peripheral-using-peripheral.html

Thomas schrieb:
> Kann es
> sein, dass ich einen Fehler mit dem Speicher BRAM oder dgl. gemacht
> habe?

Was solltest du da falsch gemacht haben? Wenn beim Laden deines C Codes 
keine Fehlermeldungen kamen, dass der Code zu groß für den BRAM sei, 
sollte es passen.

Thomas schrieb:
> Das .c File in Microblaze soll die Leds ansteuern.

Das beantwortet aber noch nicht meine Frage, ob du in VHDL/Verilog 
deinen eigenen Code geschrieben hast, um die LED anzusteuern, oder ob du 
den von Xilinx genommen hast? Du musst ja auch noch die LED mit dem FPGA 
"verdrahten", sonst passiert da nicht viel.
Gast #1787410
Lesenswert?
• ▲
▼
Sorry, hab ich falsch verstanden. Ich habe selber das TOP VHDL File 
geschrieben. Besteht momentan nur aus dem .vhd und dem Processor. Im 
.vhd werden die Ein-/Ausgänge direkt mit der Peripherie (clk, Leds,...) 
verbunden.

Ist wirklich ein .vhd und nicht eines von einem Schematic-File 
generiertes. Die Schematics mögen meine selber erstellten types nicht.
#1787418
Lesenswert?
• ▲
▼
Möglich, dass etwas in deinem VHDL Code schief gelaufen ist. Auch, wenn 
die Simulation vielleicht funktioniert haben mag, kann es ja immer noch 
sein, dass die verdrahtung nicht richtig ist. Wie gesagt, guck dir mal 
den Link aus meinem letzten Posting an. Der könnte dir eine Idee geben 
und du könntest dein Vorgehen mal vergleichen bzw. einfach gucken, ob 
du, wenn du der Anleitung mal komplett folgst, zu einem funktionierenden 
Ergebnis kommst.
Gast #1788175
Lesenswert?
• ▲
▼
Ich habe gestern noch einmal einen Prozessor erstellt. Wenn ich das 
Musterprogramm Memory Check laufen lasse bekomme ich eine positive 
Antwort über die RS232. Beim Peripheral Test tut sich nichts. Die LED´s 
bleiben weiterhin dunkel und lachen mich aus.
Gast #1788210
Lesenswert?
• ▲
▼
Ja, bin Deinem Beispiel gefolgt.

Hab gerade noch einen Test gestartet. Jetzt geht alles. Keine Ahnung was 
nicht gestimmt hat. Ich hab so lange herumgedoktert, dass ich nicht mehr 
weis was ich alles probiert habe.

Danke für Deine Hilfe. Warst eine tolle Unterstützung!!!

LG
Thomas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren