Praktikum zur Veranstaltung Digitaltechnik
Konzept
Im Laufe der 14 Praktikumstermine ist geplant, einen diskreten Aufbau eines funktionsfähigen Microcontrollers zu erstellen. Dazu gibt es etwa den folgenden "Fahrplan", wobei jeder fett unterlegte Punkt symbolisch für einen Praktikumstermin steht.
Bei allen Schaltungen und Schaltungsteilen wurde in der Vorbereitung darauf Wert gelegt, möglichst alle Bits, die innerhalb einer Struktur relevant sind, mittels Leuchtdioden zu visualisieren. Bei Abläufen wird in der Regel darauf geachtet, dass diese in einzelnen Schritten durchgeführt werden können. Ist dies nicht praktikabel, so können zeitliche Abläufe auf bis zu 16 Leitungen parallel als binäre Werte gespeichert und angezeigt werden.
- Einführung in die Arbeitsumgebung
- das Werkzeug "Oszilloskop", Darstellung von Zeitabläufen in digitalen Schaltungen
- das Werkzeug "Logikanalyse", simultane Darstellung vieler paralleler Werte
- Übersicht über das "Bauteilelager"
- Übersicht über die Versuchsanordnungen
- Aufbau einfacher Grundschaltungen
- Implementierung kombinatorischer Logik aus einzelnen Gattern
- Kennenlernen der Vielfalt verfügbarer Möglichkeiten (Standardbauteile)
- Einfache Optimierungen
- Formulierung von Optimierungszielen
- klein
- schnell
- komplex
- hierarchisch
- Wiederverwendbarkeit
- ...
- Messung von Zeitverhalten kombinatorischer Logikschaltungen
- Erfahrungen mit grundlegenden Herausforderungen digitaler Schaltungstechnik
- Erkennen des Einflusses von Störgrößen auf das Ergebnis
- Ableitung von Rahmenbedingungen für Funktionalität und max. Geschwindigkeit einer Schaltung
- Versuche mit Basiskomponenten
- Multiplexer (Encoder)
- Demultiplexer (Decoder)
- Bus-Systeme (Geräte-intern) mit hochohmigem Zustand
- Umgang mit sequenziellen Schaltungen
- Anwendung von Registern zum Speichern von Daten
- Nutzung von Schieberegister zur Wandlung zwischen serieller und paralleler Darstellung
- Anwendungen als Zähler und Frequenzteiler
- Erzeugung von Ausgaben zu einem PC
- Empfang von (seriellen) Daten von einem PC
- externe Schnittstellen digitaler Schaltungen
- Eingaben per Taster
- Eingaben per Schalter
- Allgemeine Sensoren
- Ausgaben an Aktoren
- Leuchtdioden (LEDs)
- Motoren
- Tongeber
- Speicherbausteine in digitaler Technik, Busse
- statisches RAM (flüchtiger Speicher, parallel)
- FLASH Speicher (nicht flüchtiger Speicher, parallel)
- EEPROM (seriell angesteuert)
- Endliche Automaten
- Umgang mit der Definition
- Abbildung auf sequenzielle Steuerwerke
- Beispiel an fest programmierten Ablauf, z.B. eine Ampel
- (Nutzung von Zählern, Takten, Eingaben, Speicher!)
Am Ende dieses ersten Blocks von 7 geplanten Terminen sind prinzipiell alle Basisfunktionen bekannt und experimentell vertieft, die zum Aufbau eines tatsächlichen Mikroprozessors und dessen Schnittstellen zur Außenwelt benötigt werden. In den weiteren Praktikumssitzungen sollen diese Kenntnisse nun genutzt werden, um ein Modell eines tatsächlichen Microcontrollers (bzw. einer aktuellen CPU) aus diskreten Komponenten zu erstellen und dieses auch (eingeschränkt) programmieren zu können.
Spätestens von diesem Punkt an folgt das Praktikum nicht mehr direkt den jeweiligen, konzeptionellen Themen der Vorlesung, sondern vertieft bisherige Umsetzungen und addressiert stärker das Zusammenwirken der Komponenten bis zur gewünschten Grundfunktion.
Als Zielarchitektur ist ein MSP430 Clone vorgesehen. Als Referenz wird ein frei verfügbarer Family-User-Guide für eine solchen Microcontroller verwendet. Damit umgehen wir eine Reihe komplexer Herausforderungen in der Implementierung, wie sie z.B. bei der Nachahmung einer ATMega Architektur über das Pipelining zwangsweise auftreten würden. Wir nutzen nun vermehrt höher integrierte Schaltkreise wie z.B. 8-Bit Register, Multiplexer und Demultiplexer, um den Aufwand der Verschaltung in Grenzen zu halten.
- Analyse des Binärcodes und Implementierungsansatz eines Rechenwerks
- Integration der notwendigen Operatoren
- Implementierung eines Statusregisters
- Implementierung eines Multiplexers zur Auswahl der Quell- und Zieloperanden
- Funktionstest der Operanden und der Statusausgabe
- Integration der seriellen Schnittstelle aus Sitzung 4
- Implementierung des Rechenwerks und des "Register-Files"
- Einführung des "Instruction Registers (IR)"
- Nutzung eines "Program-Counters (R0)"
- Vorbereitung des "Stack-Pointers (R1)"
- Demonstration der Konstanten-Register (R2/R3)
- Design des Steuerwerks (1)
- Implementierung des Reset und des ersten Instruction-Fetch
- Decodierung der Instruktion im IR
- Erkennung der Länge der Instruktion (in Ladezyklen)
- Zuführung der Operanden an die ALU
- Design des Steuerwerks (2)
- Ausführung mehrteiliger Ladevorgänge
- Adressberechnung für Sprünge einführen
- Auswertung der Status-Bits
- Implementierung des Stacks (Sichern und Laden der Return-Adresse) bei "call" Anweisungen
- Test des Steuerwerks (1 & 2)
- Spezifikation eines Testablaufs für die implementierten CPU-Befehle
- Durchführung der Tests, ggf. Behebung von Fehlern
- Verwendung der Entwicklungsumgebung zur Erzeugung und Laden einfacher Befehlsfolgen
- Test von Befehlsfolgen
- Test der seriellen Schnittstelle
- Weitere Optimierung und Tests (1 & 2)
- Schreiben von kleinen Testprogrammen in Assembler und C/C++
- Weitere Aufgaben nach Bedarf
Die letzten beiden Termine dienen der Aufarbeitung noch offener Punkte oder, bei Interesse, dem Ergänzen zusätzlicher Funktionen.