www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Programmierung eines FPGA über JTAG per uC


Autor: Andi M. (lesockz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche einen FPGA über JTAG zu programmieren, dafür verwende ich 
das von Xilinx zur Verfügung gestellte XAPP058.

Leider verstehe ich anhand des Quelltextes nicht wie ich die xsvf Datei 
an die xsvfExecute Routine übergeben kann.

In der MainRoutine wird eine XSVF Datei aus einem Dateisytem geöffnet. 
Ich würde nun gerne einfach den Binärcode als Array anlegen und den 
Pointer darauf übergeben. (da ist mir auch soweit klar wie ich es machen 
kann)

Ich sehe in dem Quelltext keinen Pointer der den Inhalt der xsvf 
weitergibt.

Gruß Andi

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt ein gutes Programm zum Programmieren für Xilinx Bausteine.

xc3sprog von Uwe Bonnes

Es nutzt nicht das xsvf Format sondern das  bit Format.

Wenn du umbedingt xsvf nutzen willst, dann schaue dich bei openocd um. 
Da gibt es eine Implementierung für xsvf und svf.

René

Autor: Andi M. (lesockz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ich dies im Zusammenhang einer Bachelor Arbeit brauche muss ich das 
XSVF Format verwenden und würde mich daher über ein paar hilfreiche 
Tipps zum anwenden der Application Note freuen

aber danke schonmal für die links da werd ich auch mal schauen

Autor: Steuerbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi M. schrieb:
> da ich dies im Zusammenhang einer Bachelor Arbeit brauche muss ich das
> XSVF Format verwenden und würde mich daher über ein paar hilfreiche
> Tipps zum anwenden der Application Note freuen
>
> aber danke schonmal für die links da werd ich auch mal schauen

Von Xilinx gibts den XSVF-Player als Source-Code ... Man muss nur noch 
die Funktionen (über)schreiben, die physikalisch auf die JTAG-Pins 
zugreifen.

Ich glaub, das war sogar XAPP058.

Ich hab den XSVF-Player verwendet, um ein Konfigurationsprom eines 
Spartan 2 über eine PCI9030 PCI-Bridge zu flashen und das funktionierte 
wunderbar ...

Deine Fragestellung ist irgendwie unklar ... ich würde dich daher 
bitten, deine Frage nochmal neu und verständlich zu formulieren. Es ist 
nicht verständlich, wo du genau Probleme hast ...

Grüße,
Steuerbert

Autor: Andi M. (lesockz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay dann versuch ich es mal andersherum

dass ich die ports anders ansprechen muss habe ich verstanden und dies 
auch schon an den von mir verwendeten uC angepasst also die aufrufe in 
der port.c datei.

in der datei micro.c wir mit fopen die xsvf datei geöffnet

da ich aber einen uC benutze steht in der beschreibung der Main 
Funktion, dass ich direkt xsvfExecute() aufrufen soll das verstehe ich 
auch noch

was ich jetzt nicht verstehe ist, woher der uC wissen soll was er per 
JTAG programmieren soll, da ich die stelle nicht finde an der z.B. ein 
Pointer auf den Inhalt der XSVF datei (oder ein array mit deren Inhalt) 
zeigt.

hoffe es wird jetzt was klarer wo es bei mir hängt :)

gruß andi

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi M. schrieb:
> oder ein array mit deren Inhalt
Das mußt du anlegen und übergibst dem globalen Pointer xsvf_data die 
Anfangsadresse. Ich habe das so gemacht:
void ProgramFPGA(void)
{
   unsigned char *xsvf_data_start;

   if( (xsvf_data_start = (unsigned char *)malloc(999999)) == NULL ) {  
      wprintf(_T(". \nZu wenig Speicher. \nProgrammierung beendet.\n"));
      *jtagport = 0x0120;
      return;
   }
   xsvf_data = xsvf_data_start;
  
   int bytes=fread(xsvf_data, sizeof(char), 999999, Progfile);
   // Enable JTAG-Programmierport
   *jtagport = 0x0020;

   // Cpld programmieren
   int iErrorCode  = XSVF_ERROR_NONE;
   iErrorCode  = xsvfExecute();

   // Speicher aufraeumen
   free(xsvf_data_start);

   // Tristate JTAG-Port
   *jtagport = 0x0120;
   if(CmdlineMode) wprintf(_T("\nProgrammierung erfolgreich beendet.\n"));
}
Aber ich kann hier mit dem Speicher auch locker um mich schmeissen 
(malloc), denn das Ganze läuft auf einer PC-Plattform... ;-)

Autor: Andi M. (lesockz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super dankeschön genau das hab ich gesucht

nur irgendwann sieht man vor lauter quelltext nichts mehr :) sonst hätte 
ich das ja nicht übersehen können

hab erstmal ne kleine test datei damit sollte ich mit dem vorhandenen 
speicher auskommen für das eigentliche projekt muss ich mir dann was 
überlegen wie ich das auslesen stückschenweise mache

aber erstmal schau ich mir jetzt genau an wie die das machen

gruß andi

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.