2 Das Hilfs-FPGA
Klassische Hauptplatinen von Mikrorechnern enthalten
neben dem Zentralprozessor und eigenständigen Komponenten wie Schnittstellen-
und Speicherbausteinen stets auch einige "kleinere" digitale
und analoge Elemente für diverse notwendige Aufgaben. Zu diesen gehören
auf analoger Seite die Spannungsversorgung, Taktgenerierung, Treiberbausteine
und Pull Up/Down-Widerstände und auf digitaler Seite Logiken zur
Adreßdekodierung (um z.B. mittels der Chipselect-Leitungen nur die
angesprochenen Bauteile zu aktivieren), zur Behandlung von Unterbrechungsanforderungen
(interrupts) oder zur Ansteuerung von Bussen.
Wegen des in diesem Marktsegment besonders hohen Rationalisierungsdruckes,
aufgrund des zunehmenden Anteils von Gehäuse- und Leitungskosten an den
Gesamtkosten und aus Platzgründen wird die Funktion zumindest der digitalen
"Pfennigbausteine" seit Jahren schon von sogenannten "Chipsätzen"
übernommen. Diese residieren in möglichst wenigen, typischerweise ein bis
drei, Mikrochips und bestimmen im PC-Massenmarkt neben der CPU maßgeblich
das Design sowie die Leistungsfähigkeit eines mainboards; bei solchen
spezifisch gefertigten Chips ist nämlich auch die Komplexität vorhanden,
um z.B. in handelsüblichen PCs die ausgefeilte Ansteuerung von Hauptspeicher
und 2nd-Level-Cache zu übernehmen.
Auf der Mikrorechner-Platine wurde neben der CPU ein weiterer Komplexbaustein
in FPGA-Technik (Altera EPF 81188 aus der FLEX8000-Familie, ca. 1000 nutzbare
Logikzellen, siehe 2.4.1) vorgesehen, um die Aufgaben eines Chipsatzes
zu erfüllen. Dies brachte folgende Vorteile:
- deutlicher Platzgewinn auf der Platine
- erhöhte Übersichtlichkeit des Entwurfs; dem Auge erscheinen nur "große",
eigenständige Einheiten wie RAM, EPROM, I/O.
- Änderungsfreundlichkeit; Änderungen oder Ergänzungen der Spezifikation
des Chipsatzes erfordern kein Auswechseln, Plazieren, (Um-)Verdrahten von
Hardware, sondern nur Veränderungen an der Hardware-Beschreibung (zuzüglich
zugegebenermaßen das Ziehen von neuen Leitungen für neue features).
- erhöhte Komplexität; die Realisierung z.B. des umfangreichen Protokolls
zur Kommunikation mit einem externen PC wäre mit den üblichen unspezifischen
TTL-Gattern o.ä. höchst unhandlich geworden oder hätte von der CPU selbst
übernommen werden müssen.
- Schonung der im Zentralprozessor für dessen eigentliche Funktionalität
zur Verfügung stehenden Chipfläche; Verwaltungsaufgaben und solche, die
für alle Prozessorentwürfe gleich waren, wurden in das Hilfs-FPGA ausgelagert.
Dies ermöglichte für die Projektteilnehmer des weiteren eine Konzentration
auf das Wesentliche und schloß manche Fehlerquellen aus.
2.1 Spezifikation
Die Spezifikation war während der Entstehung des
Hilfs-FPGAs teilweise erheblichen Änderungen unterworfen. Dies hatte mehrere
Gründe:
- hoher Zeitdruck, deswegen auch
- viele am Entwurf beteiligte Personen, was zu Mißverständnissen über
den Stand der Arbeiten führte, aber natürlich auch die "Gesamtkreativität"
erhöhte.
- Die Einsicht in die unter den gegebenen Umständen angemessenste Lösung
erfolgte oft erst in media re.
- Zurückstellung von weniger Wichtigem bis zur Komplettierung der grundlegenden
Funktionen; einige Anforderungen konnten so als von Zeitaufwand oder Logikbedarf
her zu aufwendig erkannt werden und blieben Wünsche (siehe 2.4.4).
Die folgenden Punkte einer Spezifikation sind somit das Endergebnis
eines an der Praxis orientierten Reifeprozesses:
- Schrittweise Beobachtung des Mikrorechners
Um die Tätigkeit der CPU in der Testphase zu überwachen, soll es folgende
Betriebsarten geben:
- running - die CPU läuft mit dem selben Takt wie das Hilfs-FPGA.
- single instruction / halted - die CPU bekommt ebenfalls den
normalen Takt, bearbeitet aber nur genau einen Maschinenbefehl, hält dann
an und meldet dies.
- single step - ist transparent; die CPU läuft wie bei running,
bekommt aber jeweils nur einen Takt, so daß die Bearbeitung der
Maschinenbefehle schrittweise zu beobachten ist.
- SRAM-Interface
Das Hilfs-FPGA soll nicht, wie andere Chipsätze, für das Prozessor-FPGA
alle Speicherzugriffe abwickeln. Vielmehr besitzen sowohl Prozessor als
auch Hilfs-FPGA nach derselben Spezifikation gefertigte Mechanismen, um
SRAM-artigen Speicher zu lesen und zu schreiben. Der Speicher-Zugriffs-Automat
im Hilfs-FPGA dient dem vom Mikroprozessor unabhängigen Lesen (zum Auslesen
von Rechenergebnissen und bei der Fehlersuche) und Schreiben (um überhaupt
erst das auszuführende Programm zu laden und Programmabläufe zu beeinflussen)
des Speichers und der Initialisierung von memory mapped-arbeitenden
Bausteinen (z.B. UART 2681).
- Auslesen von Prozessor-Registern
16 verschiedene interne Register der CPU können angesprochen und ausgelesen
werden. Um vorhandene Datenpfade auszunutzen, kann der Wert des angeforderten
Registers vom Prozessor auf Adreß- oder Datenbus gelegt werden;
beide werden gepuffert und zum PC transferiert, wo man per Software leicht
den gültigen Wert auswählen kann.
- Senden von Hardware-Reset an Prozessor
Die Reset-Leitung des Prozessor-FPGAs soll vom Hilfs-FPGA getrieben
werden; zusätzlich ist es zweckmäßig, den Reset-Impuls mit dem Takt zu
synchronisieren; zu den dadurch verhinderten Fehlern siehe Kap. 2.3.1.6
Die Synchronisation von Signalen.
- Konfiguration
Nach einem Abschalten der Versorgungsspannung verlieren die auf dem
MPB verwendeten programmierbaren Logikbausteine der Altera FLEX8000-Serie
ihre Programmierung, werden zur tabula rasa. Während das für das
Hilfs-FPGA vorgesehene FPGA von einem externen PC oder (im Betrieb als
Einplatinenrechner) aus EPROMs konfiguriert werden soll, soll das größere,
für den Mikrorechner gedachte, FPGA seine Konfigurationssteuersignale und
-daten stets vom Hilfs-FPGA erhalten. Damit ist es möglich, den Prozessor
zur Laufzeit jederzeit durch eine verbesserte oder gänzlich andere Version
zu ersetzen; die dazu notwendigen Programmierdaten soll das Hilfs-FPGA
über das PC-Interface von außen oder aus fest installierten EPROMs erhalten.
In letzterem Falle könnten die EPROMs auch weitere Informationen z.B. zur
Initialisierung des seriellen Schnittstellenbausteines (UART 2681) und
des Speichers (Vektoren, rudimentäres Betriebssystem) enthalten.
- Interface zum PC
Ziel war eine absteigende Kontrollhierarchie PC Hilfs-FPGA Mikroprozessor;
solange das MPB noch nicht als Einplatinenrechner fungieren würde, sollten
alle Kontroll- und Konfigurationsmöglichkeiten des Hilfs-FPGAs (single
step/instruction-Modus, Lesen/Schreiben des Speichers, Auslesen von
Prozessor-Registern, Hardware-Reset, Konfiguration des Prozessor-FPGAs)
bequem durch Software steuerbar sein.
Wichtig von technischer Seite waren hier die Umsetzung der verschieden
Bitbreiten zwischen Bus zum PC und Bussen des MPB und die Ansteuerung des
Schnittstellenbausteines 8255 inklusive Synchronisierung einiger Steuersignale
mit der Clock.
- Adreßdekodierung
Diese Logik soll das Chipselect-Signal für SRAMs, seriellen
I/O-Baustein, parallelen I/O-Baustein und EPROMs liefern, sowie entsprechende,
nur intern verwendete Signale für "Hex-Tastatur" (5x4 Tasten)
und 20x2-Zeichen-Display auf dem MPB. Diese sechs Komponenten werden in
überschneidungsfreien Speicherbereichen eingeblendet.
- Ansteuerung des 20x2-Zeichen-Displays
Im Normalbetrieb sollen die letzte gültige Adresse in der oberen und
das letzte gültige Datum in der unteren Zeile angezeigt werden. Ändert
sich der Wert eines der beiden Busse und wird als gültig erkannt, wird
der neue Wert gepuffert und die Anzeige neu aufgebaut. Im sogenannten User
Mode können beliebige vom Zentralprozessor geschickte Zeichen angezeigt
werden; die Darstellung von Adresse und Datum wird dann unterdrückt.
Alle Funktionen dieser Display-Steuerung sollen über Schreiben oder
Lesen von Speicherstellen erreichbar sein: In eine erste Speicherstelle
wird geschrieben, um den User Mode ein- und auszuschalten, beim
Schreiben in eine zweite übergibt man den Wert des darzustellenden ASCII-
oder Steuerzeichens; diese Pufferung ist notwendig, da das Display im Vergleich
zum Mikroprozessor extrem langsam arbeitet. Wird schließlich eine dritte
Stelle beschrieben, so beginnt die Darstellung des benutzerdefinierten
Zeichens; durch Auslesen dieser Stelle kann man ermitteln, ob das Display
noch arbeitet.
- Abfrage der "Hex-Tastatur" (5x4 Tasten)
Die zwanzig Tasten sollen als je ein Bit in den Speicher eingeblendet
werden. Wird eine Taste gedrückt, wird das korrelierende Bit auf ´1´ gehalten,
bis die Speicherstelle ausgelesen wird.
Eine Realisierung dieser Anforderungen sollte mit möglichst wenigen
Ein- und Ausgängen auskommen, sowie auch das gleichzeitige Drücken mehrerer
Tasten erlauben und dabei Kurzschlüsse verhindern.
- Clock-Generierung
Der Zentralprozessor soll grundsätzlich den gleichen Takt (engl. clock)
wie das Hilfs-FPGA bekommen. Um die Arbeitsweise des Prozessor jedoch beliebig
langsam Schritt für Schritt zu beobachten (single step-Modus), kann
die Clock für die CPU ausgesetzt werden.
- Statusregister
Im Betrieb soll es jederzeit möglich sein, Informationen über aufgetretene
Fehler und momentane Betriebsmodi des Hilfs-FPGAs zum PC senden zu lassen.
Im Einzelnen interessieren dabei: Wartet das Hilfs-FPGA noch auf gewisse
affirmative Signale des Prozessors? In welchem Lauf-Modus (running,
single instruction / halted, single step) befindet sich das Hilfs-FPGA
und damit der Prozessor? War ein über das Interface vom PC empfangener
Befehl illegal oder im momentanen Modus nicht zulässig? Welches Ergebnis
lieferte die letzte Konfiguration des Mikroprozessor-FPGAs?
- Teil-Parallelität
Soll der Mikrorechner in den Modus single instruction / halted
übergehen oder ein internes Register auf Adreß-/Datenbus ausgeben, so hat
er dazu beliebig lange Zeit und bestätigt den Vollzug durch bestimmte Kontrollsignale.
Würden alle über das PC-Interface sendbaren Befehle durch einen
Automaten sequentiell abgearbeitet, wäre somit eine Verklemmung möglich,
falls nämlich die affirmativen Signale ausbleiben oder elektrisch "verlorengehen".
Darum sollen zwei Befehle an der Schnittstelle zwischen PC und Hilfs-FPGA
immer möglich sein und abgearbeitet werden: Erstens muß der Wert
des Statusregisters stets ausgelesen werden können, um eine Situation des
überlangen Wartens überhaupt zu erkennen; desweiteren kann durch die im
Statusregister enthaltene Modus-Information auch erkannt werden, ob sich
das Hilfs-FPGA tatsächlich in der vermuteten Betriebsart befindet. Da nicht
alle Befehle in allen Modi erlaubt sind, kann es ansonsten nämlich passieren,
daß sich das Hilfs-FPGA korrekterweise "verstockt" gibt und Instruktionen
einfach ignoriert. Zweitens muß es immer möglich sein, einen vergeblich
auf Bestätigung wartenden Befehl abzubrechen.
Siehe hierzu und zu unvermeidbaren Verklemmungen auch Kap. 2.3.2.9
.