mikrocontroller.net

Forum: FPGA, VHDL & Co. Probleme mit IP-Core an Microblaze


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe hier auf einem Virtex-II (XUP) einen Microblaze laufen, der 
auch soweit funktioniert. Ebenso habe ich bereits über Xilinx EDK einen 
IP-Block eingebunden der mir fest generierte (im VHDL-Code vorgegeben) 
Ausgaben liefert - funktioniert auch tadellos. Probleme habe ich 
allerdings bei der Übergabe von Daten aus dem C-Programm.

Der IP-Block (regtest) ist die einfachste Variante (ohne MIR, FIFOs, DMA 
etc.) als Slave und soll schlichtweg die aufgenommenen Daten speichern 
und auf Wunsch wieder ausgeben. Hierzu habe ich eine FSM mit drei States 
implementiert: Idle, Lesen, Schreiben. Der Code dazu findet sich im 
Anhang. Funktioniert im ModelSim als ISE-Projekt ohne Probleme.

Der C-Code für den Microblaze sieht so aus:
#include "xparameters.h"
#include "xbasic_types.h"
#include "xstatus.h"
#include "regtest.h"

int delay = 1000000, j;

void wait(int sleep)
{
  j = 0;
  while(j < sleep) j++;
}

int main(void)
{
  Xuint32 baseaddr;
  Xuint32 data;
  
  baseaddr = XPAR_REGTEST_0_BASEADDR;

  data = 123;
  REGTEST_mWriteReg(baseaddr, 0, data);
  xil_printf("input: 0x%08x\r\n", data);
  
  wait(delay);

  data = REGTEST_mReadReg(baseaddr, 0);
  xil_printf("output: 0x%08x\r\n", data);
}


Es soll also einfach "123" an den IP-Block geschrieben werden, der 
entsprechend speichert und beim Read-Request das gleiche wieder 
zurückgibt. Das ganze läuft über RS232. Als Ergebnis bekomme ich aber 
leider nur 0 zurück. Der FSM würde ich einfach mal unterstellen, dass 
sie korrekt ist - liegt das Problem am C-Code?

Wäre um jede Hilfe sehr dankbar!

Grüße,
Patrick

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du chipscope zur Verfügung? Oder kannst Du per LEDs o.ä. ermitteln, 
ob Deine Daten bis zum IP-Core kommen?

Rick

Autor: Tobias Krannich (tobias123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hast Du ein Tutorial von Xilinx gefunden, in dem Beschrieben wird, wie 
man einen eigenen IP-Core entwickelt und über den (GPIO)Bus an dem 
MicroBlaze anschließt?
Möchte gern einen Signalgenerator (später dds [direct-digital-synthesis] 
für Quadraturdemodulation) in Hardware (VHDL) an den Microblaze 
anschließen, der diesen Steuerbefehle (Frequenz, Amplitude, ...) 
schicken kann.

Gruß Tobias

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tobias:
Ich würde das nicht über GPIO machen, sonderen die Register in den 
Speicher mappen. Da braucht man dann in der Software keine Verrenkungen 
zu machen.

Duke

Autor: sdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
j würde ich nicht global sondern local in wait deklarieren.

Braucht der UART nicht Interrupts? sind diese enabled?

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.