Forum: FPGA, VHDL & Co. Altera FPGA mit JTAG über SVF-Player konfigurieren Frage


von Mampf F. (mampf) Benutzerseite


Lesenswert?

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

von Duke Scarring (Gast)


Lesenswert?

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

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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

von Markus F. (mfro)


Lesenswert?

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));

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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 :)

von Peter S. (petersieg)


Lesenswert?

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

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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?

von Markus F. (mfro)


Lesenswert?

hängt bei mir alles an 3V3 (Cyclone III). Mag bei anderen Typen wieder 
anders sein.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

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
von Markus F. (mfro)


Lesenswert?

Mampf F. schrieb:
> Vielen Dank, ich hab deine Lösung verwendet und es funktioniert
> hervorragend :)

Freut mich. Danke für die Rückmeldung.

von Pavel (pviktorin)


Lesenswert?

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

von Jens W. (jensw)


Lesenswert?

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

von Markus F. (mfro)


Lesenswert?

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.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.