Forum: FPGA, VHDL & Co. Theorie: Xilinx selbstbau JTAG Programmer


von sebihepp (Gast)


Lesenswert?

Hallo,

ich habe mich jetzt schon lange Zeit mit CPLDs und FPGAs beschäftigt. 
Mich störte dabei immer, dass die Programmer sehr teuer sind. 200 Euro 
für das Platform USB Cable von Xilinx sind mir definitiv zu viel. Und 
dann braucht man auch noch einen entsprechenden Konfigurations 
Speicher... Ich will aber einen eigenen Flashbaustein und einen 
Mikrocontroller benutzen: Für ein Embedded Design. Und ich will ein 
eigenes Board entwickeln. Also scheiden die fertigen Lösungen schonmal 
aus.

Jetzt habe ich gelesen, dass sich mit Xilinx Impact aus den Projekten 
sogennante "Serial Vector Format" Dateien erzeugen lassen. Dazu gibt es 
auch eine Dokumentation von Xilinx.

Nun meine Idee: Ich könnte einen Mikrocontroller auf der einen Seite mit 
einer seriellen Schnittstelle ausstatten, vielleicht noch USB, und auf 
der anderen Seite eine JTAG Schnittstelle per Software implementieren. 
Am besten noch mit verschiedenen Spannungspegeln für die verschiedenen 
Bausteine. Auf den Mikrocontroller schreibe ich dann einfach einen SVF 
Interpreter. Dann muss man nur noch die Datei über RS232 oder USB 
schicken und schon wird der FPGA oder CPLD über JTAG programmiert. Und 
für ein Embedded Design wird der Mikrocontroller mit Schnitstelle 
einfach auf das FPGA Board integriert und kann dort auf einem 
zusätzlichen Flash die Konfiguration zwischenspeichern und jederzeit 
abrufen.

Jetzt meine Frage: Mache ich irgendeinen Denkfehler? Natürlich lässt 
sich so ein SVF Interpreter nicht so einfach schreiben. Das ist schon 
eine menge Arbeit wenn es fehlerfrei laufen soll. Außerdem muss der 
Mikrocontroller mit den verschiedenen Spannungen zurecht kommen. Aber am 
Ende hätte man ein JTAG Programmer für CPLDs und FPGAs für den Preis des 
Mikrocontrollers und dessen Peripherie... wenn man von den Stunden fürs 
Programmieren absieht. =)

Schreibt doch mal, was Ihr davon haltet.

Viele Grüße
Sebihepp

von Uli (Gast)


Lesenswert?

Hallo,

in der CT' hatten die mal FPGA Board welches über einen AVR ATmega und 
einer SD Karte geladen wurde. Evt. ist das ja was für dich.

Gruss
Ulrich Radig

von Uli (Gast)


Lesenswert?

Hier noch der Link zum Artikel 
http://www.heise.de/kiosk/archiv/ct/2008/16/186

von P.S. (Gast)


Lesenswert?


von hp-freund (Gast)


Lesenswert?


von sebihepp (Gast)


Lesenswert?

Danke erstmal für alle Antworten.

Der c't Artikel ist sehr interessant.

Von OpenOCD habe ich auch schon viel gehört. Aber soweit ich weis ist 
das "nur" die Software. Kann ich also mit z.B. USBprog und OpenOCD 
sowohl Xilinx CPLDs und FPGAs als auch ein Configuration Flash über JTAG 
programmieren? Das fände ich die einfachste Lösung. USBprog ist recht 
günstig, OpenOCD wird von Windows und Linux unterstützt und für Embedded 
Designs kann ich einfach solche Xilinx Flash Bausteine verwenden. Wie 
sieht das mit den Spannungspegeln aus?

Letzteres ist zwar sehr interessant, aber damit werden die FPGAs über 
den SlaveMode Programmiert. Also könnte man keine CPLDs programmieren. 
Außerdem benutze ich PICs. (Bitte keine Diskussion AVR/PIC)

Viele Grüße
Sebihepp

von hp-freund (Gast)


Lesenswert?

Hast Du dir mal die XAPP058 von Xilinx angesehen?
Sonst such mal bei Xilinx nach: microcontroller jtag

von sebihepp (Gast)


Lesenswert?

>Hast Du dir mal die XAPP058 von Xilinx angesehen?
Jep, daher habe ich ja die Idee einen Mikrocontroller als SVF 
Interpreter zu benutzen.

von Seppel (Gast)


Lesenswert?

Einfach mal bei ebay in der Suche "fpga" eintippen. Da gibt es einige 
sehr günstige Angebote aus China. Viel Altera, aber auch Xilinx. Einfach 
mal blättern. Habe ich auch gekauft, kam nach 3 Wochen Lieferzeit gut 
verpackt aus Hong-Kong an. Funktioniert bestens.

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


Lesenswert?

sebihepp schrieb:
> Aber am Ende hätte man ein JTAG Programmer für CPLDs und FPGAs für den
> Preis des Mikrocontrollers und dessen Peripherie...
Und gratis dazu eine recht umständliche und fehlerträchtige Generierung 
der SVF-Datei, incl. der Übertragung...

Als Spartipp: kauf dir für 10 Euro eine LPT-Steckkarte und für 3 Euro 
die Teile für das Parallel-Cable III...
Siehe auch den Beitrag "Re: Einstieg in programmierbare Logik"

Oder sieh dir das fertige Kabel von Digilent (Trenz) mal an. Da bist du 
weit weg von 200 Euro und nah dran an "selber machen lohnt sich nicht".

>>Hast Du dir mal die XAPP058 von Xilinx angesehen?
> Jep, daher habe ich ja die Idee einen Mikrocontroller als SVF
> Interpreter zu benutzen.
Das mache ich auch für den Feld-Einsatz (damit sich so ein FPGA sein 
PROM "selber" umprogrammieren kann), aber für den Schreibtisch und das 
Labor wäre mir da viel zu umständlich.

von Christian R. (supachris)


Lesenswert?

Damit sich der FPGA selbst neu programmieren kann, nimmt man SPI oder 
BPI Flash. Der lässt sich dann auch indirekt über JTAG erstmalig 
programmieren, danach über das FPGA Design an sich.

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


Lesenswert?

Christian R. schrieb:
> Damit sich der FPGA selbst neu programmieren kann, nimmt man SPI oder
> BPI Flash. Der lässt sich dann auch indirekt über JTAG erstmalig
> programmieren, danach über das FPGA Design an sich.
Ja, in neueren Designs...  ;-)
Das Ganze ist auch eher ein Abfallprodukt, ursprünglich wurden über 
diese Schnittstelle CPLDs in dem System umprogrammiert. Und weil damit 
der JTAG-SVF-Player schon da war, wird jetzt eben auch noch das 
Config-PROM des FPGAs über die selbe Schnittstelle umprogrammiert.

von Andreas W. (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite


Lesenswert?

Hier gibt's einen XSVF-Player auf FT2232 Basis:
http://embdev.net/topic/139121#new

von sebihepp (Gast)


Lesenswert?

>Als Spartipp: kauf dir für 10 Euro eine LPT-Steckkarte und für 3 Euro
>die Teile für das Parallel-Cable III...
>Siehe auch den Beitrag "Re: Einstieg in programmierbare Logik"
Soweit ich weis, wird das Parallelkabel nicht mehr unterstützt. Sonst 
würde ich mir das nachbauen.

Nochmal zum USBprog und OpenOCD: Kann ich nun damit alle Xilinx Devices 
programmieren, oder nicht?

>Oder sieh dir das fertige Kabel von Digilent (Trenz) mal an. Da bist du
>weit weg von 200 Euro und nah dran an "selber machen lohnt sich nicht".
Zuletzt würde ich wohl diese Möglichkeit wählen. Das sind stolze 80 Euro 
als Student.

>Hier gibt's einen XSVF-Player auf FT2232 Basis:
>http://embdev.net/topic/139121#new
Auch eine schöne Idee, aber da steht nichts von CPLDs, sondern nur die 
Spartan 3 A Serie.

von Uwe Bonnes (Gast)


Lesenswert?

Wenn Du eine FT2232 hast, kannst Du zur direkten JTAG Programmierung von 
Xilinx Bausteinen auch xc3sprog von
svn co https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog xc3sprog
verwenden.

von sebihepp (Gast)


Lesenswert?

>Wenn Du eine FT2232 hast, kannst Du zur direkten JTAG Programmierung von
>Xilinx Bausteinen auch xc3sprog von
>svn co https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog xc3sprog
>verwenden.

Funktioniert das garantiert mit allen Xilinx Bausteinen? Dann würde ich 
mir so einen selber bauen.

von Uwe Bonnes (Gast)


Lesenswert?

Garantiert funktioniert garnichts...
Aber die Bausteine, mit denen ich arbeite (XC95XL,  XC3S und XC6s) 
versuche ich im code aktuell zu halten. Und jemand hat auch schon mit 
XC5V gearbeitet und Patches beigetrage.

von Dimi (Gast)


Lesenswert?

Noch einfacher geht es über "Slave Serial".
Wenn man z.B. ChipScope usw. mit einem JTAG-(SVF)-Player sowieso nicht 
benutzen kann, dann hat JTAG auch keine richtige Vorteile in dem Fall.
In meinem Projekt benutze ich einen PIC24, der über USB und von der 
SD-Karte meinen Spartan3-400 in 3 sek. (Slave Serial) konfiguriert.
Man kann z.B. mit einen PIC18F2550 sehr günstigen und schnellen 
USB-Programmer machen.

MfG aus Westerwald

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

@sebihepp
Versuch mal das XC95xx Derivat mit dem Typ-spezi Prog-Algo. zu 
behandeln.
Und damit eine eigene Impact-Prog-Exe via *.JED File zu schreiben.

https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog/trunk/progalgxc95x.cpp
void ProgAlgXC95X::flow_array_read(JedecFile &rbfile)
##########################################################


i_data[DRegLength] = (byte) (Addr &0xff);
    i_data[DRegLength+1] = (byte) ((Addr>>8) &0xff);
    jtag->shiftIR(&ISC_READ);
    jtag->shiftDR(preamble,0,2,0,false);
    jtag->shiftDR(i_data,o_data,(DRegLength+2)*8);
    jtag->cycleTCK(1);
    if(sec | l | m )
      {
        for(int j=0;j<DRegLength;j++)
    {
      data = o_data[j];
      for(int i=0;i<bitlen;i++)
        {
          rbfile.set_fuse(idx++, (data & 0x01));
          data = data >> 1;
        }
    }
      }
    if(l*5+m >= 9){
      bitlen=6;
*************************************
/* Now read the security fuses*/
  jtag->shiftIR(&ISC_READ);
  jtag->shiftDR(preamble,0,2,0,false);
  jtag->shiftDR(i_data,o_data,(DRegLength+2)*8);
  for(int j=0;j<DRegLength;j++)
    {
      data = o_data[j];
      for(int i=0;i<bitlen;i++){
  rbfile.set_fuse(idx++, (data & 0x01));
  data = data >> 1;
      }
    }
-----------------------------------------
https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog/trunk/devlist.txt
#XC95XL
09602093      8  0xfe XC9536XL
09604093      8  0xfe XC9572XL
09608093      8  0xfe XC95144XL
09616093      8  0xfe XC95288XL



#XC95
09502093      8  0xfe XC9536
09504093      8  0xfe XC9572
09506093      8  0xfe XC95108
09508093      8  0xfe XC95144
09512093      8  0xfe XC95216
09516093      8  0xfe XC95288


##Atmel
#list should not care for the version part
0970203f      4    0x1 ATmega128
0978103f      4    0x1 AT90CAN128
0960203f      4    0x1 ATmega64
0950103f      4    0x1 ATmega323
0950203f      4    0x1 ATmega32
0940303f      4    0x1 ATmega16
0940403f      4    0x1 ATmega162
0940503f      4    0x1 ATmega169

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Das Platform USB Cable kann man damit ersetzen, und auch den
eigenen Prototypen z.B CPLD als stand allone mit einer MCU testen.
Via device ID kann man dann testen, ob das CPLD auch anspricht.
Oder die Beschaltung einen Fehler hat..
Gruss Holger.
Ich habe das mit einem JTAG test via ispPAC30 (LATTICE 
Analog-Chip)gemacht.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Hier noch ein Link zu JTAG.
http://www.embedded-projects.net/index.php?page_id=157

@Dimi
Kannst du uns den Source-Code posten für den JTAG PIC18F2550.

von sebihepp (Gast)


Lesenswert?

@Holger Harten:
Wenn du mir noch sagen könntest auf welche Hardware sich das bezieht, 
wäre ich überglücklich. =) Das steht leider nicht in deinem Post und der 
Beitrag davor handelt ja von der Programmierung über Slave Serial (Was 
CPLDs leider nicht können, laut Xilinx)

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

@sebihepp
http://www.latticesemi.com/documents/an8082.pdf
>> Programmierung über Slave Serial via JTAG mit FTDI-CHIP FTDI 3232.
Gruss Holger.
Du kannst mal den Pog-Algo für den CPLD XC95xx versuchen.
Uwe Bonnes hat das da ja als Source-File mit drin.

Sie Link ..

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.