An einem Ort, an dem ich arbeitete, gab es zwei Lager von FPGA-Designern. Ein Lager, das ich simulieren, simulieren, simulieren oder gewürfelt nannte. Das andere Camp drehte sich alles um Design.
Die gewürfelten Jungs benutzten einen Simulator wie Modelsim. Sie entwickelten ein erstes Design über Codierungsmethoden und / oder Blöcke in der Design-Suite. Dann würden sie es simulieren und die Dinge finden, die nicht funktionieren würden, und dann den Code ändern. Dieser Prozess wurde mehrmals wiederholt, bis ein funktionierendes Design gefunden wurde.
Das Designcamp (das ich bevorzugt habe) würde die Wellenform auf Papier (oder digitalem Papier wie visio) entwerfen, genau das, was erforderlich war. Dann überlegen Sie sich ein Logikdiagramm. Dies ist ein selbstdokumentierender Prozess. Dann wurde das Diagramm in Code übersetzt (der Code und das Diagramm waren 1: 1, wenn etwas im Diagramm war, gab es einen Prozess dafür im Code). Dann wurde es simuliert und die Simulationswellenform wurde mit der auf Papier entworfenen Wellenform verglichen, und es wurde erwartet, dass sie dieselbe ist.
Am Ende habe ich beides gemacht, manchmal bin ich in den Cubed-Modus geraten, und es hat nicht sehr viel Spaß gemacht. Ich stellte fest, dass ich manchmal mein Ziel aus den Augen verlor. Zum Beispiel würde ich einen Zustand in einer Zustandsmaschine ändern, und die Änderung würde sich auf den nächsten Zustand auswirken, dann müsste ich das beheben. Am Ende verbrachte ich mehr Zeit als darüber nachzudenken.
In welchem Lager würdest du lieber sein? Ich denke, es muss strenges Design geben, das tun, was für Sie funktioniert, aber ich denke, je detaillierter und strenger Sie entwerfen, desto weniger Probleme werden Sie auf lange Sicht haben. Ich habe einige Beispiele dafür gegeben, was möglich ist. Sie passen möglicherweise nicht zur Organisationsstruktur Ihres Arbeitsplatzes. Der Grund, warum Designdetails und sorgfältige Planung so nützlich sind, besteht darin, dass Sie darüber nachdenken müssen, was Sie tun. Es macht es einfach zu debuggen. Entwickeln Sie einen Design-Workflow, der dies ermöglicht. Machen Sie sich auch mit den Simulationswerkzeugen vertraut und schreiben Sie gute Testbenches, die alle Bedingungen testen, denen das simulierte Gerät ausgesetzt sein könnte. Dies muss natürlich mit der Zeit ausgeglichen werden. Schreiben Sie beispielsweise ADC HDL-Code, der das Gerät in Ihren Simulationen simuliert.
Das wertvollste Werkzeug für das FPGA-Design (meiner Meinung nach) ist ein gutes Testverfahren, mit dem Sie Ihr Design vollständig testen und auf Herz und Nieren prüfen können. Von einem FPGA-Design kann nicht erwartet werden, dass es "nur funktioniert". Es erfordert Mühe, um sicherzustellen, dass alle Teile funktionieren. Wenn Sie Fehler entdecken, kehren Sie zur Simulation und zum Design zurück und erfahren Sie, welche Unterschiede zwischen einem simulierten FPGA und RTL bestehen. Das hängt hauptsächlich mit der Erfahrung zusammen, aber wenn das Design in der Simulation funktioniert, aber nicht in der Hardware, müssen Sie herausfinden, warum es einen Unterschied gibt.
Ein paar wichtige Dinge, die ich gelernt habe:
1) Bereinigen Sie Ihre Eingänge, die Takt- und Rücksetzschaltungen müssen sauber sein, sonst kann sich die Metastabilität durch Ihr System ausbreiten. Wissen, was ein Synchronisierer mit zwei Rängen ist. Es gibt viele verschiedene Topologien für Reset-Schaltungen, wissen, wie man sie verwendet (es gibt einen großartigen Artikel im Internet, den ich jedoch nicht zur Hand habe).
2) Holen Sie sich die Anforderungen des Designs im Voraus und entwerfen Sie dann um diese herum. Wenn die Leute um Sie herum Ihnen keine bestimmten Anforderungen stellen, dann überlegen Sie sich diese selbst.
3) Die Matlab-Fixpunkt-Toolbox eignet sich hervorragend zum Simulieren von Steuerungssystemen und DSP-Anwendungen. Möglicherweise haben Sie jedoch keinen Zugriff darauf. Es ist eine großartige Möglichkeit, ein Design zu beweisen, bevor Sie codieren.
4) Design kommt zuerst, dann Codierung, dann Simulation.
5) Stark typisiert, halten Sie auch die Signalnamen auf dem Leiterplattenschema und der HDL konsistent. (Aus diesem Grund bevorzuge ich VHDL gegenüber Verilog.