Guten Mittag, ich würde gerne mit einem µC ein FPGA per JTAG konfigurieren und würde dafür einen SVF-Player verwenden, für den es Source-Codes gibt, da ich ihn in einen kleinen STM32-ARM packen wollte. Da der STM32 sehr klein sein wird, müsste das SVF-File in Teilen an den ARM (und von dort aus an das FPGA) geschickt werden, d.h. falls JTAG Echtzeitanforderungen hätte, würde ich da Probleme bekommen. Meine Frage lautet deshalb: Kann JTAG statisch betrieben werden? Vom Gefühl her würde ich sagen, dass ich da keine Probleme zu erwarten habe, da es ein taktsynchrones Protokoll ist ... Weiß jemand genauers? Hat jemand zufällig einen Open-Source SVF-Player, den er schon mal erfolgreich getestet hat? Ist SVF überhaupt noch aktuell? Quartus Prime bietet auch noch andere Format an ... Vielen Dank für Hilfe! Mampf
Mampf F. schrieb: > Kann JTAG statisch betrieben werden? Ja. Letztendlich ist JTAG eine Art SPI mit sich ständig ändernden Bitbreiten. Mampf F. schrieb: > Hat jemand zufällig einen Open-Source SVF-Player, den er schon mal > erfolgreich getestet hat? Für Xilinx ist mir diese Lösung bekannt: https://www.mikrocontroller.net/articles/FPGA_Konfiguration_mit_AVR_Butterfly Keine Ahnung ob und wie sich das für Altera anpassen läßt. XSVF ist 'nur' die binäre Variante von SVF und der Player nach XAPP058 unterstüzt von SVF m.E. nur ein (für die Funktion ausreichendes) Subset. Duke
Duke Scarring schrieb: > Mampf F. schrieb: >> Hat jemand zufällig einen Open-Source SVF-Player, den er schon mal >> erfolgreich getestet hat? > Für Xilinx ist mir diese Lösung bekannt: > https://www.mikrocontroller.net/articles/FPGA_Konfiguration_mit_AVR_Butterfly > > Keine Ahnung ob und wie sich das für Altera anpassen läßt. > XSVF ist 'nur' die binäre Variante von SVF und der Player nach XAPP058 > unterstüzt von SVF m.E. nur ein (für die Funktion ausreichendes) Subset An den SVF-Player von Xilinx hatte ich auch zuerst gedacht, aber ich war mir auch nicht sicher, ob der mit Altera FPGA kompatibel ist. Damals vor ein dutzend Jahren hatte ich den verwendet, um über PCI einen FPGA zu konfigurieren. Ich hab beim Googeln gerade gesehen, es gibt auch eine Open-Source Version von Altera/Intel selbst: https://www.altera.com/support/support-resources/support-centers/devices/cfg-index/cfg-jtag.html
Muß es unbedingt SVF und JTAG sein? Mit 5 (zur Not tun's auch 4) Pins kannst Du Altera FPGA's ihre Config "einblasen", mehr als 20 Zeilen C sind das nicht, das sollte auch auf dem kleinsten µC noch Platz finden.
1 | GPIO &= ~FPGA_CLOCK; /* FPGA clock => low */ |
2 | |
3 | /* pulling FPGA_CONFIG to low resets the FPGA */
|
4 | GPIO &= ~FPGA_CONFIG; /* FPGA config => low */ |
5 | wait(10); /* give it some time to do its reset stuff */ |
6 | |
7 | while ((GPIO & FPGA_STATUS) && (GPIO & FPGA_CONF_DONE)); |
8 | |
9 | GPIO |= FPGA_CONFIG; /* pull FPGA_CONFIG high to start config cycle */ |
10 | while (!(GPIO & FPGA_STATUS)) |
11 | ; /* wait until status becomes high */ |
12 | |
13 | fpga_data = (uint8_t *) FPGA_FLASH_DATA; |
14 | do
|
15 | {
|
16 | uint8_t value = *fpga_data++; |
17 | for (i = 0; i < 8; i++, value >>= 1) |
18 | {
|
19 | if (value & 1) |
20 | {
|
21 | /* bit set -> toggle DATA0 to high */
|
22 | GPIO |= FPGA_DATA0; |
23 | }
|
24 | else
|
25 | {
|
26 | /* bit is cleared -> toggle DATA0 to low */
|
27 | GPIO &= ~FPGA_DATA0; |
28 | }
|
29 | /* toggle DCLK -> FPGA reads the bit */
|
30 | GPIO |= FPGA_CLOCK; |
31 | GPIO &= ~FPGA_CLOCK; |
32 | }
|
33 | } while ((!(GPIO & FPGA_CONF_DONE)) && (fpga_data < fpga_flash_data_end)); |
Markus F. schrieb: > Muß es unbedingt SVF und JTAG sein? > > Mit 5 (zur Not tun's auch 4) Pins kannst Du Altera FPGA's ihre Config > "einblasen", mehr als 20 Zeilen C sind das nicht, das sollte auch auf > dem kleinsten µC noch Platz finden. Vielen Dank für den Input! Das sieht wirklich sehr hübsch aus - ich glaube ich verabschiede mich von JTAG und nehme gleich deine Lösung :)
Hier wird ein CPLD von einem AVR beschrieben: https://www.bigmessowires.com/2012/12/15/build-your-own-floppy-emu/ und evtl. auch noch hilfreich: http://spritesmods.com/?art=stdalonejtag Peter
Ah, gerade ist mir aufgefallen - wenn ich auf JTAG verzichte, dann benötigt ich keinen 2,5V Pegelwandler ´ala 74LVC07, weil die Signale zum direkten Konfigurieren des FPGAs 3,3V können? Oder müssen die - wie JTAG - auch mit 2,5V betrieben werden?
hängt bei mir alles an 3V3 (Cyclone III). Mag bei anderen Typen wieder anders sein.
:
Bearbeitet durch User
Markus F. schrieb: > Muß es unbedingt SVF und JTAG sein? > > Mit 5 (zur Not tun's auch 4) Pins kannst Du Altera FPGA's ihre Config > "einblasen", mehr als 20 Zeilen C sind das nicht, das sollte auch auf > dem kleinsten µC noch Platz finden. Vielen Dank, ich hab deine Lösung verwendet und es funktioniert hervorragend :) Bei mir wird das FPGA vom Raspi konfiguriert - beim ersten Versuch gleich geglückt :D Und auf JTAG mit einem Pegelwandler 2,5V <-> 3,3V kann man gänzlich verzichten ... Echt nichts einfacher, als ein rbf-file in das FPGA zu schieben :)
:
Bearbeitet durch User
Mampf F. schrieb: > Vielen Dank, ich hab deine Lösung verwendet und es funktioniert > hervorragend :) Freut mich. Danke für die Rückmeldung.
Hallo, ich habe das gleiche Problem und finde deine Lösung mit dem Raspberry Pi sehr interessant. Könntest du mir diese zur Verfügung stellen? Liebe Grüsse Pavel
Markus F. schrieb: > Muß es unbedingt SVF und JTAG sein? > > Mit 5 (zur Not tun's auch 4) Pins kannst Du Altera FPGA's ihre Config > "einblasen", mehr als 20 Zeilen C sind das nicht, das sollte auch auf > dem kleinsten µC noch Platz finden. Hi, das sieht echt interessant aus. Funtkioniert das auch für Xilinx? Ich habe bei mir den XSVF Player von Xilinx implementiert und das ist nicht besonders schnell. Und spielt man da dann direkt das Bitfile ab? Oder muss das auch noch nach SVF oder XSVF gewandelt werden? Grüße, Jens
Jens W. schrieb: > Funtkioniert das auch für Xilinx? Genauso wohl eher nicht. Aber auch für Xilinx FPGAs gibt's Configuration User Guides und der Prozess sieht - zumindest nach kurzem Drüberlesen - sehr ähnlich aus. Muss halt mal "jemand" genau lesen und entsprechend implementieren.
Pavel schrieb: > ich habe das gleiche Problem und finde deine Lösung mit dem Raspberry Pi > sehr interessant. Könntest du mir diese zur Verfügung stellen? Jap, das hatte ich damals hier abgelegt: https://gitlab.com/microengineer18/pidiver1.3/-/blob/master/golang/pidiver/raspberry/raspberry.go
:
Bearbeitet durch User
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.