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


von Andi M. (lesockz)


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

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


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é

von Andi M. (lesockz)


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

von Steuerbert (Gast)


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

von Andi M. (lesockz)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
void ProgramFPGA(void)
2
{
3
   unsigned char *xsvf_data_start;
4
5
   if( (xsvf_data_start = (unsigned char *)malloc(999999)) == NULL ) {  
6
      wprintf(_T(". \nZu wenig Speicher. \nProgrammierung beendet.\n"));
7
      *jtagport = 0x0120;
8
      return;
9
   }
10
   xsvf_data = xsvf_data_start;
11
  
12
   int bytes=fread(xsvf_data, sizeof(char), 999999, Progfile);
13
   // Enable JTAG-Programmierport
14
   *jtagport = 0x0020;
15
16
   // Cpld programmieren
17
   int iErrorCode  = XSVF_ERROR_NONE;
18
   iErrorCode  = xsvfExecute();
19
20
   // Speicher aufraeumen
21
   free(xsvf_data_start);
22
23
   // Tristate JTAG-Port
24
   *jtagport = 0x0120;
25
   if(CmdlineMode) wprintf(_T("\nProgrammierung erfolgreich beendet.\n"));
26
}
Aber ich kann hier mit dem Speicher auch locker um mich schmeissen 
(malloc), denn das Ganze läuft auf einer PC-Plattform... ;-)

von Andi M. (lesockz)


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

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.