So bringen Sie ein Prozessordesign auf das FPGA


20

Vor kurzem habe ich eine lange Reise mit dem autodidaktischen Entwerfen von Logik unternommen. Das Endprodukt ist eine funktionierende 16-Bit-CPU, die genau so arbeitet, wie sie in einem Simulator entworfen wurde . Jetzt habe ich gerade angefangen, die Möglichkeit zu prüfen, es über ein FPGA in Silizium zu integrieren. Ich weiß, dass ich viele Anpassungen in der Eingabe / Ausgabe-Arena vornehmen muss (die reale Welt unterscheidet sich von der Simulationsumgebung) und habe festgestellt, dass ich mein Design vollständig in einem Programm erstellt habe, das keine Netzlisten oder HDL-Code exportiert Alles, was ich wirklich habe, ist ein Schaltplan.

Angenommen, ich komme an einen Punkt, an dem ich eine Netzliste oder einen HDL-Code meines Designs habe. Was ist mein nächster Schritt, um es in Silizium umzuwandeln? Soweit ich das gelesen habe, sieht es so aus, als wären FPGAs meine Lösung, aber wenn ich mir die Xilinx- und Altera-Websites anschaue, dreht sich mein Kopf um. Bellte ich den falschen Baum an? Grundsätzlich suche ich eine einfache englische Beschreibung des nächsten Schritts für einen Mann mit einem Funktionsschema einer CPU. Sobald ich weiß, in welche Richtung ich gehen soll, kann ich die Bücher knacken und alles herausfinden, was ich wissen muss, um dorthin zu gelangen. Auch ein Hinweis, ich bin auf Mac OS X, aber ich habe eine Windows XP-Box, die ich anschließen kann, wenn ich unbedingt muss.


In welchem ​​Programm hast du dein Design gemacht? Möglicherweise gibt es Konverter von Drittanbietern.
Connor Wolf

Antworten:


17

Herzlichen Glückwunsch zu Ihrem CPU-Design. Ja, das FPGA ist definitiv Ihr nächster Schritt. Aber Sie sind sich nicht ganz sicher, was Ihren Kopf bewegt. Ich vermute, es ist die große Anzahl von verschiedenen Geräten im Angebot. Sie sagen auch nicht, welchen Simulator Sie verwenden.
Wenn Sie ein Design synthetisieren, sollte Ihnen der Synthesizer einen Bericht über die verwendeten Ressourcen wie Anzahl der Gates und RAM geben. Dies sollte Ihnen eine Vorstellung davon geben, welche Teile für Ihr Design geeignet sind. Stellen Sie sicher, dass Sie genügend Kopffreiheit haben . Wählen Sie einen Teil mit zusätzlichem RAM , den Sie zum Ausführen von Programmen auf Ihrer CPU benötigen.

edit (re your comment)
Sie benötigen ein Entwicklungssystem für einen bestimmten Hersteller. Altera und Xilinx sind die großen Spieler, und beide haben ihre Gläubigen. Welche Sie wählen, ist nicht so wichtig. Beide haben genug unterschiedliche Teile, um Ihre Bedürfnisse zu befriedigen.
Wenn Sie sich für Xilinx entscheiden, steht Ihnen die kostenlose ISE WebPACK Design Software (großer Download bei 3,4 GB) zur Verfügung. Die Einschränkungen im Vergleich zu fortgeschrittenen Versionen der Software sollten Sie zu diesem Zeitpunkt nicht stören.
Als nächstes benötigen Sie eine Entwicklungsplatine. Sie müssen eine Vorstellung davon haben, welches FPGA Sie zur Auswahl benötigen. Wenn Sie sich für Xilinx entscheiden, würde ich einen Spartaner auswählen, vielleicht ein Spartan-6, der Virtex ist schon zu High-End IMO. Es gibt immer noch sehr viele zur Auswahl, die sich hauptsächlich in den Extras auf der Tafel unterscheiden. Sie benötigen eine Platine mit etwas mehr als ein paar Schaltern und LEDs. Ich würde nach einem Tastaturanschluss und einem Anzeigemodul Ausschau halten.
Xilinx verfügt über eine Reihe von Boards, und für Xilinx-FPGAs gibt es auch Digilent , Avnet , Xess und viele andere.

Vergleichen Sie also eine Reihe von Boards (der Preis spielt vermutlich auch eine Rolle) und laden Sie die Entwicklungssoftware für das FPGA herunter, das Sie verwenden möchten. Fassen Sie Ihr Design zusammen, um sicherzustellen, dass es in das ausgewählte FPGA passt, und dann können Sie ein Board für dieses FPGA erwerben.

Ich habe vergessen, ein bisschen über FPGAs zu erzählen. Ein FPGA ist im Grunde eine große Sammlung von Gattern mit programmierbaren Verbindungen zwischen ihnen, so dass Sie mit ihnen fast jede Logikfunktion / System erstellen können. Über mehrere Generationen hinweg wurden FPGAs weiterentwickelt und verfügen nun über optimierte Blöcke, um Funktionen wie RAM effizient zu erstellen. Der Synthesizer Ihrer Entwicklungssoftware erstellt das Verbindungsdiagramm zwischen den Gattern. Dies ist nicht dauerhaft im FPGA gespeichert, sondern muss beim Einschalten von einem externen Konfigurations-Flash-Speicher geladen werden. Dort wird Ihr Design gespeichert. Wie jeder andere Flash-Speicher kann er häufig gelöscht und neu geschrieben werden.


Ich habe Logisim verwendet, was für die Schaltpläne fantastisch ist, aber es fehlt eine Methode, um alles andere als Bilder (PNG, JPEG usw.) auszugeben. In Bezug auf die FPGA-Verwirrungen, die ich habe, ist es teilweise eine Frage der Vielzahl von Geräten, aber ich finde auch keine Ressourcen, die die Grundlagen und Grundlagen erklären. Wenn ich meine CPU dort einsetze, wie ist sie mit der Außenwelt verbunden? Welche Ausrüstung brauche ich? Kann ich das FPGA wiederholt neu programmieren? usw. usw. usw. Es ist wirklich nur ein völliger Mangel an Vertrautheit mit dem Thema. Ich glaube, ich brauche einen Einsteigerleitfaden, finde aber nirgendwo einen.
Rory O'Hare

2
Ihre Fragen in der angegebenen Reihenfolge: 1) FPGAs sind über I / O-Pins mit der Außenwelt verbunden. Der Unterschied besteht darin, dass Sie die Pins auswählen können, im Gegensatz zu dedizierten Chips. 2) Sie können mit einem Starterkit, Entwicklungskit oder ähnlichem beginnen. Hierfür sind das FPGA, einige Anschlüsse für E / A und Netzteile an Bord. Die meisten enthalten auch den Programmierer; wenn man nicht vergisst, einen zu bekommen. 3) Ja, Sie können das FPGA neu programmieren. Das Programm ist auf dem Chip in einem im Wesentlichen riesigen Schieberegister gespeichert. Beim Start lädt eine dedizierte Zustandsmaschine oder eine externe Quelle diese in den Chip.
Mike DeSimone

9

Ich kenne die Werkzeuge von Xilinx nicht, aber ich kenne die von Altera, also erzähle ich Ihnen von ihnen. Xilinx und andere sollten nicht zu unterschiedlich sein.

Verilog

Als Erstes müssen Sie Verilog lernen . Dies wird Ihren Kopf verletzen, da Verilog (und die etwas ähnliche VHDL) zuerst als Simulationssprache entwickelt wurde und viele Konstrukte (wie zum Beispiel #5"Warte 5 Zeitschritte", wobei ein Zeitschritt normalerweise eine Nanosekunde ist). Es gibt also eine Reihe von Einschränkungen, die Sie beachten müssen, um Ihren Verilog-Code synthetisierbar zu machen , dh in einen Bitstream für ein FPGA zu kompilieren.

Der größte Schock ist jedoch, dass das, was Sie in Verilog (und VHDL) schreiben, das Verhalten ist, das Sie vom System erwarten , und der Compiler leitet die richtige Logik aus Ihrer Beschreibung ab. Wenn Sie nicht aufpassen, können Sie viele böse Bugs davon bekommen.

Ein D-Flip-Flop sieht beispielsweise so aus:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Dies beschreibt, wie eine DFF funktioniert, und der Compiler muss sie analysieren und herausfinden, ob Sie eine DFF wollen. Die @(...)wird als Sensitivitätsliste bezeichnet. Hierbei handelt es sich um eine Liste von Signalen, die eine Neubewertung des Codeblocks auslösen. Daher Qändert sich in diesem Block nur, wenn eine steigende Flanke an RESEToder CLKvorliegt (dies ist für einen Aktiv-Hoch-Reset). Wenn Sie etwas in der Empfindlichkeit Liste vergessen (die alle der rechten seitige Variablen ohne enthalten sollten posedgeoder negedgeModifikatoren für einen kombinatorischen Logikblock) wird die Compiler Riegel synthetisiert nach Bedarf anstattem Aufruf eines Fehler auf . Verrückt, aber so ist es, weil Verilog ursprünglich eine Simulationssprache war, die Implementierungsdetails versteckte (und daher keine benötigte). VHDL ist das gleiche, aber viel ausführlicher.

Schließlich wurde vor einigen Jahren eine neue Version von Verilog mit dem Namen SystemVerilog veröffentlicht, die das Schreiben von synthetisierbarem Code erheblich vereinfacht . Wenn möglich, lernen Sie diese Sprache, da Xilinx ISE und Altera Quartus II sie beide unterstützen. Das Hauptproblem ist der völlige Mangel an gutem Referenzmaterial.

Die SystemVerilog-Version eines DFF räumt ein paar Kleinigkeiten auf:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Beachten Sie, dass die Signale in der Empfindlichkeitsliste durch Kommas getrennt sind. Das orwar verwirrend, da andich dort nicht arbeiten konnte. Beachten Sie auch das Ersetzen von 1'b0(einem einzelnen 0Bit) durch '0(ein Symbol, das sich je nach 0Zuweisung auf so viele Bits erweitert, wie erforderlich ist; viel flexibler bei parametrisierten Modulen). Beachten Sie schließlich das Ersetzen von always(das für alles verwendet werden kann; Kombinationslogik, Latches und Flip-Flops), bei always_ffdem der Inhalt zu Flip-Flops synthetisiert werden muss. Es gibt auch eine, always_combdie die Sensitivitätsliste beseitigt, da sie nur die Sensitivitäten von den Eingängen zum Block berechnet.

Die Design-Software von Altera heißt Quartus II, und Sie werden nach der Web Edition suchen . (Die Abonnement-Editionen sind ziemlich teuer und werden nur für die schnellsten oder neuesten FPGA-Modelle benötigt.)

Das Traurige ist, dass ich kein gutes Buch zu diesem Thema gefunden habe. Was ich gelernt habe, habe ich durch Zusammenfügen von Dingen aus mehreren Quellen erhalten, wie Verilog-Büchern, die Ihnen nicht gut sagen, was synthetisierbar ist und was nicht, und Beispielcode. Quartus II verfügt über einen Befehl "Vorlage einfügen", mit dem Vorlagencode für mehrere gängige Strukturen, von D-Flip-Flops bis hin zu Zustandsautomaten, eingefügt werden kann.

Demo-Hardware

Sobald Sie Ihren Prozessor in Verilog implementiert haben, müssen Sie ihn erstellen. Lassen Sie Quartus vorerst den Chip auswählen (Sie müssen die Familie auswählen; ich würde den Cyclone IV empfehlen) und die Pinbelegung. Sobald es sich verhält, wissen Sie, wie viel Chip Sie benötigen. Hier erfahren Sie, wie viele Logikelemente, Flip-Flops, RAM-Bits usw. Sie verwendet haben. Stellen Sie sicher, dass Sie bei keinem von diesen über 50% sind. Wenn ja, schauen Sie sich den Chip an, den der Compiler ausgewählt hat, und wählen Sie manuell den nächstgrößeren (in Logikelementen) Chip mit mindestens so vielen Pins aus. Wiederholen Sie diesen Vorgang, bis die Auslastung unter 50% liegt.

Dann kaufen Sie sich ein Demo-Board mit einem Chip, der mindestens so groß ist wie der, mit dem Sie schließlich gebaut haben. Stellen Sie sicher, dass die Peripheriegeräte und / oder E / A-Anschlüsse vorhanden sind, die Sie benötigen. Es ist nicht ungewöhnlich, eine Tochterkarte zu bauen, die in einen Erweiterungsanschluss eingesteckt wird, um fehlende Hardware bereitzustellen.

Nachdem Sie Ihre Hardware ausgewählt haben, ermitteln Sie die tatsächlichen Pinbelegungen und verwenden Sie den Pin-Planer, um die richtigen Signale an den richtigen Pins zu platzieren. Auf der Demo-Karte befindet sich eine Bedienungsanleitung, in der angegeben ist, welche Stifte mit welchen Geräten oder Anschlussstiften auf der Demo-Karte verbunden sind.

Wenn Sie die Pinbelegung festgelegt haben, erstellen Sie sie erneut, sodass die gewünschten Pins verwendet werden. Beachten Sie, dass einige Signale wie Systemtakte dedizierte Eingangspins benötigen (sodass sie direkt zu den internen PLLs geroutet werden).

Verwenden Sie den Programmierer, um Ihr Design direkt in das FPGA (das vor einiger Zeit erwähnte Schieberegister) herunterzuladen. Jetzt befinden Sie sich im vertrauten Debugging-Zyklus zum Bearbeiten, Kompilieren und Ausführen. Schlagen Sie darauf, bis es funktioniert.

Sobald dies funktioniert, können Sie den Code mithilfe des Programmiergeräts in das integrierte Konfigurationsgerät herunterladen , sodass Ihr Programm beim Einschalten geladen und ausgeführt wird.

Das war ziemlich lang und ich hoffe, es hat einigen geholfen. Es gibt viel zu lernen; Es ist nicht so sehr wie das Erlernen einer neuen Programmiersprache, sondern vielmehr wie das Erlernen eines neuen Programmierparadigmas, z. B. der Übergang von prozeduralen zu funktionalen Sprachen. Verilog ist eine Simultansprache. Der Großteil des Codes wird immer ausgeführt.

Viel Glück!


Super, das ist sehr hilfreich. Um nur eines zu überprüfen: Ich habe von der schematischen Erfassung gehört. Ist das eine praktikable Alternative zum Lernen von Verilog? Ich werde es lernen, wenn ich muss, aber wenn es nicht zu 100% notwendig ist, möchte ich es lieber nicht zu der enormen Liste von Dingen hinzufügen, die ich bereits herausfinden muss. Vielen Dank.
Rory O'Hare

Ehrlich gesagt nicht wirklich. Ein großes Problem ist, dass Sie dem Schaltplanerfassungsprogramm ausgeliefert sind: Was können Sie tun, wenn Ihr Schaltplan einen falschen Verilog erzeugt? Während das Schreiben von Verilog Ihnen die nötige Autorität gibt, um alle Fehler zu beheben. Der große Grund ist jedoch, dass es Dinge gibt, die die schematische Erfassung niemals so gut kann wie Verilog: Parametrisierte Module und das Teilen und Zusammenführen von Bussen sind diejenigen, die einem sofort in den Sinn kommen.
Mike DeSimone

1
Gibt es Tools, die eine etwas "hardwarebeschreibende" Sprache in Verilog oder VHDL umwandeln können (z. B. wenn ich möchte, dass net Z ein Flip-Flop ist, dessen Dateneingabe eine Kombination aus A, B und C ist, die währenddessen asynchron zurückgesetzt wird?)? C und D stimmen, es wäre schön, etwas sagen zu können, Z:= A & (B # C); Z.ar = C & D;ohne sich um Sensitivitätslisten und ähnliches kümmern zu müssen.
Superkatze

Mit Altera Quartus können Sie Ihr Design als Schaltplan oder AHDL (Alteras Version von VHDL) oder eine beliebige Kombination davon eingeben, wahrscheinlich einschließlich anderer HDLs. (Da ich altmodisch war, verwendete ich hauptsächlich schematische Einträge für meine CPLD- und FPGA-Projekte mit einer kleinen AHDL.)
Peter Bennett

Nur um klar zu sein, AHDL ist keine Version von VHDL. Sowohl VHDL als auch Verilog sind Inferenzsprachen , in denen Ihr Code das Verhalten der gewünschten Schaltung beschreibt und der Compiler die Implementierung aus dieser Verhaltensbeschreibung ableiten muss. Dies ist ein Erbe der Tatsache, dass beide als Simulationssprachen begannen und für die Synthese wiederverwendet wurden. AHDL ist eine deklarative Sprache, in der Sie Primitive deklarieren (z. B. Flip-Flops, Wahrheitstabellen) und wie sie verbunden sind, damit der Compiler nicht raten muss. AHDL stammt aus den 80er Jahren und steht ABEL viel näher.
Mike DeSimone

5

Ja, FPGAs sind mit ziemlicher Sicherheit Ihre Lösung!

Sie mit ziemlicher Sicherheit werden benötigen eine der Hardware - Beschreibungssprachen verwenden, oder Ihre Schemata in ein anderes Werkzeug neu eingeben. Ich würde gegen den schematischen Ansatz als empfehlen

  1. Die FPGA-Tool-Anbieter unterstützen sie nicht wirklich gut
  2. Es ist nicht portabel

Sobald Sie HDL geschrieben haben, haben Sie Code, den Sie fair auf andere Chips portieren können, solange Sie nicht direkt mit den verschiedenen "IP-Assistenten" der Anbieterbibliothek oder durch direktes Einfügen von Komponenten aus deren Bibliotheken Dinge einfügen einfach (viel mehr als zum Beispiel das Portieren von Embedded C IME)

Außerdem haben Sie eine viel bessere Test- und Validierungsumgebung, da Sie Tests schreiben können, die Ihre Funktionalität "verstehen" und die Ergebnisse für Sie überprüfen können, anstatt auf die Wellenformen zu starren, um zu prüfen, ob alles in Ordnung aussieht.

Die großen 2 HDLs sind VHDL und Verilog. Vielleicht möchten Sie diese Antwort lesen, wie sie sich unterscheiden ...

VHDL oder Verilog?

Ich würde auch sagen, dass MyHDL auch einen Blick wert ist, wenn Sie Python bereits kennen - bietet Ihnen eine enorme Überprüfungsfähigkeit, aber dennoch den größten Teil der Kontrolle auf niedriger Ebene, die eine "normale" HDL bietet.

Sobald Sie sich für eine HDL entschieden haben und diese dann in einer Simulation zum Laufen gebracht haben (wieder, sorry!), Können Sie sie durch die Tools des Anbieters schieben und den nächsten großen Teil der Aufgabe lernen - sobald sie simuliert wurde Richtig, es gibt immer mehr Aufwand als Sie denken, um es zu synthetisieren :)

Wenn Sie mit Schaltplänen verbunden sind und eine Lizenz erwerben können, passt LabviewFPGA möglicherweise zu Ihnen.


3

Erhalten Sie eine Kopie des Rapid Prototyping von digitalen Systemen von Hamblen et al .:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Es wird hauptsächlich VHDL verwendet, was ich Verilog vorziehe.

Es enthält eine sehr einfache 8-Bit-CPU, uP3, die ich vor einigen Jahren mithilfe einer früheren Ausgabe des Buches auf meiner eigenen Altera FLEX 10K-Hardware implementiert habe. Ich werde es auf diese $ 25 Cyclone II-Platine portieren, wenn ich meine "Frontpanel" -Platine gemacht habe. Es enthält auch einen MIPS- und einen Altera NIOS II-Prozessor. Sie können die uP3-Übungen in diesem Buch mit den kostenlosen Altera Quartus II-Tools durcharbeiten, Ihren CPU-Code in VHDL umschreiben und auf einer Cyclone II-Karte zum Laufen bringen. Alternativ verfügt Quartus II über einen Schaltplaneintrag, und Sie sollten in der Lage sein, Ihren Schaltplan direkt einzugeben, zu simulieren und auf dem Cyclone II auszuführen.


1

Wenn die Schwierigkeit eine steile Lernkurve mit Werkzeugfähigkeiten ist, folgen Sie dem einfachsten Weg. Actel (jetzt Microsemi) hat Libero , das Paket von FPGA-Tools, die kein Lesen erfordern und einfach zu verwenden sind: sofort nach der Installation. Sie können dort per Hand Schaltpläne erstellen und diese mit wenigen Klicks auf das physische FPGA hochladen. Die Bildschirme auf dem Weg dorthin sind sehr selbsterklärend.


0

Wenn Sie sich für das Erlernen eines HDL entscheiden, können Sie beeinflussen, welche Sprache die bessere ist. In Europa ist VHDL populärer. In den USA ist Verilog populärer, mit Ausnahme der Verteidigungsindustrie, bei der es sich um VHDL handelt. (Das US-Verteidigungsministerium hat ursprünglich VHDL erstellt.) Das bedeutet nur, dass Personen in Ihrer Nähe möglicherweise besser in der einen oder anderen Sprache helfen können. Wenn Sie jedoch online nach Hilfe suchen, ist dies möglicherweise irrelevant.

Weitere zu berücksichtigende Bücher sind Rapid Prototyping von digitalen Systemen: SOPC Edition, die sich auf die Altera DE1- und DE2-Karten bezieht . Es gibt bereits eine Reihe verschiedener Computer, die auf DE1 und DE2 portiert sind, um Ihnen eine Vorstellung davon zu geben, wie sie funktionieren. Minimigtg68 (Amiga), FpgaGen (Sega Genesis) usw. sind auf dieses Board portiert, um Beispiele zu sehen.

Wenn Sie sich für Xilinx entscheiden, gibt es zwei Bücher, in die ich mich gerade vertiefe. FPGA-Prototyping von Verilog-Beispielen: Xilinx Spartan-3-Version FPGA-Prototyping von VHDL-Beispielen: Xilinx Spartan-3-Version Obwohl ich kein bestimmtes Board kenne, das ich mit diesen empfehlen könnte. Ich freue mich auf ein hoffentlich bald erscheinendes Board, FPGA Arcade, aber ich vergesse, ob es ein Xilinx oder etwas anderes haben wird.


0

Wir haben diese Variante gefunden, die Logisim, jetzt Logisim Evolution, weiterentwickelt. Sie implementierten eine Funktion zum Exportieren nach VHDL aus den Schaltplänen einer in logisim eingebauten Logikschaltung.

Es kann hier gefunden werden: https://github.com/reds-heig/logisim-evolution

Ich weiß, dass diese Frage alt ist, aber sie hat mir geholfen, und ich hoffe, sie hilft jemand anderem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.