mikrocontroller.net

Forum: FPGA, VHDL & Co. EDK device_id


Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.
#include "stdio.h"
#include "xgpio.h"
#include "xparameters.h"

#define LED_ID   XPAR_LED_DEVICE_ID 

int main(void)
{
XGpio led;

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

  while(1) 
  {
  XGpio_DiscreteWrite(&led, 1, 0xAF);
  }
return (0);
}

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

/* Definitions for driver GPIO */
#define XPAR_XGPIO_NUM_INSTANCES 1

/* Definitions for peripheral LED */
#define XPAR_LED_BASEADDR 0x00000000
#define XPAR_LED_HIGHADDR 0x0000FFFF
#define XPAR_LED_DEVICE_ID 0
#define XPAR_LED_INTERRUPT_PRESENT 0
#define XPAR_LED_IS_DUAL 0

D A N K E ! ! !

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include "xparameters.h"
#include "xstatus.h"
#include "xgpio_l.h"
#include "sleep.h"

#define LED_DEVICE_ID            XPAR_LEDS_8BIT_DEVICE_ID
#define LED_BASEADDR          XPAR_LEDS_8BIT_BASEADDR
#define LED_CHANNEL      1
#define LED_IO_BIT_MASK      0
#define LED_BIT_MASK      0x0A
#define LED_DELAY        250000000

int main(void)
{
  unsigned int Delay, i;
  
  XGpio_mSetDataDirection(LED_BASEADDR,LED_CHANNEL,LED_IO_BIT_MASK);
  
  while(1)
  {
    for(i = 0; i < 1024; i++)
    {
      XGpio_mSetDataReg(LED_BASEADDR,LED_CHANNEL,i);
      usleep(250000);
    }
  }
  
  return XST_SUCCESS;
}

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aja, ich habe den Processor in Xilinx EDK gebaut.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Aja, ich habe den Processor in Xilinx EDK gebaut.

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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab Deine Befehle eingearbeitet. Meine Led´s sind immer noch dunkel.
 
#include "stdio.h"
#include <xgpio.h>
#include <xparameters.h>

//#define LED_ID   XPAR_LED_DEVICE_ID 

int main(void)
{
//XGpio led;

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

  while(1) 
  {
  XGpio_mSetDataReg(XPAR_LED_BASEADDR,1,0x6F);
  //XGpio_DiscreteWrite(&led, 1, 0xAF);
  }
return (0);
}

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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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-periph...

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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte bitte...prima, dass es jetzt läuft.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.