mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mampf F. (mampf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mampf F. (mampf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus F. (mfro)
Datum:

Bewertung
1 lesenswert
nicht 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.
    GPIO &= ~FPGA_CLOCK;                 /* FPGA clock => low */

    /* pulling FPGA_CONFIG to low resets the FPGA */
    GPIO &= ~FPGA_CONFIG;                /* FPGA config => low */
    wait(10);                                           /* give it some time to do its reset stuff */

    while ((GPIO & FPGA_STATUS) && (GPIO & FPGA_CONF_DONE));

    GPIO |= FPGA_CONFIG;                 /* pull FPGA_CONFIG high to start config cycle */
    while (!(GPIO & FPGA_STATUS))
        ;                                               /* wait until status becomes high */

    fpga_data = (uint8_t *) FPGA_FLASH_DATA;
    do
    {
        uint8_t value = *fpga_data++;
        for (i = 0; i < 8; i++, value >>= 1)
        {
            if (value & 1)
            {
                /* bit set -> toggle DATA0 to high */
                GPIO |= FPGA_DATA0;
            }
            else
            {
                /* bit is cleared -> toggle DATA0 to low */
                GPIO &= ~FPGA_DATA0;
            }
            /* toggle DCLK -> FPGA reads the bit */
            GPIO |= FPGA_CLOCK;
            GPIO &= ~FPGA_CLOCK;
        }
    } while ((!(GPIO & FPGA_CONF_DONE)) && (fpga_data < fpga_flash_data_end));

Autor: Mampf F. (mampf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Peter S. (petersieg)
Datum:

Bewertung
1 lesenswert
nicht 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

Autor: Mampf F. (mampf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Markus F. (mfro)
Datum:

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

: Bearbeitet durch User
Autor: Mampf F. (mampf) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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
Autor: Markus F. (mfro)
Datum:

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

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.