Dies ist die Dokumentation zu meiner Studienarbeit unter dem Titel "Entwurf, Realisierung und Dokumentation eines Chipsatzes für einen Einplatinenrechner mit variabler CPU".

Eine kurze Zusammenfassung des Themas bietet die Einleitung.

Nachschlagen in vier Gliederungsebenen kann man im ausführlichen Inhaltsverzeichnis.

Die wichtigsten Kapitel sind diese:

1 Die Mikrorechner-Platine

1.1 Ziele des Projektes
1.2 Aufbau des Mikroprozessorboards (MPB)

2 Das Hilfs-FPGA

2.1 Spezifikation
2.2 Spezifikation im Detail

2.2.1 Kommandowörter des Interfaces zwischen PC und Hilfs-FPGA
2.2.2 Kommandos des Interfaces zwischen PC und Hilfs-FPGA
2.2.3 Eingänge
2.2.4 Bidirektionale Signale
2.2.5 Ausgänge

2.3 Aufbau und Arbeitsweise der Funktionseinheiten

2.3.1 Das Top-Level-Design "ctrl_pur.vhd"
2.3.2 Das Interface zum PC "pc_if.vhd"
2.3.3 Die Ansteuerung des 20x2-Zeichen-Displays "display.vhd"

2.4 Sonstiges

3 Schaubilder

4 VHDL-Quelltexte

(als gepacktes TAR-Archiv verfügbar)

Zurück zu Carstens Homepage geht es hier.


Studienarbeit

Entwurf, Realisierung und Dokumentation eines Chipsatzes für einen Einplatinenrechner mit variabler CPU


Carsten Kelling

Universität Hamburg, Fachbereich Informatik
Arbeitsbereich Technische Grundlagen der Informatik
Vogt-Kölln-Str. 30, D-22527 Hamburg
Email: 1kelling@informatik.uni-hamburg.de

Hamburg, im Februar 1996





Carsten Kelling

Ratiborweg 16
22043 Hamburg

Tel.: 6549 36 61
Fax: 653 22 13
Email: 1kelling@informatik.uni-hamburg.de


Für Alke

Viel übrig bleibt zu tun,
möge nur keiner lässig ruhn!
Goethe


Danksagung

An dieser Stelle möchte ich mich sehr herzlich bei allen bedanken, ohne deren Unterstützung weder das Hilfs-FPGA noch seine hier vorliegende Dokumentation hätten zu Ende entwickelt werden können.

Mein besonderer Dank gilt hierbei Norman Hendrich, dem Betreuer dieser Arbeit, für seine Unterstützung und seine stete Bereitschaft, mir Details der Spezifikation zur erklären und Hinweise für deren Umsetzung zu geben.

Ebenso intensiv zu Dank verpflichtet bin ich Bernd Schütz, der viel Zeit in den Aufbau des Mikroprozessorboards investierte und erster Ansprechpartner für technische Fragen war.

Unverzichtbar für das Fortschreiten der Arbeiten war auch Manfred Grove, der die Software zur Steuerung des Hilfs-FPGAs schrieb, wartete und den sich wandelnden Bedürfnissen anpasste.

Den beiden letztgenannten gebührt auch mein Dank für die großartige Unterstützung bei der Suche nach Fehlern im Hilfs-FPGA oder auf dem Mikroprozessorboard per Oszilloskop und Logikanalysator.

Ich danke allen Mitarbeitern des Arbeitsbereiches TECH für ihre Unterstützung, vor allen Dingen aber für die gemeinschaftliche Weiterentwicklung der Spezifikation des Hilfs-FPGAs und ihre psychologische Festigung meiner Person durch ihre kollektive Anwesenheit bei meinen ersten Versuchen mit der Wrap-Pistole.

Ich danke Microsoft für eine heimische, benutzerfreundliche Alternative zu TEX.

Allen fleißigen Korrekturlesern, als da wären Bernd Schütz, Norman Hendrich, Alke und die Fehlerkorrektur von MS Word sei ein "Danke schön!" ausgesprochen; die ersten drei bemängelten dabei nicht nur Rechtschreibfehler, sondern gaben wichtige Hinweise zu Layout und Lesbarkeit, wissenschaftlichem Stil und selbstverständlich den harten Fakten des Inhaltes.

Ich danke Alke, meiner steten Ablenkung wie Motivation.


Einleitung

In üblichen Personalcomputern werden aus Platz- und Kostengründen Großteile der neben den ICs mit allseits bekannten Aufgaben (wie CPU, Speicher, I/O) notwendigen Logik in sogenannten Chipsätzen zusammengefaßt, die wenige Bausteine umfassen. Es handelt sich hierbei meist um kundenspezifische Schaltungen, die für eine Vielzahl von Prozessoren mit identischem Pin-Layout nutz- oder anpassbar sind. Die hohe Logikkapazität solcher ICs ermöglicht im Vergleich zu "glue logic" auch die Implementation aufwendiger Verwaltungs- und Überwachungsfertigkeiten.

Am Arbeitsbereich Technische Grundlagen der Informatik wurde im Sommersemester 1995 das Projekt "Entwurf eines Mikrorechners" durchgeführt, dessen Teilnehmer einen Mikroprozessor entwerfen sollten. Als Testumgebung wurde die sogenannte Mikrorechner-Platine spezifiziert und entworfen, bestückt mit Standardkomponenten und ausgerüstet mit einer Kabelverbindung zu einem gewöhnlichen PC. Für einen projektierten Betrieb als Einplatinenrechner enthielt das Board weiterhin ein ASCII-kompatibles LCD-Display mit 20x2 Zeichen Anzeigefläche und 20 einfache Drucktaster. Das Aufbringen eines neuen Prozessor-Designs auf die Platine ist ohne Hardwareaustausch möglich durch die FPGA-Technologie von programmierbaren Logikbausteinen (Altera FLEX8000-Familie, Modell 81500, SRAM-basiert, vor Ort programmierbar, ca. 1200 nutzbare Flipflops).

Für alle Steuerungs- und Überwachungsaufgaben enthält die Mikrorechner-Platine einen zweiten FPGA-Baustein (Modell 81188, ca. 1000 nutzbare Flipflops), das sogenannte Hilfs-FPGA, in der Funktion eines Chipsatzes. Es arbeitet mit verschiedenen, nur im Pin-Layout gleichen, Prozessoren zusammen und erledigt dabei u.a. folgende Aufgaben:

Die vorliegende Dokumentation beschreibt kurz die gesamte Mikrorechner-Platine (Kap. 1), danach die Spezifikation des Hilfs-FPGAs in Überblick (Kap. 2.1) und Detail (Kap. 2.2). Es folgen Informationen zur Realisierung und Erläuterungen der Quellcodes der Hardwarebeschreibung (Kap. 2.3), anschließend "Sonstiges" (Kap. 2.4). Die vorletzte Sektion (Kap. 3) hält Schaubilder bereit: Eine Übersicht der Mikrorechner-Platine, Timing-Diagramme, Blockschaltbilder, Zeichnungen der verwendeten endlichen Automaten und deren Abhängigkeiten. Abschließend (Kap. 4) folgen die Quellcodes der Hardwarebeschreibung.


INHALTSVERZEICHNIS

1 Die Mikrorechner-Platine

1.1 Ziele des Projektes

1.2 Aufbau des Mikroprozessorboards (MPB)

1.2.1 Aufzählung aller Bauteile
1.2.2 Bauteile im Detail

2 Das Hilfs-FPGA

2.1 Spezifikation

2.2 Spezifikation im Detail

2.2.1 Kommandowörter des Interfaces zwischen PC und Hilfs-FPGA

2.2.2 Kommandos des Interfaces zwischen PC und Hilfs-FPGA

2.2.2.1 Halt
2.2.2.2 Go
2.2.2.3 Single Step
2.2.2.4 Single Instruction
2.2.2.5 Store Address
2.2.2.6 Store Data
2.2.2.7 Write RAM
2.2.2.8 Read RAM
2.2.2.9 Read Register
2.2.2.10 Reset Processor
2.2.2.11 Eval Keys/Don't Eval Keys
2.2.2.12 Config Start
2.2.2.13 Config Data
2.2.2.14 Config End
2.2.2.15 Report Status
2.2.2.16 Abort

2.2.3 Eingänge

2.2.3.1 reset_unsync
2.2.3.2 clk, clk_invers
2.2.3.3 progr_m_status
2.2.3.4 m_astrobe
2.2.3.5 m_reg_ack
2.2.3.6 m_halt_ack
2.2.3.7 progr_conf_done
2.2.3.8 m_obf_unsync
2.2.3.9 ibf_unsync
2.2.3.10 tast_reihe
2.2.3.11 disp_d7_in

2.2.4 Bidirektionale Signale

2.2.4.1 databus(15 downto 0)
2.2.4.2 address(19 downto 0)
2.2.4.3 pc_if_data(7 downto 0)
2.2.4.4 m_oe
2.2.4.5 m_we

2.2.5 Ausgänge

2.2.5.1 m_ack
2.2.5.2 m_stb
2.2.5.3 disp_d(6 downto 0)
2.2.5.4 disp_e
2.2.5.5 disp_rw
2.2.5.6 disp_rs
2.2.5.7 clk1_democom, clk2_democom
2.2.5.8 reset_democom
2.2.5.9 m_highz
2.2.5.10 chipsel_sram, chipsel_pio, chipsel_sio, chipsel_rom
2.2.5.11 progr_m_config
2.2.5.12 progr_dclk
2.2.5.13 progr_data
2.2.5.14 m_reg_req, reg_select(3 downto 0)
2.2.5.15 m_halt
2.2.5.16 tast_spalte(1 to 5)
2.2.5.17 disp_d7_out, disp_d7_oe

2.3 Aufbau und Arbeitsweise der Funktionseinheiten

2.3.1 Das Top-Level-Design "ctrl_pur.vhd"

2.3.1.1 Das Protokoll für den User Mode des Displays
2.3.1.2 Die Tastatur-Ansteuerung
2.3.1.3 Der Takt für den Mikrorechner: clk1_democom, clk2_democom
2.3.1.4 Die Busfreigabe: m_highz
2.3.1.5 Die Logik mittendrin: a_or_d_changed und pc_if_data
2.3.1.6 Die Synchronisation von Signalen
2.3.1.7 Die Chipselect-Logik
2.3.1.8 Die Multiplexer und Tri-State-Treiber für Adreß- und Datenbus
2.3.1.9 Verwaltung der Ein-/Ausgangspuffer areg_muxout, dreg_muxout und areg_rollin, dreg_rollin
2.3.1.10 Die RAM-Zugriffsmaschine

2.3.2 Das Interface zum PC "pc_if.vhd"

2.3.2.1 Die diverse Logik
2.3.2.2 Die Puffer für die Automatenzustände: c_state_buffer und c_state2_buffer
2.3.2.3 Das Instruktionsregister i_reg
2.3.2.4 Das Konfigurationsregister konf_reg
2.3.2.5 Das Statusregister status_reg
2.3.2.6 Der Multiplexer an pc_if_data_out
2.3.2.7 Der Multifunktions-Zähler counter
2.3.2.8 Die zwei Automaten
2.3.2.9 Vermeidung von Verklemmungen durch Teilparallelität

2.3.3 Die Ansteuerung des 20x2-Zeichen-Displays "display.vhd"

2.3.3.1 Die Pufferung der Zustände des zweiten Automaten: c_state2_buffer
2.3.3.2 Die Beschäftigungsanzeige: user_disp_busy
2.3.3.3 Die Daten und Steuersignale für das Display: disp_d, disp_d7_out, disp_e, disp_rs, disp_rw
2.3.3.4 Die Pufferung von disp_d7: disp_d7_ff
2.3.3.5 Das Einstellen des Betriebsmodus: user_mode_ff
2.3.3.6 Die Pufferung von a_or_d_changed: a_or_d_changed_ff
2.3.3.7 Die darzustellenden Daten: Multiplexer und Wandlung nach ASCII
2.3.3.8 Die zwei Automaten

2.3.4 "A guide to Carsten's VHDL"

2.3.5 Besondere Designentscheidungen im Detail

2.3.5.1 Warum statische RAM-Bausteine (SRAMs)?
2.3.5.2 Taktung der Prozesse - Fehlervermeidung
2.3.5.3 Momentane und maximale Taktfrequenz

2.4 Sonstiges

2.4.1 Anmerkung zur Notation
2.4.2 Altera FLEX8000-Bausteinfamilie
2.4.3 Die Problematik VHDL <-> AHDL
2.4.4 Beliebte Fehler - Hinweise für zukünftige Entwürfe
2.4.5 Unerfüllte Wünsche

3 Schaubilder

3.1 Übersicht Mikroprozessorboard

3.1.1 Blockschaltbild MPB
3.1.2 Detailansicht MPB

3.2 Timing-Diagramme

3.2.1 Speicher lesen
3.2.2 Speicher schreiben

3.3 Blockschaltbilder

3.3.1 Blockschaltbild Hilfs-FPGA
3.3.2 Blockschaltbild PC-Interface
3.3.3 Blockschaltbild Display-Steuerung

3.4 Zustandsautomaten

3.4.1 Automaten im PC-Interface

3.4.1.1 Erster Automat
3.4.1.2 Zweiter Automat

3.4.2 Automaten zur Ansteuerung von Display und Speicher

3.5 Abhängigkeiten der Automaten

3.5.1 Automaten im PC-Interface

3.5.1.1 Erster Automat
3.5.1.2 Zweiter Automat

3.5.2 Automaten zur Ansteuerung von Display und Speicher

4 VHDL-Quelltexte

(als gepacktes TAR-Archiv verfügbar)


FPGA: field programmable gate array, eine Technik für programmierbare Logikbausteine. Diese haben geringe Kapazität (höchstens einige hundert Flipflops) und Geschwindigkeit, sind aber dennoch für Testaufbauten und Prototypen sehr beliebt, da sie direkt in der Entwicklungsstätte programmiert werden; bei EPROM-ähnlichen Techniken ist dies mittels eines Programmieradapters einige hundert Male, bei SRAM-Basierung beliebig oft in situ möglich.

(Benutzen Sie den "Back"-Pfeil Ihres Web-Browsers, um zurückzuspringen.)