Praktikum Informatik 2 für ET/MT/RES
Praktikumsaufgabe
Die Aufgabe ist in Java unter der Java Entwicklungsumgebung BlueJ zu programmieren.
Die Arbeit soll in 2er Gruppen erfolgen, je Gruppe ist ein Beleg anzufertigen, der zur Abnahme mitzubringen ist.
Der genaue Wortlaut der Aufgabe wird hier noch bekanntgegeben!
Implementierungshinweise und Beispiele
Hier erhalten Sie Hinweise zum Lösungsweg und Beispiellösungen für ausgewählte Klassen.
-
Teilaufgabe
Die Klasse FunctionalSimulator.java enthält den in der Aufgabenstellung angesprochenen Rahmen für den ersten Aufgabenteil. Darin ist ein Volladdierer realisiert, der folgendes Ersatzschaltbild haben könnte:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/overview-small.png Alternative text: Volladdierer Image caption: ]
Die Innenschaltung des Volladdierers können Sie folgendem Detailschaltplan entnehmen:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/detail.png Alternative text: VA-Schaltung Image caption: ]
Eine Beispielhafte Ausgabe des Simulators können Sie in dieser Textdatei sehen. -
Teilaufgabe
Die Klasse TimingSimulator.java enthält den in der Aufgabenstellung angesprochenen Rahmen für den zweiten Aufgabenteil. Darin ist ein RS-FlipFlop realisiert, das folgendes Ersatzschaltbild haben könnte:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/overview-timing.png Alternative text: RS-FF Image caption: ]
Die Innenschaltung des RS-FlipFlops können Sie folgendem Detailschaltplan entnehmen:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/detail-timing.png Alternative text: RS-FF Schaltung Image caption: ]
Mit den im Simulator angegebenen Eingabe-Events ergibt sich folgender Signalverlauf:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/timing.png Alternative text: RS-FF Signalverlauf Image caption: ] -
Teilaufgabe
Es sollen nun alle Gattertypen implementiert werden. Bilden Sie aus der Klasse für die Funktion NAND eine Superklasse und leiten Sie davon durch Vererbung die Klassen für die Funktionen NAND, AND, NOR, OR, EXOR, BUF und NOT ab. Prüfen Sie ob sich auch LATCH und FF davon ableiten lassen. Zur Lösung dieser Teilaugabe verwenden Sie bitte die neue Klasse FullTimingSimulator.java in der nun eine neue Schaltung mit mehreren Gattertypen enthalten ist.-
Schaltplan Schaltung 1:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/Schaltung1.png Alternative text: Schaltplan Schaltung 1 Image caption: ]
Die Ausgaben der Simulation dieser Schaltung finden Sie hier -
Schaltplan Schaltung 2:
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/Schaltung2.png Alternative text: Schaltplan Schaltung 2 Image caption: ]
Die Ausgaben der Simulation dieser Schaltung finden Sie hier -
Schaltplan Schaltung 3:
(Klicken Sie auf den Schaltplan um eine detailiertere Darstellung zu bekommen):
[Removed image: http://wwwpub.zih.tu-dresden.de/%7Ess17/studium/sommer/infet2/img/Schaltung3-klein.png Alternative text: Schaltplan Schaltung 3 klein Image caption: ]
Die Ausgaben der Simulation dieser Schaltung finden Sie hier
-
Schaltplan Schaltung 1:
-
Teilaufgabe
In der 4. Teilaufgabe soll nun die Eingabe der zu simulierenden Schaltung und der dazu notwendigen Events aus 2 Dateien erfolgen. Beispiele für diese Dateien sind in der unten folgenden Tabelle zu finden. Aus diesen Beispielen können Sie auch die Syntax der beiden Dateien entnehmen. sehen Sie sich dazu alle Beispiele an, um auch alle Syntaxvarianten zu erkennen! Zum Einlesen der Schaltungsbeschreibung und der Eingabe-Events aus einer Datei können Sie die Klasse DateiLeser.java und ihrer Dokumentation verwenden. Die Hauptaufgabe dabei wird die syntaktische Analyse der einzulesenden Dateien sein. Nach jeder fehlerfrei eingelesenen Zeile sollen dabei, wie im TimingSimulator.java die Gatter und Signale erzeugt und ergänzt werden oder beim Einlesen der Events die Eintragung in die Queue erfolgen. Modifizieren Sie dazu die Klasse FullTimingSimulator.java aus der Aufgabe 3 entsprechend zur Klasse DateiSimulator.java. Zum Test Ihrer Programme benutzen Sie die 4 Beispiele aus der folgenden Tabelle und schaffen Sie sich noch selbst Beispiele zur Testung.
EXOR mit mehr als 2 Eingängen:
Der Ausgang eines EXOR ist 0 (false), wenn eine gerade Anzahl der Eingänge 1 (true) ist. Ist einer ungeraden Anzahl der Eingänge 1 (true), dann ist auch der Ausgang 1 (true). Diese Funktion kann man auch in einer Schleife mit der Anzahl der Eingänge als laufvariable realisieren. Man setzt vor Eintritt in die Schleife den Ausgang auf 0 (false) und bei jedem Eigang der auf 1 (true) steht, invertiert man den Ausgang.
Beispieldateien zum Testen Ihrer Implementierung der 4. Teilaufgabe (Testat)
- Beispiele zur Erläuterung des Formats der Datei zur Schaltungsbeschreibung.
-
Beispiele zur Erläuterung des Formats der Datei mit den Eingabe-Events.
Beispiel 1 Events zur Testung Ergebnisse Schaltung Beispiel 1 mit Anzeige der internen Signale Ergebnisse Beispiel 2 Events zur Testung Ergebnisse Schaltung Beispiel 2 mit Anzeige der internen Signale Ergebnisse Beispiel 3 Events zur Testung Ergebnisse Schaltung Beispiel 3 mit Anzeige einiger interner Signale Ergebnisse Beispiel 4 Events zur Testung Ergebnisse Schaltung Beispiel 4 mit Anzeige der internen Signale Ergebnisse
Praktikumsbeleg
Zur Praktikumsverteidigung ist ein Beleg abzugeben, der folgendes enthalten soll:
-
- Beschreibung Ihres Lösungsansatzes zur Aufgabe Logiksimulator
- Probleme und Schwierigkeiten, die sich bei der Lösung der Aufgabe ergaben
- Zeitverbrauch: Zur Einarbeitung, für Programmierung und Test und zur Erstellung des Beleges.
- Den ausgedruckten Quelltext des lauffähigen Programmes
- Ein vorbereitetes Beispiel zur Vorführung mit einer Skizze der Schaltung und den bereits ermittelten Ergebnissen.
- Eine formale oder informelle Darstellung des Zusammenspiels der Java-Klassen Ihres Programmes, z.B. UML-Diagramme, Klassendiagramme.
Zur Programmverteidigung wird erwartet, dass Ihr Programm fehlerfrei und auf den Rechnern im Kabinett E069 vorführbar vorliegt.
Ihre Testschaltung können Sie auch vorher mit dem LogiFlash Simulator testen.
Die häufigsten Fehler bei der Lösung von Teil 2 bis Teil 4 der Praktikumsaufgabe
Da ab der Aufgabe 2 Rückkopplungen erlaubt sind, darf das Ergebnis einer Gatterberechnung nur noch dann ein Event erzeugen, wenn sich der Ausgang gegenüber der letzten Berechnung geändert hat. Wird dies nicht beachtet, dann kommt es bei Rückkopplungen zu einer Endlosschleife, da ständig neue Events erzeugt werden. Um festzustellen ob sich der Ausgang geändert hat, muss man sich im Gatter (Nand) eine Variable schaffen, in der das Ergebnis der letzten Berechnung steht. Ein zugreifen auf das zum Output des Gatters gehörende Signal ist dafür nicht möglich, denn die letzte Berechnung muss dort noch nicht angekommen sein, wenn der Abstand zwischen 2 Eingangsänderungen kleiner als die Gatterlaufzeit ist. Ein solches Ereignis gibt es im Beispiel1 am Gatter G4 (Exor). Zur Zeit 28 wird das Signal i2 = 0 und zur Zeit 30 wird das Signal cin = 1, da das Exor eine Verzögerungszeit von 8 hat kann das Ergebnis der Berechnung zum Zeitpunkt 28 bei der Berechnung des Outputs zum Zeitpunkt 30 noch nicht im Signal s angekommen sein.
Ein weiterer Fehler wird häufig gemacht, bei der Behandlung von mehreren Eingangsänderungen zur gleichen Zeit an einem Gatter. Dies ist im Beispiel 1 zur Zeit 150 der Fall, wo a = 1 und b = 0 wird Daraus darf kein Event entstehen!, da der Ausgang des Exor G2 sowohl für a = 0 und b = 1 als auch für a = 1 und b = 0 den Wert 1 haben muss. Hier entstehen ohne zusätzliche Maßnamen für den Ausgang 2 Events mit der gleichen Zeit, was ja ein Widerspruch ist. Entweder man bricht die Berechnung für einen Gatterausgang ab, wenn in der EventQueue noch weitere Events mit der gleichen Zeit und für das gleiche Gatter stehen, oder man muß beim Eintragen in die Queue prüfen, ob schon ein Event für diesen Ausgang mit der gleichen Zeit vorhanden ist und muß diesen dann löschen und den Neuen nur eintragen, wenn er eine Veränderung gegenüber der letzten Berechnung mit der vorhergehenden Zeit darstellt.