Altera FPGA mit JTAG über SVF-Player konfigurieren Frage

OP Persönliche Seite #5399575
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
Gast #5399613
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
OP Persönliche Seite #5399694
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
#5399815
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));
OP Persönliche Seite #5399893
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 :)
OP Persönliche Seite #5426016
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 :)
Angehängte Dateien:
#7435480
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren