Inhaltsverzeichnis:

Zehn-Bit-Computer - VHDL - Gunook
Zehn-Bit-Computer - VHDL - Gunook

Video: Zehn-Bit-Computer - VHDL - Gunook

Video: Zehn-Bit-Computer - VHDL - Gunook
Video: 8bit CPU in VHDL -progress 2024, November
Anonim
Zehn-Bit-Computer - VHDL
Zehn-Bit-Computer - VHDL

Hergestellt von: Tyler Starr und Ezzeedden Gazali

Einführung

Dieses Projekt wurde als Teil des Abschlussprojekts für CPE 133 bei Cal Poly SLO abgeschlossen. Es ist ein großartiges Projekt für jemanden, der verstehen möchte, wie Computer auf ihrer untersten Ebene funktionieren und wie sie ihre Aufgaben erfüllen. Das Projekt ist dem 8-Bit-SAP-Computer nachempfunden, der in Albert Malvinos Buch Digital Computer Electronics beschrieben ist. Wir haben den Computer jedoch auf 10 Bits erhöht, um die Implementierung von mehr Operationscodes (Operationscodes) zu ermöglichen. Der Benutzer kann den Computer so programmieren, dass er einen Satz von Operationen durchführt, indem er bestimmte Anweisungen eingibt.

System- und Schaltungsarchitektur:

Der Computer ist in VHDL geschrieben und wird auf dem Basys 3-Board von Digilent enthalten sein. Die Eingänge werden den Schaltern auf der Unterseite der Platine zugeordnet. Für die Reset- und Write-Funktionen werden zwei taktile Schalter verwendet. Die Ausgabe wird auf der 7-Segment-Anzeige des Boards angezeigt.

Der Computer wird in kleinere Schaltkreise (Module) unterteilt, die verschiedene Operationen ausführen. Jedes Modul wird in den folgenden Schritten im Detail erklärt.

Schritt 1: Materialien

Materialien
Materialien

Alles, was für dieses Projekt benötigt wird, ist das Basys3 FPGA-Board von Digilent und ein Micro-USB-Kabel, um das Board mit Ihrem Computer zu verbinden.

Schritt 2: Blockschaltbild der Schaltungsmodule

Blockschaltbild der Schaltungsmodule
Blockschaltbild der Schaltungsmodule
Blockschaltbild der Schaltungsmodule
Blockschaltbild der Schaltungsmodule
Blockschaltbild der Schaltungsmodule
Blockschaltbild der Schaltungsmodule

Die obigen Blockschaltbilder zeigen die verschiedenen Schaltungsmodule, aus denen der 10-Bit-Computer besteht. Nachfolgend finden Sie Beschreibungen für jedes der einzelnen Teile/Module, die in den obigen Diagrammen gezeigt werden.

Programm zähler

Beschreibung der Eingänge: Eingang ist ein 5-Bit-Eingang zum Laden einer Zahl in den Programmzähler. Wenn Cp hoch ist, zählt der Zähler bei fallenden Taktflanken. Clr setzt den Zähler auf 0 zurück. Ep wenn hoch, gibt der Zähler den aktuellen Zählerstand aus. Sp wenn hoch, setzt der Zähler den Zähler auf die Zahl am Eingang

  • Beschreibung der Ausgänge:

    Die Ausgabe ist eine Kopie der Zählung zur Verwendung auf den LEDs 0-15. Count gibt den aktuellen Zählerstand aus.

  • Gesamtplatz im System: Dieser Zähler verfolgt den Speicherort, an dem sich das Programm befindet. Alle Programme beginnen bei der Speicheradresse 00000 (0) und gehen bis 11111 (31), es sei denn, ein Halt wird verwendet. Bei Sprunganweisungen zählt der Programmzähler ab der Adresse weiter, zu der das Programm springt.

Eingangs-MUX

  • Beschreibung der Eingänge: Die Adresse nimmt die Eingabe von den Schaltern 11 bis 15 entgegen. MAR nimmt die Eingabe aus dem als MAR verwendeten 10-Bit-Register. Das Programm steuert, welcher Eingang zum Ausgang geleitet wird.
  • Beschreibung der Ausgänge: Ausgang leitet den ausgewählten Eingang an das RAM weiter.
  • Gesamtplatz im System: Dieser MUX bestimmt, ob die Adresse von den Schaltern oder dem Bus zum RAM geleitet wird. Im Programm-Modus wird die Adresse von den Schaltern geroutet und im Run-Modus wird die Adresse vom Bus geroutet.

ramMUX

  • Beschreibung der Eingaben: userInput ist die Eingabe, die der Benutzer während des Programmiermodus eingibt. aRegInput sind die im A-Register enthaltenen Daten, die während einer Verschiebeoperation verwendet werden. control ist die Auswahl für diesen MUX.
  • Beschreibung der Ausgänge: Ausgang ist der 10-Bit-Dateneingang zum RAM.
  • Gesamtplatz im System: Dieser MUX gibt die 10-Bit-Eingangsdaten aus, die im RAM-Modul verwendet werden. Wenn das Steuerbit hoch ist, gibt der MUX die Daten aus, die der Benutzer im Programmiermodus eingegeben hat. Wenn das Steuerbit niedrig ist, gibt der MUX die Daten auf dem Steuerbus aus.

ramModul

  • Beschreibung der Eingänge: inputData sind die Daten, die im RAM gespeichert werden. inputAddress ist der Ort, an dem die Daten gespeichert werden. Programm zeigt an, ob sich der Computer im Programm- oder Ausführungsmodus befindet. readWrite zeigt an, ob ein Lese- oder Schreibvorgang stattfindet. notCE ist das Steuerbit für das RAM-Modul. move zeigt an, dass ein Verschiebevorgang ausgeführt wird.
  • Beschreibung der Ausgänge: outputDataToBus sind die Daten, die vom RAM zum Bus gehen. outputData und output Address sind die Daten und die Adresse, die an das Befehlsregister gehen.
  • Gesamtplatz im System: Der RAM ermöglicht die Programm- und Datenspeicherung im Speicher vor einem Programmlauf. Sobald das Programm läuft, empfängt der RAM eine Adresse vom MAR und gibt die Daten an dieser Adresse an den Bus aus.

AdresseROM

  • Beschreibung der Eingaben: opCode ist die Eingabe, die die Adresse des Opcodes enthält, der vom Computer ausgeführt wird
  • Beschreibung der Ausgänge: opCodeStart ist die Speicheradresse, die die erste Mikrobefehlsstelle des entsprechenden opCodes anzeigt.
  • Gesamtplatz im System: Dieses Modul nimmt den zwischengespeicherten Mikrobefehl und gibt den Speicherplatz aus, der dem Beginn dieser Mikrobefehlssequenz entspricht.

ringZähler

  • Beschreibung der Eingänge: reset setzt den Zähler auf 100000 (der erste "T-Zustand") zurück. Clk erhöht den Zähler bei einer fallenden Taktflanke um eins. NOP zeigt an, dass der aktuelle Zustand/Zyklus ein Zyklus "kein Betrieb" ist.
  • Beschreibung der Ausgänge: count ist der Ausgang des Zählers.
  • Gesamtplatz im System: Der Ringzähler steuert den voreinstellbaren Zähler und beschreibt die sechs Mikroschritte in jedem Befehlszyklus (T1-T6).

preCounter

  • Beschreibung der Eingänge: opCodeStart ist der Speicherplatz der Mikrobefehle für den ausgeführten opCode. T1 setzt den Zähler auf 0 zurück, wenn er hoch ist. Wenn T3 hoch ist, wird opCodeStart geladen und die Zählung wird von dieser Stelle für die verbleibenden 3 Zyklen (T4-T6) fortgesetzt. Clr setzt den Zähler auf 0. Clk erhöht den Zähler bei einer fallenden Flanke um eins.
  • Beschreibung der Ausgänge: controlWordLocation gibt den Speicherplatz des auszuführenden Steuerworts aus.
  • Gesamtplatz im System: Jeder Op-Code hat 3 Mikrobefehle. Der Zähler inkrementiert um 1 beginnend bei 0 für die ersten 3 Zyklen (Fetch-Zyklus). Der Zähler wird dann vom Ringzähler getriggert, um die Adresse auf opCodeStart zu laden, und wird für die verbleibenden 3 Zyklen um 1 erhöht. Auf diese Weise steuert der preCounter die Abfolge der auszuführenden Mikrobefehle.

controlROM

  • Beschreibung der Eingänge: controlWordLocation ist die Adresse des controlWords, das das controlROM ausgibt. NOP zeigt an, dass es sich bei dem Standort um einen Standort "kein Betrieb" handelt.
  • Beschreibung der Ausgänge: controlWord ist das Steuerwort, das die verschiedenen Computermodule aktiviert/deaktiviert, um eine gewünschte Operation auszuführen.
  • Gesamtplatz im System: Dieses Modul dekodiert den Speicherplatz aus dem preCounter und gibt das ControlWord für die gewünschte Operation aus.

ALU

  • Beschreibung der Eingänge: A und B sind die Eingänge von Register A und Register B, an denen die ALU die arithmetischen und logischen Operationen durchführt. Wenn Subtract aktiv ist, zeigt dies an, dass B von A subtrahiert wird.
  • Beschreibung der Ausgänge: Ergebnis ist das Ergebnis der Addition von A und B oder der Subtraktion von B von A. Die Ausgänge größer als, kleiner als und gleich zeigen an, ob (AB oder A=B) und werden im bedingten Sprungmodul verwendet. error zeigt einen Überlauf oder Unterlauf an, wenn er aktiv ist.
  • Gesamtplatz im System: Die ALU enthält die Logik für die vom Computer ausgeführten arithmetischen und logischen Operationen. Dieses Modul kann zwei 10-Bit-Binärzahlen addieren und subtrahieren. Die ALU kann auch bestimmen, ob A>B, A

bedingtJmp

  • Beschreibung der Eingänge: inputCount wird verwendet, um den aktuellen Zählerstand zu speichern. inputAddress wird verwendet, um die Adresse zu speichern, zu der gesprungen werden würde. loadFromRegister, wenn Low inputAddress zwischenspeichert. loadCount, wenn Low inputCount zwischenspeichert. Wenn outputEnable niedrig ist, wird der Ausgang auf die Adresse gesetzt, um zu.gT, iT und eQ zu springen, um festzustellen, welche Bedingung überprüft wird. moreThan, lessThan und equalTo sind die Eingänge der ALU, die das Ergebnis des Vergleichs zwischen A und B anzeigen. Bei der steigenden Taktflanke von Clk werden inputCount und inputAddress in Register gelesen.
  • Beschreibung der Ausgänge: outputJmp ist die Adresse, die der Programmzähler einliest.
  • Gesamtplatz im System: Dieses Modul verarbeitet bedingte und nicht bedingte Sprünge für den Computer. Basierend auf den Eingaben gT, iT und eQ bestimmt das Modul, auf welche Bedingung geprüft werden soll und ob diese Bedingung wahr oder falsch ist. Wenn die Bedingung wahr ist, wird die Adresse des Befehls ausgegeben, zu dem gesprungen werden soll, andernfalls gibt er den Zählerstand des nächsten Befehls aus.

binToBCD

  • Beschreibung der Eingänge: Nummerieren Sie die 10-Bit-Zahl, die in eine binär codierte Dezimalzahl umgewandelt werden soll.
  • Beschreibung der Ausgänge: Hunderter der Stelle an der Hunderterstelle der Binärzahl. Zehntel der Ziffer an der Zehnerstelle der Binärzahl. Einsen die Ziffer an der Einerstelle der Binärzahl.
  • Gesamtplatz im System: Dieses Modul wandelt die 10-Bit-Zahl aus dem Ausgaberegister in BCD um, damit unser vierstelliger Anzeigetreiber die Zahl dezimal auf der 7-Segment-Anzeige anzeigt.

vierstelliger Treiber

  • Beschreibung der Eingänge: Nummer ist der 16-Bit-Binäreingang, der an den Decoder angesteuert wird. inClk ist die interne Clock des Basys Boards und wird für einen Clock-Teiler verwendet. RST setzt die zum Ansteuern der Ziffern verwendete Uhr zurück.
  • Beschreibung der Ausgänge: Anode bestimmt, welche Ziffernstelle beleuchtet wird. digit ist die Eingangsnummer des Decoders.
  • Gesamtplatzierung im System: Dieses Modul treibt den Decoder an, die BCD-Nummer an das Display auszugeben.

Decoder

  • Beschreibung der Eingaben: Eingabenummer ist die Ziffer, die vom Treiber kommt und dekodiert wird.
  • Beschreibung der Ausgänge: Kathoden bestimmt, welche Kathoden eingeschaltet werden, um die gewünschte Ziffer anzuzeigen.
  • Gesamtplatzierung im System: Dieses Modul dekodiert die Ziffer, die auf der 7-Segment-Anzeige angezeigt werden soll.

vierstelliges Display

  • Beschreibung der Eingänge: Zahl ist die Zahl, die auf der 7-Segment-Anzeige angezeigt werden soll. error zeigt an, wann das Display "Err" anzeigen soll. Clk ist das Taktsignal, auf dem das Display läuft. Dieses Signal muss etwa 60 Hz betragen, damit das Display alle 4 Stellen gleichzeitig anzeigen kann.
  • Beschreibung der Ausgänge: Anode bestimmt, welche Ziffernstelle aktiviert ist. Kathode bestimmt, welche Kathoden aktiviert werden, um die gewünschte Ziffer anzuzeigen.
  • Gesamtplatz im System: Dieses Modul zeigt eine Zahl auf der 7-Segment-Anzeige an. Informationen darüber, welche Kathoden und Anoden aktiviert werden, um das Display zu verwenden, finden Sie in der Bedienungsanleitung der Basys 3-Platine. Wenn das Fehlerbit High ist, zeigt das Display "Err" an.

AusgangMUX

  • Beschreibung der Eingänge: progModeInput bestimmt, welche LEDs während des Programmiermodus eingeschaltet werden. runModeInput bestimmt, welche LEDs während des Run-Modus eingeschaltet werden. modeSelect ist das Auswahl- oder Steuerbit für den MUX.
  • Beschreibung der Ausgänge: ledOutput zeigt an, welche LEDs eingeschaltet werden.
  • Gesamtplatzierung im System: Abhängig vom Modus, in dem sich der Computer befindet (Programm oder Rum), schaltet der MUX verschiedene LEDs ein. Im Programmmodus (modeSelect ist '0') schaltet der MUX die LEDs ein, die dem Speicherort des Computers und dessen Inhalt ähneln. Im Run-Modus (modeSelect ist '1') wird der MUX zum Debuggen verwendet, kann aber auch so eingestellt werden, dass er alles andere anzeigt.

UhrTeiler

  • Beschreibung der Eingänge:stop liest die fünf MSB-Bits vom Bus, um einen Haltbefehl ('11111') zu erkennen und stoppt die Uhr. inputClk ist das interne Taktsignal des Basys 3-Boards.
  • Beschreibung der Ausgänge: oututClk ist die neue Uhr, die verlangsamt wurde.
  • Gesamtplatz im System: Diese Uhr wird verwendet, um den Computer zu verlangsamen, damit der Benutzer feststellen kann, was vor sich geht. Der Takt kann deutlich schneller laufen, ist aber aktuell auf 2 Hz eingestellt.

triStateBuffer

  • Beschreibung der Eingänge: Din ist der 5-Bit-Eingang, der in den Puffer geht. Ep ist das Steuerbit.
  • Beschreibung der Ausgänge: Dout ist der 5-Bit-Ausgang des Puffers
  • Gesamtplatzierung im System: Wenn das Steuerbit Ep aktiv ist, gibt der Puffer den Eingang aus. Wenn das Steuerbit nicht aktiv ist, gibt der Puffer nichts aus.

tenBitDRegister

  • Beschreibung der Eingänge: Dbus ist der Eingang, an den das Register gerichtet ist. Mit Clk kann das Register Daten bei einer steigenden Taktflanke einlesen. ARST setzt das Register asynchron auf 0. Wenn outputEnable niedrig ist, wird der Inhalt des Registers ausgegeben. Wenn readIn niedrig ist, hält das Register Dbus an der steigenden Taktflanke.
  • Beschreibung der Ausgänge: Qbus ist der Ausgang des Registers
  • Gesamtplatz im System: Das Register wird im gesamten Computer mehrmals verwendet und dient zum Speichern von Informationen bei der Durchführung von Operationen.

fünfBitDRegister

  • Beschreibung der Eingänge: Dbus ist der Eingang, an den das Register gerichtet ist. Clk ermöglicht dem Register, Daten bei einer steigenden Taktflanke einzulesen. ARST setzt das Register asynchron auf 0. Wenn outputEnable niedrig ist, wird der Inhalt des Registers ausgegeben. Wenn readIn niedrig ist, hält das Register Dbus an der steigenden Taktflanke.
  • Beschreibung der Ausgänge: Qbus ist der Ausgang des Registers.
  • Gesamtplatz im System: Das Register wird im gesamten Computer mehrmals verwendet und dient zum Speichern von Informationen bei der Durchführung von Operationen.

Schritt 3: Code

Unten ist ein Ordner mit den Einschränkungs- und Quelldateien für den 10-Bit-Computer.

Schritt 4: Demo- und Beispielcode

Das obige Video zeigt, wie Sie den 10-Bit-Computer auf dem Basys 3 FPGA-Board programmieren. Ein PDF mit den Op-Codes und einem Beispielprogramm ist ebenfalls unten angehängt.