Forum: FPGA, VHDL & Co. EDK device_id


von Thomas (Gast)


Angehängte Dateien:

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 ! ! !

von A. M. (am85)


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
}

von Thomas (Gast)


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

von A. M. (am85)


Lesenswert?

Wenn du ganz neu an die Sache rangehst, dann ist das normal, dass es 
etwas dauert. Man muss da erstmal grundsätzliches verstanden haben, dann 
gehts irgendwann viel leichter.

von Thomas (Gast)


Lesenswert?

Aja, ich habe den Processor in Xilinx EDK gebaut.

von A. M. (am85)


Lesenswert?

Thomas schrieb:
> Aja, ich habe den Processor in Xilinx EDK gebaut.

Meinst du den Microblaze oder den Core, der die LED ansteuert?

von Thomas (Gast)


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

von Thomas (Gast)


Lesenswert?

Das .c File in Microblaze soll die Leds ansteuern. In meiner ISE ist der 
Microblaze direkt mit den Ausgängen verbunden. Dort sollen in späterer 
Folge FPGA Blöcke rein.

von A. M. (am85)


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.

von Thomas (Gast)


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.

von A. M. (am85)


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.

von Thomas (Gast)


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.

von A. M. (am85)


Lesenswert?

Thomas schrieb:
> Ich habe gestern noch einmal einen Prozessor erstellt.

Bist du dem Beispiel von meinem Link gefolgt? Wenn ja, dann wäre das 
seltsam, denn bei mir hat es super geklappt.

von Thomas (Gast)


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

von A. M. (am85)


Lesenswert?

Bitte bitte...prima, dass es jetzt läuft.

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.