Ich plane, eine benutzerdefinierte FPGA-Platine zu entwerfen. Die Platine enthält Sensoren. Ich muss die Ausgabe der Sensoren lesen und sie im Prozessor verarbeiten. Ich habe viele Projekte mit FPGAs abgeschlossen, aber dies wird mein erstes benutzerdefiniertes Design sein, bei dem ich auch die Hardwarekonfiguration berücksichtigen muss. Ich habe in letzter Zeit Nachforschungen angestellt, aber es fällt mir immer noch schwer, von einem Punkt aus zu beginnen. Deshalb bitte ich Sie, mir und anderen Personen, die ihr benutzerdefiniertes FPGA entwerfen möchten, zu helfen, welche Punkte sie bei jedem Schritt berücksichtigen müssen. Gibt es Bücher / Online-Ressourcen, die uns bei diesem Prozess helfen können? Ich werde auch ein Dokument erstellen, nachdem ich mein Projekt abgeschlossen habe, damit die Leute es nutzen können.
9
Antworten:
In meiner Firma haben wir zuvor einige benutzerdefinierte FPGA-Karten entworfen und seit kurzem kommerzielle Standard-FPGA-Karten ("COTS") mit benutzerdefinierten FMC-Tochterplatinen verwendet.
Prototyp Stadium
Wenn Sie sich noch in der frühen Phase der Projektdefinition befinden, planen Sie den Kauf von mindestens einer COTS-FPGA-Karte für das Prototyping. Sie können einen Ihrer Sensoren an die E / A-Header anschließen und einen schnellen Proof-of-Concept durchführen. Auf diese Weise erhalten Sie eine Vorstellung davon, wie das Projekt bei einer Skalierung auf viele Sensoren funktionieren könnte, und können abschätzen, wie viele Sie mit einem bestimmten FPGA unterstützen können.
Wenn das FPGA zu klein oder zu langsam ist oder die Tools für den Job nicht geeignet sind, können Sie zu diesem Zeitpunkt problemlos ein anderes COTS-FPGA austauschen. (Nun, nicht einfach, aber zumindest überschaubar ...)
Wenn die Firmware zu diesem Zeitpunkt nicht funktioniert, liegt dies eindeutig an einem Firmware-Problem und nicht an einem benutzerdefinierten PCB-Designfehler. Bei benutzerdefinierter Firmware und benutzerdefinierter Leiterplatte ist es manchmal schwierig zu erkennen, welche Seite für ein Problem verantwortlich ist.
Benutzerdefinierte FPGA-Karte im Vergleich zu handelsüblicher FPGA-Karte
Das Entwerfen einer benutzerdefinierten FPGA-Karte ist sinnvoll, wenn das Projekt einen kurzen Lebenszyklus und ein hohes Volumen aufweist oder einen kleineren Formfaktor erfordert, als dies mit COTS-FPGA-Karten und PMOD- oder FMC-Zusatzkarten möglich ist.
Wenn der Projektlebenszyklus die Produktlebensdauer eines DDR-Speicherchips (einige Jahre) überschreitet, ist das Entwerfen einer benutzerdefinierten FMC-Tochterplatine möglicherweise die bessere Alternative.
Die Kosten sind ein Faktor bei dieser Entscheidung. Die meisten COTS-FPGA-Karten sind eher universell einsetzbar und auf maximale Flexibilität ausgelegt. Wenn Sie ein hochvolumiges, kostensensitives Produkt herstellen, lohnt es sich wahrscheinlich, ein individuelles Design zu erstellen. Bei geringer Lautstärke ist es jedoch wahrscheinlich besser, sich auf die Erstellung einer Tochterkarte zu konzentrieren.
Unabhängig davon, für welchen Ansatz Sie sich entscheiden, gibt es bestimmte Schnittstellen, die eine klare Masterdokumentation erfordern: an der Schnittstelle zwischen den FPGA-E / A-Pins auf oberster Ebene und dem Rest der Karte und an der Anschlussschnittstelle zwischen den Karten. Dies sind Orte, an denen Pin-Positionen, interne Netznamen und externe Netznamen manchmal nicht übereinstimmen und ausgetauscht werden. Eine Tabelle ist eine ausreichende Dokumentation; Stellen Sie sicher, dass diese Schnittstellentabelle versioniert und unter Quellcodeverwaltung ist. Drucken Sie vor dem Senden von PCB-Dateien an die Fertigung eine Kopie dieser Schnittstellentabelle, eine Kopie des Schaltplans und eine Kopie des FPGA-Pin / Pad-Berichts aus. Ziehen Sie einen Textmarker über die Papiere, um zu überprüfen, ob jedes Signal dort angeschlossen ist, wo es sollte.
Für Steckverbinder habe ich gelernt, wie schwierig es ist, eine mechanische "Systemzeichnung" bereitzustellen, die sowohl Platinen als auch passende Steckverbinder in einer einzigen, dimensionierten Zeichnung zusammen zeigt. Ich wurde zuerst von einem VME-Steckverbindersystem verbrannt, bei dem Pin "A1" an einem Steckverbinder nicht Pin "A1" am anderen Steckverbinder zugeordnet war. Ich habe auch Designer vergessen sehen, dass ein Paar rechtwinkliger Steckverbinder zu einer spiegelbildlichen Verbindung führt (90 Grad + 90 Grad = 180 Grad). Dies war ein Problem, als ich für das Motherboard verantwortlich war und mehrere andere Projektmanager für verschiedene Tochterboards verantwortlich waren.
Benutzerdefinierte FPGA-Board-Tipps
Beginnen Sie mit dem "Referenzdesign" des FPGA-Herstellers und lassen Sie dann alle Teile weg, die für Ihre Anwendung nicht erforderlich sind. Entfernen Sie keine Bypass-Kondensatoren aus dem FPGA und versuchen Sie nicht, weniger PCB-Schichten zu verwenden. Achten Sie auf den Ebenenstapel (häufig neben der Bohrzeichnung). Bei Komponenten mit feiner Teilung wird normalerweise 0,5 Unzen Kupfer anstelle der Standarddicke von 1 Unze Kupferfolie verwendet.
Das BGA-Paket ist ein Problem. Die Ausbeute ist niemals so gut wie bei TQFP- oder TQFN-Paketen, und eine Überarbeitung eines BGA ist nahezu unmöglich. Selbst die Überprüfung auf Montageprobleme erfordert einen Röntgenbildgeber. Stellen Sie sicher, dass Sie einen Auftragsfertigungsdienstleister verwenden, dem Sie vertrauen.
Netzteile sind bei der Arbeit mit FPGA-Karten immer schwierig. Der tatsächliche Strombedarf des FPGA hängt sehr stark vom Konfigurationsbitstrom ab. Xilinx bietet ein "Power Estimator" -Tool, das jedoch nur gültig ist, wenn die Firmware vollständig ist. Bei einer Firmware-Änderung in letzter Minute besteht das Risiko, dass der Strombedarf höher ist als erwartet. Planen Sie, eine gewisse Versorgungsmarge zu belassen. Wenn die anfängliche Leistungsschätzung besagt, dass Sie 560 mA benötigen, verwenden Sie einen 1000-mA-Regler. Der zusätzliche verfügbare Ausgangsstrom schadet nicht, aber ein unzureichender Ausgangsstrom führt zu einem fehlerhaften Systemverhalten.
Wenn nicht festgeschriebene FPGA-Pins vorhanden sind, bringen Sie so viele wie möglich in einen Header. Wenn ein Problem auftritt, werden diese nicht festgeschriebenen Pins zu einer wertvollen Diagnoseressource für die Prüfung von Signalen im FPGA.
quelle
Ich habe über ein Dutzend FPGA-basierte Karten entwickelt, die eine breite Palette verschiedener Arten von FPGAs verwenden, von Lattice Mach X02 mit geringem Stromverbrauch bis zu Hochleistungs-Virtex 6 mit 24 SERDES-Kanälen. Die normalen Schritte, denen ich folge, sind:
Suchen Sie ein COTs-Board (ähnlich wie MarkU) und erhalten Sie eine ungefähre Vorstellung von den internen FPGA-Ressourcen, die Sie benötigen. Insbesondere achte ich auf:
Unter Verwendung der Gleichung [P = (1/2) CV ^ 2 * (f)] wobei C = Eingangskapazität, f = Frequenz. des Eingangs muss Ihr FPGA ansteuern (für jedes Signal!). Sie können die Worst-Case-Schätzung darüber ermitteln, wie viel Leistung erforderlich ist, um alle Ausgangssignale anzusteuern.
Sie müssen auch den Leistungsverlust berücksichtigen, der mit internen Abschlusswiderständen verbunden ist (basierend auf den von Ihnen verwendeten E / A-Standards).
Ich habe in letzter Zeit auch immer häufiger das TI Webbench-Tool mit viel Erfolg verwendet:
TI Webbench (Ich arbeite nicht für TI)
Schema:
Richten Sie Ihren Schaltplan mit Blick auf einen Idioten ein Sie und alle HDL-Designer werden viel auf diesen Schaltplan zurückkommen. Machen Sie es also jedem leicht, schnell zu finden, was er benötigt, ohne dass Sie oder sie in Zukunft den gesamten Schaltplan recherchieren müssen, um dies herauszufinden wenn Pin 20 der Takteingang ist. Dies beinhaltet viele Hinweise zum Schaltplan (falls möglich), beschreibt den Zweck einer Schaltung, das erwartete Ergebnis und sogar Bedenken. Da FPGAs in Banken unterteilt werden können, sollten Sie die FPGA-Komponente in mehrere Teile aufteilen und möglicherweise sogar eine gesamte Schaltplanseite für eine einzelne Bank reservieren.
PUT RIESIGE STÖRENDE ANMERKUNGEN IN IHREM SCHEMA ÜBER DAS ANBRINGEN VON UHREN AN DEN RICHTIGEN PINS: Ich habe meinen Kopf gegen viele Wände geschlagen, als ich mein erstes Bild für das Design erstellt habe, und das gefürchtete "Taktsignal" auf einen nicht taktfähigen Pin geleitet bekommen. . Lebe in Angst vor den verschiedenen Arten von Clock-Pins auf dem FPGA. Stellen Sie sicher, dass Sie verstehen, dass einige Clock-Pins für die Verwendung in einem Quadranten eines FPGA vorgesehen sind. Andernfalls werden Sie allen gegenüberstehen und sagen: "Hey, wussten Sie, dass es bestimmte Clock-Pins gibt, die für die Verwendung in einem Quadranten eines FPGA vorgesehen sind?". Es sind nur 15 Personen erforderlich, um sicherzustellen, dass Sie es nie wieder tun.
Verbringen Sie viel Zeit mit dem FPGA-Konfigurationsdesign: Stellen Sie sicher, dass Sie die JTAG-Pins herausziehen, auch wenn Sie nicht vorhaben , sie zu verwenden. Es ist der Unterschied zwischen einem funktionsfähigen Fehler und einem schwerwiegenden Fehler.
Wenn Sie Zweifel haben, bringen Sie zusätzliche Signaltasten, LEDs und DIP-Schalter heraus: Ich habe viel über die zusätzliche Arbeit nachgedacht, die mit dem Weiterleiten zusätzlicher Signale an Breakout-Header-LEDs, DIP-Schalter und Tasten verbunden ist, aber es hat IMMER geholfen.
Layout :
Kommunizieren Sie frühzeitig mit dem Fab-Haus: Insbesondere wenn Sie ein impedanzgesteuertes Routing benötigen, fordern Sie einen Layer-Stack für die gewünschte Layer-Anzahl an. Es ist viel einfacher, Hochgeschwindigkeitssignale zu routen, wenn Sie die Spurenbreiten zuerst definiert haben, um herauszufinden, dass Sie 6-mil-Spuren anstelle von 8-mil-Spuren hätten verwenden können, um Ihre 50-Ohm-Impedanz zu erreichen.
Beginnen Sie mit Bypass-Kappen: Entwerfen Sie das Stromversorgungssystem frühzeitig. Als erstes platziere ich alle Small Caps unter dem FPGA oder in der Nähe der Pins. Die größeren außerhalb des FPGAs verlegen einen gesamten Stromversorgungskreis und platzieren ihn ungefähr dort, wo ich ihn erwartet habe. Auf diese Weise kämpfen Sie nicht gegen das Routing-Puzzle und machen keine Kompromisse.
Hochgeschwindigkeitssignale an zweiter Stelle: Dies sind diejenigen, bei denen Sie nicht zu viele Ebenen überspringen möchten.
Ich lerne immer mehr Dinge und würde mich über andere Tipps freuen, die anderen Designern begegnet sind. Fügen Sie sie also bitte hinzu.
quelle
Ich denke, ein guter Ausgangspunkt für eine kundenspezifische Leiterplatte, die mit einem FPGA ausgestattet ist, sind die Referenzdesignkarten des FPGA-Herstellers. Sie können diese Designs beispielsweise auf das Netzteil überprüfen. Beachten Sie jedoch, dass Referenzdesign-Boards manchmal zu klein sind. Wir hatten viele Probleme mit Xilinx ML605-Karten, die aufgrund eines zu kleinen Netzteils die Konfiguration verloren haben.
Antwort auf den Kommentar von omid:
Einer meiner Kollegen implementierte einen systolischen Berechnungsalgorithmus auf einem Virtex-6 LXT240. Die Dateneingabe erfolgte über Gigabit Ethernet. Aufgrund des systolischen Ansatzes tat das FPGA fast nichts, wenn sich keine Daten in den Eingangs-Fifos befanden oder hauptsächlich alle Flip-Flops des FPGA mit 200 MHz umschalteten, wenn ein neuer Ethernet-Frame eintraf. Dieses Ungleichgewicht bei der Berechnung führte dazu, dass die TIs-Stromversorgungskreise die ML605-Karte abschalteten, was nur durch Umschalten des Hauptnetzschalters aus diesem Zustand wiederhergestellt werden konnte.
Wir haben dieses Design dem Fachbereich Elektrotechnik unserer Universität übergeben und sie haben herausgefunden, dass es keine Möglichkeit gibt, die Reglerkoeffizienten basierend auf den installierten Kondensatoren anzupassen.
Ja, man könnte sagen: schlechtes Design oder größere Fifos verwenden oder ...
Die Lösung meiner Kollegen war eine um 80% reduzierte FPGA-Auslastung.
Trotzdem sollten eine Prototyping-Karte und ein Referenzdesign in der Lage sein, extreme Arbeitslasten zu bewältigen, insbesondere wenn diese Karte ein FPGA enthält, das nicht so regelmäßig Strom verbraucht wie eine CPU.
quelle