FPGA - DIY-Programmierung

Ich programmiere seit einigen Jahren Mikrocontroller und habe gerade FPGAs entdeckt, nachdem ich einen Kurs für digitales Design besucht habe. Nachdem ich einige Recherchen zu verschiedenen FPGAs, Entwicklungsboards usw. angestellt habe, zögere ich immer noch, irgendwelche zu kaufen, weil ich nicht wüsste, wie ich meine eigene Version des endgültigen "Produkts" erstellen könnte. Ich habe PICs, SAMs, AVRs usw. ohne Probleme auf benutzerdefinierten PCBs angebracht, daher mache ich mir darüber keine Sorgen - mein Hauptanliegen ist die Programmierung eines FPGA ohne Herstellerplatine.

Meine spezielle Frage: Würde ein FPGA funktionieren, wenn ich die von Quartus, Vivado, iCEcube usw. generierte Bitmap-Datei auf einen SPI-Flash-Speicherchip schreiben würde, der bei Adresse 0 beginnt (z. B. über einen FT2232H), und den Flash-Speicher an die SPI-Pins eines FPGA (mit richtig eingestellter MODE-Konfiguration)?

Ich entschuldige mich für die teilweise Hypothese; Ich bin mir ziemlich sicher, dass das alles ist, was der Diamond Programmer von Lattice tut, aber ich habe mich gefragt, ob dieser Ansatz für FPGAs verschiedener Hersteller funktionieren würde, oder ob Quartus beim Schreiben zusätzliche "Fensterdekoration" oder Header zum Speicher hinzugefügt hat.

Lassen Sie mich wissen, ob ich etwas tun kann, um die Frage zu verbessern / zu klären, oder ob ich einen wichtigen Punkt im FPGA-Programmierungsprozess übersehe. Danke!

Mit "Bitmap" meinst du Bitstream?
Diese Frage wurde schon einmal in einer anderen Inkarnation gestellt
Wenn Sie BGAs nicht selbst montieren können, sind Sie eine Art SOL, wenn Sie ein FPGA-Board von Grund auf neu erstellen. Verwenden Sie besser FPGA-Module wie die von Trenz. FPGAs können ihre Konfigurationsdatei automatisch von einem externen SPI-Flash laden, wenn die entsprechenden Pins auf der Leiterplatte verdrahtet sind. Lesen Sie das FPGA-Handbuch. Es ist da drin. Sie können es selbst tun, aber der FPGA-Programmierer kann es auch über das FPGA tun. Dadurch kann es auch Einschränkungen hinsichtlich des externen Flash-Chips geben, den Sie verwenden können.
Wenn Sie Herstellerplatine sagen, meinen Sie damit Entwicklungskit oder Programmierer?
@Toor: Nicht alle FPGAs sind in BGA-Paketen enthalten. Es gibt viele, die in QFP und anderen Paketen enthalten sind.
@DaveTweed Ja, aber sie werden immer seltener und sie sind winzig.
Bei Ihrem ersten FPGA-Board-Design würde ich vorschlagen, zwei Methoden zur Geräteprogrammierung bereitzustellen (plus den JTAG-Header des Anbieters). Platzieren Sie Jumper-Positionen, damit Sie die MODE-Pins nach Bedarf ändern können. Es ist sehr einfach, diese durcheinander zu bringen, und es ist gut, Backup-Pläne zu haben. Achten Sie auch darauf, Testpunkte für INIT und DONE bereitzustellen (oder was auch immer Lattice verwendet, um den Programmierstatus anzuzeigen).
@Toor was sind die Schwierigkeiten bei der Montage von BGA-Gehäusen?
Haben Sie eine BGA-Verpackung gesehen? Viele eng beieinander liegende Kugeln, die leicht Brücken bilden können, die unter der Verpackung verborgen sind und mit einem Bügeleisen nicht zugänglich sind.
Ich habe, ich benutze eine Heißluftpistole und Lötpaste, wenn ich mit Leiterplatten arbeite. Hätte nicht gedacht, dass das noch ein Problem wäre...
Die Prozesskontrolle, die zur Montage von BGAs erforderlich ist, insbesondere solche mit hoher Pinzahl, ist strenger als so etwas wie ein QFP. Die Tatsache, dass es mehr Bälle gibt, bedeutet, dass die Wahrscheinlichkeit von Brücken oder schlechten Verbindungen höher ist, und da sie versteckt sind, können Sie keine Probleme erkennen (es sei denn, Sie haben eine Röntgenaufnahme), bevor Sie das Ding ausführen, um festzustellen, ob dies der Fall ist irgendwelche Probleme. Und wenn Sie die Komponente wieder montieren, müssen Sie sie neu zusammenballen, was mehr Ausrüstung erfordert. FPGAs sind auch teure Chips, die Sie nicht beschädigen möchten. Bei großen BGAs werden Dinge wie PCB-Vorwärmer notwendig.
Früher habe ich an einem Ort gearbeitet, an dem die Techniker den ganzen Tag nur nachgearbeitet haben, und sie hatten Heißluftstationen (strengere Temperaturkontrolle und zuverlässiger als die Heißluftpistole) und sie konnten BGAs nicht zuverlässig von Hand löten. Ich glaube nicht, dass sie einen Vorwärmer hatten. Wenn Sie es also versuchen möchten, besorgen Sie sich einen Vorwärmer und verwenden Sie einen billigen Chip (möglicherweise sogar ein Daisy-Chain-BGA-Dummy-Paket, damit Sie Ihre Verbindungen elektrisch überprüfen können, bis Sie sie vor dem Ausführen des nageln echte Sache).
Ja .... die einzige "hobbyistische" Lötmethode, die bei einem BGA eine Chance hat, ist ein Ofen. Eine Heißluftpistole liefert nicht die erforderliche Konsistenz der Erwärmung. Und Sie sollten die Lötpaste besser mit einer Schablone und einem Rakel auftragen, nicht von Hand aus einer Spritze.

Antworten (4)

Ja, es würde gut funktionieren.

Tatsächlich ermöglichen Ihnen die Entwicklungstools für die meisten FPGAs, den externen Flash direkt über die FPGA-eigene JTAG-Verbindung zu programmieren, sodass keine separate Programmierschnittstelle für den Flash erforderlich ist.

Und einige, wie Lattice Mach X02, haben den Flash an Bord, sodass Sie nur ein paar Widerstände und einen 5x2-Header benötigen, um eine Verbindung zum Lattice-Programmier-Pod herzustellen.
Mir war bewusst, dass Sie den Flash direkt über JTAG von Tools wie Vivado/Quartus aus programmieren können, was ich gehofft hatte, war, dies tun zu können, ohne ein herstellerspezifisches Kabel kaufen zu müssen - verwenden Sie einfach einen FT2232H und schreiben Sie den Bitstream (nicht Bitmap?) selbst. Ich glaube jedoch nicht, dass dieser Chip von Quartus unterstützt wird und von Vivado nicht offen unterstützt wird (obwohl sie ihn auf den Nexys- und Basys-Boards verwenden).
Ja, Sie können den Flash mit der Bitdatei auch auf andere Weise programmieren. Einer Ihrer Programmierer für Ihre MCUs kann es wahrscheinlich tun. Ich weiß, dass mein Segger J-Link das kann.
@Toor: Das ist zwar kein herstellerspezifisches Kabel, aber es hat immer noch fest codierte Unterstützung in den Herstellertools, und der Segger ist um einiges teurer als ein FT2232H.
Nahezu alle großen Anbieter stellen technische Dokumentationen bereit, um die ermittelten Bitstreams in ihre Teile (sowohl FPGA- als auch benutzerdefinierte Konfigurations-Flashes) mit benutzerdefinierten Tools hochladen zu können, da dies manchmal in integrierten Systemen oder Prüfständen wünschenswert ist. Es mag am einfachsten sein, die unterstützte Ausrüstung des Anbieters zu verwenden (besonders am Anfang), aber ich habe im Laufe der Jahre einige Male Alternativen für bestimmte Projekte implementiert. Der schwierigere Teil eines ursprünglichen FPGA-Board-Projekts kann die gesamte Unterstützung sein, die ein FPGA auf dem Board benötigt – viele Strompaare, die geroutet und umgangen werden müssen, oft für mehrere unterschiedliche Spannungen.

Wenn Sie sagen "die [sic] Bitmap [sic]-Datei generiert von ", lautet die Antwort Ja, solange Sie die richtige auswählen -- Sie haben einen kleinen Fehler gemacht, indem Sie den bestimmten Artikel verwendet haben, da nicht nur eine Datei generiert wird .

Beispielsweise kann Quartus SOF-, POF- und JIC-Dateien erstellen. Letzteres verwenden Sie für die indirekte Programmierung über das FPGA-JTAG. Es wäre nicht sinnvoll, das in den SPI-Flash zu schreiben. Das SOF dient zum Laden über JTAG, um Ihr Design vorübergehend im FPGA auszuführen. POF ist das, was Sie in den Flash-Chip laden müssen.

Siehe FPGA: Bitstream vs. SRAM Object File für viele nützliche Informationen darüber, was die verschiedenen Dateien von jedem der verschiedenen Anbieter bedeuten.

Würde ein FPGA funktionieren, wenn ich ... den Flash-Speicher mit den SPI-Pins eines FPGAs verbinde (mit richtig eingestellter MODE-Konfiguration)?

Wenn ich Ihre Frage richtig verstehe, möchten Sie die FPGA-Konfiguration (z. B. Ihr kompiliertes HDL-Modell) in ein SPI-EEPROM oder einen SPI-Flash schreiben, und Sie möchten, dass sich das FPGA anhand der Daten auf dem SPI-IC selbst programmiert.

(Wenn ich die Antwort von Dave Tweed richtig verstehe, hat er Ihre Frage anders verstanden.)

Zumindest würden viele SPI-Flash-Speichergeräte NICHT funktionieren , da SPI-Flash-Speicher-ICs eine bestimmte Wellenform (z. B. die zu lesende Adresse) senden müssen, damit die Daten aus dem IC ausgelesen werden.

Diese Wellenform ist nicht für alle Flash-Speichergeräte gleich. Auch wenn man nur SD-Speicherkarten betrachtet (die auch als SPI-Flash-Speicher verwendet werden können), finden wir zwei Varianten, bei denen eine andere Wellenform an die Karte gesendet werden muss, bevor die Karte die Daten ausliest.

Wenn die Modus-Pins des FPGA richtig eingestellt werden, sendet das FPGA eine Wellenform, die ein serielles Speichergerät anweist, die Daten zu senden. Da jedoch unterschiedliche ICs unterschiedliche Wellenformen erfordern, wird die Wellenform nicht von allen Flash-ICs verstanden, sondern nur von bestimmten Typen.

Ich weiß, dass Altera spezielle Flash- oder EEPROM-ICs herstellt, die zu ihren FPGAs kompatibel sind.

Offensichtlich wird eine SD-Karte nicht funktionieren, da kein FPGA (meines Wissens) SD/MMC als Konfigurationsprotokoll unterstützt. Die meisten FPGAs halten sich an AT24/AT26/AT45.

Wenn Sie einen FPGA-Bitstream ohne die offiziellen FPGA-Programmiertools in den Flash schreiben möchten, möchten Sie diese Bitstream-Datei höchstwahrscheinlich in ein offenes Binärformat konvertieren, das Sie leicht lesen können, wie Raw Binary, Intel HEX oder Motorola SREC ( Beispiel ). Dadurch werden alle proprietären Header entfernt, die ein FPGA-Bitstrom enthalten kann.

Auf diese Weise können Sie den Flash mit den Tools des Flash-Herstellers (oder Ihren eigenen Tools) programmieren oder sogar die mit Ihrem FPGA-Bitstream vorprogrammierten Flash-Chips bestellen.