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
intmain(void)
8
{
9
XGpioled;
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
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.
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
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.
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
intmain(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
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.
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.htmlThomas 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.
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.
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.
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.
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.
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