Praktikum 10

  1. Implementieren Sie den in der Vorlesung skizzierten Simulator für digitale Schaltungen. Beginnen Sie mit den drei logischen Grundfunktionen "logisches-nicht", "logisches-und" und "logisches-oder". Programmieren Sie dann die drei elementaren Funktionseinheiten "inverter", "und-gatter" und "oder-gatter". Realisieren Sie danach die Darstellung der Verbindungsdrähte, wobei Sie die fehlende Prozedur "jede-aufrufen" sowie die Interface-Prozeduren ergänzen. Fügen Sie dann die Prozeduren "verzoegert" und "fortfuehren" hinzu. Entnehmen Sie dazu die Implementierung der Agenda aus der Datei AGENDA.LSP. Programmieren Sie zuletzt eine "Sonde" zur Ausgabe von Signalwerten auf Drähten. Testen Sie Ihre Implementierung an folgendem Beispiel:
    
    (define die-agenda (konstr-agenda))
    (define inverter-verzoegerung 2)
    (define und-gatter-verzoegerung 3)
    (define oder-gatter-verzoegerung 5)
    (define eingabe-1 (konstr-draht))
    (define eingabe-2 (konstr-draht))
    (define summe (konstr-draht))
    (define uebertrag (konstr-draht))
    (sonde 'summe summe)
    (sonde 'uebertrag uebertrag)
    (define (halbaddierer a b s c) ... )
    (halbaddierer eingabe-1 eingabe-2 summe uebertrag)
    (set-signal! eingabe-1 1)
    (fortfuehren)
    % AUSGABE: Signal "summe" wechselt zum Zeitpunkt 8 auf 1 %
    (set-signal! eingabe-2 1)
    (fortfuehren)
    % AUSGABE: Signal "uebertrag" wechselt zum Zeitpunkt 11 auf 1 %
    % AUSGABE: Signal "summe" wechselt zum Zeitpunkt 16 auf 0 %
    
  2. Warum wird beim Anfügen einer Vorgangs-Prozedur in einem Draht die neu hinzugefügte Prozedur gleich einmal ausgeführt? Wo wären die Antworten des obigen Simulationsbeispiels anders, wenn diese Initialisierung unterbleiben würde?
  3. Warum müssen die Prozeduren eines Zeitsegmentes der Agenda in einer Warteschlange (FIFO) und nicht in einer gewöhnlichen Liste (LIFO) gehalten werden?
  4. Untersuchen Sie mit Hilfe Ihres Simulators das Verhalten eines RS-Flipflops, das Sie aus zwei über Kreuz rückgekoppelten NAND-Gattern bilden. Erproben Sie zunächst das Setzen und Rücksetzen, wobei Sie den jeweils anderen Eingang auf 1 halten. Was passiert, wenn Sie beide Eingänge auf 0 setzen? In diesem Zustand setzen Sie beide Eingänge gleichzeitig (!) auf 1. Was passiert? Beruht dieses Verhalten auf einem Fehler im Simulator oder kann es auch in der Realität beobachtet werden? Was unternimmt man dagegen?