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
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
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
Hast Du dir mal die XAPP058 von Xilinx angesehen? Sonst such mal bei Xilinx nach: microcontroller jtag
>Hast Du dir mal die XAPP058 von Xilinx angesehen?
Jep, daher habe ich ja die Idee einen Mikrocontroller als SVF
Interpreter zu benutzen.
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.
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.
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.
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.
>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.
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.
>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.
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.
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
@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
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.
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.
@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)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.