Viele Absolventen - und Bachelor -Level-Kurse in Very Large Scale Integration - VLSI - haben Projekte in Bezug auf einen oder mehrere Aspekte des Designs von Mikroprozessoren . Der Schwerpunkt dieser Projekte ist es, die Fähigkeit des Schülers , theoretisches Wissen in einer praktischen Umfeld anzuwenden testen. Solche Projekte helfen den Studenten sammeln Erfahrungen mit Software und Tools in VLSI -Design verwendet. Ziel sollte es sein , damit die Projekte einfach genug , so dass die Schüler können sie innerhalb einer angemessenen Frist zu vervollständigen, während der Präsentation eine Herausforderung für die Schüler , über dem Lehrbuch denken. Einfache Reduced Instruction Set Computing - RISC - Prozessor
In diesem Projekt wird vom Studenten erwartet, eine sehr einfache RISC-Prozessor erstellen. Der Artikel verarbeitet sechs Befehle : addieren, subtrahieren, multiplizieren, dividieren , laden und speichern . Es sei angenommen , dass es drei Register : R1, R2 und R3 . Die arithmetischen Operationen - nämlich addieren, subtrahieren , multiplizieren und dividieren - basieren auf den Werten in den Registern R1 und R2 gespeichert sind, durchgeführt . Daher muss vor der Durchführung der Operation müssen die Register geladen werden. Der Ausgang der Operation wird im Register R3 gespeichert. Bevor Sie eine neue Operation , sollte der Wert von R3 in dem Speicher abgelegt werden.
Für dieses Projekt , einen Speicher umgesetzt werden sollten . Der Speicher kann in Daten-und Befehls Teil partitioniert bzw. werden. Der RISC-Prozessor sollte Anweisungen aus dem Befehl - Speicher ab Adresse 0x0 durchlesen einem maximalen Wert , und führen Sie die entsprechenden Maßnahmen . Speicher mit einem Satz von Anweisungen für die Prüfung geladen werden kann .
Pipelined RISC Processor
In diesem Projekt sollte der RISC-Prozessor über eine Pipeline- Prozessor implementiert werden . Ein typischer RISC-Prozessor verfügt über fünf Pipeline- Stufen : " Fetch ", " Decode ", " Ausführen ", "Memory " und "Write Back" . Rohr - Futter erlaubt mehrere Anweisungen , die bei der gleichen Zeit aktiv sein , damit die Verbesserung der Systemleistung.
Pipeline- Prozessoren von Blasen oder Zeit Zyklen, in denen keine sinnvolle Operation durchgeführt wird leiden. In einer idealen Prozessor -Pipeline , wird in allen Stufen der Pipeline vollständig in einem Zeit - Zyklus angenommen , und es besteht keine Abhängigkeit von einem Befehl auf der anderen . Manchmal wird jedoch das Ergebnis der vorhergehenden Anweisung durch die nächste Anweisung benötigt werden. In solchen Fällen können keine nützliche durchgeführt , bis der vorherige Befehl abgeschlossen wird . Studierende, die die Prozessor-Architektur zu verändern, um diese Totzyklen minimieren können zusätzliche Kredit gegeben werden.
Performance-Analyse von Recheneinheiten
Für dieses Projekt verschiedene Implementierungen die arithmetischen Funktionen können für Gate -Count gegen Leistungsvorteile untersucht werden. Zum Beispiel könnte der Addierer als Ripple - Carry-Addierer oder ein Carry-Look -Ahead- Addierer implementiert werden. A Ripple -Carry- Addierer Wellen den Übertrag von einer Stufe zur anderen hinaus , und das Endergebnis ist verfügbar, wenn die letzte Stufe hat die Zugabe durchgeführt . Dieser Zusatz ist langsam in dem Sinne, dass es viele Zyklen für das Ergebnis braucht, um zur Verfügung. Allerdings kann der Ripple-Carry Addierer mit einer niedrigen Gate -count umgesetzt werden.
Carry-Look -Ahead- Addierer bestimmt den Wert des Carry einer Addition vor der Zeit. Da der Übertrag vor der Zeit berechnet wird, kann der Addierer berechnet die zu weniger Zyklen . Allerdings führt der Carry-Look -Ahead- Addierer mehr Berechnungen und ist daher hoch auf Gate -Count .
Der Multiplikator kann als Stand -Multiplikator oder shift- basierte hinzufügen Multiplikator umgesetzt werden. Die Shift- basierte Schema hinzuzufügen ist die regelmäßige Papier - und-Bleistift- Verfahren zum Verschieben und Hinzufügen wiederholt , bis das Ergebnis ist abgeschlossen. Die Stand -Multiplikator stellt den Multiplikator in einer optimalen Art und Weise deutlich zu reduzieren die Anzahl der Additionen erforderlich. Daher dauert es weniger Zeit Anzahl der Zyklen , um das Endergebnis zu berechnen.
Einfache Cache -Controller
Eine einfache Cache-Controller aufgebaut werden kann . Der Cache-Controller könnte Vier-Wege - assoziativ, mit einem Least- recently-used - LRU - basierter Ersatz Politik . Wenn ein Cache-Block ersetzt werden muss , die LRU-Strategie die zuletzt verwendeten Cache-Block wählt , und ersetzt diesen Block .
In einem Vier-Wege- Satz-assoziativen Cache kann jeder Speicherblock in einem platziert werden vier Stellen im Cache. Verglichen mit dem direkt abgebildeten Cache, in dem jeder Speicherblock an genau einer Stelle in dem Cache , das Vier-Wege gefunden werden kann Satz-assoziativen Cache bietet mehr Flexibilität für den Block Lage und dementsprechend bessere Cache-Leistung .
Der Cache sollte sowohl mit Write-Back- und Write-Through- Richtlinien umgesetzt werden. Wenn die Daten im Cache modifiziert wird , die Write-Back- Richtlinien-Updates der Hauptspeicher nur dann, wenn der Cache-Block ersetzt. Auf der anderen Seite , die Write-Through- Richtlinien-Updates der Hauptspeicher jedes Mal die Daten im Cache modifiziert wird.
Einfache Cache Coherent -System
Eine einfache zwei - Prozessor-Cache- kohärentes System mit modifizierter exklusiv- Shared- ungültig -basierten System implementiert werden kann. Jeder Prozessor hat seinen eigenen Cache-Speicher. In diesem Schema , eine Linie oder ein Block von Cache-Speicher können in einer der vier Staaten nämlich sein " modifiziert ", " exklusiv ", " gemeinsam " oder "ungültig ". Eine Linie ist in " Modified"-Zustand , wenn die Daten in dieser Zeile ist nur gültig in den Cache des Prozessors. Eine Linie ist "exklusiv" , wenn die Daten in dieser Zeile in dem Cache des Prozessors sowie in den Hauptspeicher . Eine Linie wird " geteilt ", wenn die Daten gültig sind in den Cache der beiden Prozessoren . Eine Linie ist "ungültig" , wenn die Daten nicht im Cache des Prozessors gültig.
Sowohl Directory-basierten Cache-Kohärenz und Snooping -basierten Cache-Kohärenz umgesetzt werden sollte , und die Skalierbarkeit von jedem Algorithmus mit zunehmender Anzahl von Prozessoren sollte untersucht werden. Ein Verzeichnis -basierte Cache-Kohärenz- Mechanismus verwaltet ein Verzeichnis der Zustand des Cache in den Hauptspeicher . Dieses Verzeichnis wird dann verwendet, um Nachrichten an den Prozessor über den Zustand jedes Cache-Blocks zu senden. In einem Snoop -basierte Schema , jede Änderung der Cache-Block führt zu einem Broadcast-Mechanismus , durch den Caches der anderen Prozessoren über den Wandel in den Cache-Block benachrichtigt werden .