Digitale Schaltungen mit Logisim simulieren

Aus LinuxUser 05/2018

Digitale Schaltungen mit Logisim simulieren

© Marco Guidi, 123RF

Logisch, oder?

Digitale Schaltungen mit Bleistift und Papier zu zeichnen, gerät auf die Dauer umständlich. Mit Logisim dagegen entwerfen Sie Schaltungen nicht nur, sondern können sie auch direkt testen.

Prozessoren bilden das Herzstück eines jeden Computers, von PCs über Tablets bis zu Smartphones läuft ohne sie nichts. Je mehr Rechenleistung eine CPU aufweist, desto mehr Befehle kann der Computer verarbeiten. Da wundert es nicht, dass die Architektur von Computern zu den Inhalten jeder Informatikausbildung zählt. Vor allem im Studium bekommt man Einblick hinter die Fassade eines Computers und lernt, digitale Schaltungen zu konstruieren. Genau hier setzt Logisim [1] an: Um mit digitalen Schaltungen wie etwa CPUs umgehen zu können, braucht es ein Programm, das solche Schaltungen entwirft und testet.

Ubuntu und Fedora führen Logisim als gleichnamiges Paket in ihren Repositories, sodass Sie es dort über die Paketverwaltung der Distribution einrichten und via Menü aufrufen können. Für Raspbian laden Sie die generische Version der Software via Sourceforge herunter [2] und starten sie mittels des Befehls aus Listing 1.

Listing 1

$ java -jar logisim-generic-Version.jar

Bei der Logisim-Generic-Variante handelt es sich um eine Java-Applikation, die ein funktionsfähiges Java Runtime Environment voraussetzt. Das beziehen Sie entweder über die Raspbian-Repositories oder direkt von der Oracle-Webseite [3]. Neben dieser generischen Version finden sich bei Sourceforge auch spezielle Varianten für MacOS (TAR.GZ) und Windows (EXE).

Mit Logisim lassen sich einfache logische Funktionen wie XOR realisieren. Darüber hinaus beherrscht das Programm das Erstellen von weitern Bausteinen, wie etwa einem Multiplexer und einem Dekoder. Zusätzlich können Sie Bauelemente erstellen, die Daten speichern, wie etwa ein Flipflop, Arbeitsspeicher und Register [4].

E wie Einstieg

Anhand eines einfachen Beispiels lassen sich die Grundlagen von Logisim besser erklären. Bei dem Exempel handelt es sich um einen Eignungstest mit drei Aufgaben. Löst ein Bewerber mindestens zwei davon, erhält er einen Ausbildungsvertrag, anderenfalls fällt er durch und muss sich woanders bewerben.

Um daraus eine digitale Schaltung zu realisieren, müssen Sie zunächst die Eingänge und Ausgänge identifizieren. Hier stellen die Eingänge a1 bis a3 die drei Aufgaben dar. Die beiden Ausgänge b und d stehen für die Zustände bestanden beziehungsweise durchgefallen.

Würden Sie die Schaltung manuell erstellen, bräuchten Sie zunächst die Funktionen für die Ausgänge. Dazu richten Sie erst einmal eine Wahrheitstabelle ein und legen anschließend die Ausgänge fest. Bei Zeilen, die aus mindestens zwei Einsen bestehen, setzen Sie unter b eine 1, ansonsten eine 0. Bei d verhält es sich genau umgekehrt: Es ist dann wahr, wenn b falsch ist, und umgekehrt (Abbildung 1).

Aus der Wahrheitstabelle lassen sich dann die Funktionen für die beiden Ausgänge ablesen. Um die jeweilige Funktion korrekt aufzustellen, betrachten Sie nur jene Zeilen der Eingänge, in denen sich für b beziehungsweise d eine 1 ergibt, und fügen sie in die Funktionen ein (Listing 2).

Listing 2

f_b(a1,a2,a3) = (¬a1a2a3)+(a1¬a2a3)+(a1a2¬a3)+(a1a2a3)
f_d(a1,a2,a3) = (¬a1¬a2¬b3)+(¬a1¬a2a3)+(¬a1a2¬a3)+(a1¬a2¬a3)

In der Booleschen Algebra steht das Plus für ein ODER-Gatter und das Malzeichen für das UND-Gatter. Da für die bisherige Schaltung pro Funktion jeweils drei ODER-Gatter sowie acht UND-Gatter benötigt würden, überprüfen Sie noch einmal, ob sich die Funktion minimieren lässt. Das erfolgt anhand der Gesetze der Booleschen Algebra – allerdings können Sie diese Aufgabe Logisim übertragen.

Weniger ist mehr

Dazu starten Sie Logisim und erstellen zunächst ein neues Projekt, indem Sie auf Datei | Speichern unter klicken. Anschließend geben Sie unter Fenster  | Kombinatorik auf den Reitern Eingänge und Ausgänge die eingangs genannten Variablen ein (Abbildung 1).

Abbildung 1: Um eine Schaltung von Logisim aufbauen zu lassen, benötigen Sie zunächst einmal Eingänge.

Abbildung 1: Um eine Schaltung von Logisim aufbauen zu lassen, benötigen Sie zunächst einmal Eingänge.

Dann wechseln Sie auf den Reiter Tabelle. Dort legen Sie fest, unter welcher Bedingung die Ausgänge die Werte wahr beziehungsweise falsch erhalten, indem Sie solange auf die X in den Spalten der Ausgänge klicken, bis der gewünschte Wert erscheint (Abbildung 2).

Abbildung 2: Die Einträge für die Eingänge erledigt Logisim automatisch. Sie müssen sich lediglich um das Ergebnis der Ausgänge kümmern.

Abbildung 2: Die Einträge für die Eingänge erledigt Logisim automatisch. Sie müssen sich lediglich um das Ergebnis der Ausgänge kümmern.

Zu guter Letzt legen Sie fest, wie Logisim die Funktion minimieren soll – Sie haben hier die Wahl zwischen Sum of Products oder Product of Sums. In unserem Beispiel verwenden wir Sum of Products. Sobald Sie im Reiter Minimierung die Entscheidung getroffen haben (Abbildung 3), wechseln Sie zum Tab Ausdruck. Dort erscheinen die minimierten Versionen der beiden Funktionen, mit denen sich die Schaltung realisieren lässt (Abbildung 4).

Abbildung 3: Im Tab <span class="ui-element">Minimierung</span> legen Sie die Normalform der Funktion fest.

Abbildung 3: Im Tab Minimierung legen Sie die Normalform der Funktion fest.


Abbildung 4: Hier vereinfacht Logisim die Funktion des Ausgangs <code>b</code> aus unserem Beispiel.

Abbildung 4: Hier vereinfacht Logisim die Funktion des Ausgangs b aus unserem Beispiel.

Bevor Sie das Fenster Kombinatorik verlassen, klicken Sie auf den Schalter Schaltung aufbauen und vergeben einen Namen für die neue Schaltung (Abbildung 5). Anschließend zeichnet Logisim für Sie die Schaltung, wobei es die Wahrheitstabelle als Basis verwendet (Abbildung 6). Auf der linken Seite des Übersichtsfensters greifen Sie bei Bedarf durch einen Doppelklick auf die erstellten Schaltungen zu.

Abbildung 5: Logisim kann die Schaltung wahlweise mit Gattern aus zwei Eing&auml;ngen oder nur mit NAND-Gattern zeichnen.

Abbildung 5: Logisim kann die Schaltung wahlweise mit Gattern aus zwei Eingängen oder nur mit NAND-Gattern zeichnen.


Abbildung 6: Unterhalb des Projektordners mit den Schaltungen stehen die Bauelemente. Sobald Sie ein Bauelement rechts auf dem Zeichenblatt markieren, erscheint links unten das dazugeh&ouml;rige Attributfenster.

Abbildung 6: Unterhalb des Projektordners mit den Schaltungen stehen die Bauelemente. Sobald Sie ein Bauelement rechts auf dem Zeichenblatt markieren, erscheint links unten das dazugehörige Attributfenster.

Mehr Speicher

Abbildung 7: Dieses D-Flipflop hat eine Zeitsteuerung: Es &auml;ndert erst dann seinen Zustand, wenn die Uhr auf&nbsp;1 umschaltet.

Abbildung 7: Dieses D-Flipflop hat eine Zeitsteuerung: Es ändert erst dann seinen Zustand, wenn die Uhr auf 1 umschaltet.

Bei Flipflops hingegen zaubert das Kombinatorik-Fenster keine Schaltung hervor – das klappt nur mit Handarbeit. Als Beispiel soll hierfür ein flankengetriggertes D-Flipflop dienen. Zunächst vergeben Sie einen Namen für die Schaltung, indem Sie auf der linken Seiten einen Rechtsklick auf den Projektnamen machen und Schaltung hinzufügen auswählen. Logisim erzeugt daraufhin ein leeres Zeichenblatt, auf das Sie die Bauelemente ziehen können.

Unterhalb der importierten beziehungsweise erstellten Schaltungen finden Sie die zur Verfügung gestellten Bauelemente. Flipflops tauchen hier im Register Speicher auf. Durch einen Klick auf das Leitungssymbol links vom Register öffnet sich dieses und Sie können das D-Flipflop bei gedrückter linker Maustaste auf das Zeichenblatt ziehen.

Zusätzlich stellt Logisim Attribute zu den Bauelementen bereit, die unterhalb des Übersichtsfensters erscheinen, sobald Sie das Bauelement mit der linken Maustaste markieren. Unser D-Flipflop soll nur reagieren, wenn die Uhr den Wert 1 aufweist. Daher setzen Sie das Attribut Trigger auf steigende Flanke.

Danach markieren Sie mit der Maus das Bauelement und erstellen ein Duplikat, indem Sie mit [Strg]+[C] das Element kopieren und mit [Strg]+[V] ins Duplikat einfügen. Die Attribute kopiert Logisim dabei mit, sodass Sie sie nicht erneut anzupassen brauchen.

Zusätzlich benötigen Sie Ein- und Ausgabepins sowie eine Uhr, die sich im Register Wiring findet. Hinzu kommt ein Inverter aus dem Register Gatter. Nachdem Sie die Bauelemente auf das Zeichenblatt gezogen haben, lässt sich deren Ausrichtung ändern. Üblicherweise zeigen die Ein- und Ausgabepins in entgegengesetzte Richtungen. Darüber hinaus sollten Sie bei den Ausgabepins das Attribut Ausgang auf logisch Ja setzen.

Eine Wahrheitstabelle brauchen manuell erstellte Schaltungen nicht. Liegen erst einmal alle Zeichenelemente auf dem Zeichenblatt, verbinden Sie sie stattdessen miteinander. Dazu fahren Sie mit dem Mauszeiger über die Ein- beziehungsweise Ausgänge eines Bauelements, klicken darauf und ziehen eine Leitung bis zum nächsten Ein- beziehungsweise Ausgang. Um eine Leitung mit Ecken zu zeichnen, erstellen Sie zunächst eine Gerade und lassen dann die Maustaste los, um anschließend in eine andere Richtung weiterzuzeichnen.

Es empfiehlt sich außerdem, die einzelnen Bauelemente zu beschriften, sodass andere Anwender der Schaltung erkennen können, was die Bauelemente bedeuten. Dazu klicken Sie oben in der Menüleiste auf das Buchstaben-Icon und setzen anschließend den Cursor auf das Zeichenblatt, um den Namen einzugeben.

Die Multiplex-Connection

In Multiplex-Kinos strömen die Leute am Eingang hinein und lassen sich im gewünschten Kinosaal nieder. So ähnlich funktioniert das auch bei einem n-Bit-Multiplexer. Wir sehen uns hier jedoch einen Encoder näher an, mit dem es sich so ähnlich verhält wie mit dem Ende eines Kinoabends: Die Besucher (Daten) verlassen die einzelnen Kinosäle und nehmen anschließend den Ausgang des Kinos, um aus dem Gebäude herauszukommen.

Die elektronische Parallele, einen 1-Bit-Multiplexer (Abbildung 8), zeichnen Sie wiederum über das Kombinatorik-Fenster. Dazu erstellen Sie wie gehabt zunächst die passende Wahrheitstabelle und klicken dann auf Schaltung aufbauen. Im sich daraufhin öffnenden Fenster wählen Sie NAND-Gatter aus und vergeben einen Namen für die Schaltung.

Abbildung 8: Eine logische Schaltung wie der 1-Bit-Multiplexer l&auml;sst sich nur mithilfe von NAND-Gattern realisieren.

Abbildung 8: Eine logische Schaltung wie der 1-Bit-Multiplexer lässt sich nur mithilfe von NAND-Gattern realisieren.

Um einen Multiplexer manuell zu erstellen, klicken Sie auf der linken Seite auf Auswahlschaltungen | Multiplexer und ziehen das Bauelement auf das Zeichenblatt. Für einen 2-Bit-Multiplexer benötigen Sie zwei Datenleitungen und ein Datenbit; diese Einstellungen nehmen Sie am besten im Attributfenster vor. Hinzu kommen vier Eingänge, ein weiterer Eingang für den Selektorpin sowie ein Ausgang. Dazu verbinden Sie die Eingabepins mit den Eingängen des Multiplexers.

Das Steuersignal – es findet sich am unteren Ende des Multiplexers – besteht in unserem Beispiel aus zwei Bits. Sie können die Anzahl der Bits wieder über das Attributfenster ändern. Für den Ausgang bietet sich diesmal eine LED an, die Sie unter Eingabe/Ausgabe | LED finden.

Abbildung 9: Bei diesem Multiplexer stehen die Eing&auml;nge auf der linken Seite und das Steuerpin unten. Der Ausgang wird durch die LED realisiert, die sich rechts vom Multiplexer befindet.

Abbildung 9: Bei diesem Multiplexer stehen die Eingänge auf der linken Seite und das Steuerpin unten. Der Ausgang wird durch die LED realisiert, die sich rechts vom Multiplexer befindet.

Teile und herrsche

Beim Programmieren achtet man darauf, Code wiederzuverwenden, indem man Funktionen nutzt. Bei Logisim ist das nicht anders: Was der Programmierer Funktionen oder Methoden nennt, heißt unter Logisim Teilschaltung.

Abbildung 10: Will man eine Teilschaltung integrieren, dann zeigt Logisim diese als Block an.

Abbildung 10: Will man eine Teilschaltung integrieren, dann zeigt Logisim diese als Block an.

Angenommen, das Beispiel mit dem Eignungstest soll zeitlich gesteuert ablaufen: Dann könnten Sie den Eignungstest, der in diesem Fall die Logik darstellt, zwischen zwei D-Flipflops integrieren. Dazu erstellen Sie zunächst eine neue Schaltung, indem Sie das Kontextmenü des Projektordners mit der rechten Maustaste aufrufen und anschließend auf Schaltung hinzufügen klicken.

Um die Teilschaltung zwischen zwei D-Flipflops einzufügen, klicken Sie einmal auf der linken Seite auf den Namen der Teilschaltung. Daraufhin wandelt sich der Mauszeiger in einen Block um. Dieser Block stellt die Teilschaltung dar, die Sie nun mit den D-Flipflops verbinden.

Da der D-Flipflop nur einen Ausgang aufweist, der gleichzeitig für den Eingang der Teilschaltung gebraucht wird, fügen Sie einfach noch zwei weitere Eingabepins hinzu. Außerdem hat die Teilschaltung zwei Ausgänge, von denen Sie einen mit dem Eingang des zweiten D-Flipflops verbinden. Der andere Ausgang verläuft zum Reset-Eingang (~R) des zweiten D-Flipflops.

Testen

Die schönste Schaltung nutzt jedoch wenig, wenn sie nicht funktioniert. Dem beugen Sie vor, indem Sie Ihre Schaltung vorab testen. Dafür müssen Sie bei logischen Schaltungen wie dem Eignungstest nur oben in der Menüleiste auf das Handsymbol klicken.

Anschließend verändern Sie durch mehrmaliges Anklicken nach Belieben die Werte der Eingabepins und beobachten das Verhalten der Ausgänge. Gerade aktive Leitungen – solche also, durch die gerade die Datenbits fließen – hebt Logisim während der Simulation farblich hervor.

Für Schaltungen, die zeitgesteuert ablaufen, hält Logisim eine Besonderheit bereit: Unter Simulieren | Weiterschalten aktivieren lässt sich die Uhr simulieren, sodass Sie nur noch die Dateneingänge ändern müssen, um das Verhalten der Schaltung zu beobachten.

Zusätzlich bietet Logisim eine Exportfunktion an, die eine Zeichnung der Schaltung erzeugt. Dazu klicken Sie auf Datei | Bild exportieren. Im darauffolgenden Fenster wählen Sie dann das gewünschte Bildformat sowie die Skalierung aus.

Fazit

Logisim ermöglicht Ihnen, sich beim Elektronikdesign ganz auf das Wesentliche zu konzentrieren, in diesem Fall also auf das Erlernen von Schaltungen. Das Malen grafischer Elemente wie Rechtecke, Trapeze, Geraden und so weiter dürfen Sie dabei getrost dem Programm überlassen. 

Die Autorin

Auf ihrem PC setzt Anzela Minosi die Linux-Distribution Sabayon ein. Wenn sie nicht gerade ihren eigenen PC-Support betreibt oder programmiert, treffen Sie sie beim Sonnenbaden.

Glossar

XOR

Eine XOR-Funktion liefert eine 1 (wahr) als Ergebnis, wenn sich der Zustand zweier Eingänge unterscheidet (1/0, wahr/falsch).

Flipflop

Deutsch auch Kippstufe. Das Ergebnis eines Flipflops entspricht dem Wert, der im Element gespeichert wurde, wobei sich der interne Zustand nur durch Taktflanken ändert. D-Flipflops haben je zwei Eingänge (Wert D und Taktsignal C) und Ausgänge (interner Zustand Q, Komplement ~Q).

Multiplexer

Auch Selektor genannt. Die Ausgabe entspricht einem der Inputs, wobei die Steuerung beziehungsweise der Steuerpin das Ergebnis auswählt. Ein n-Bit-Multiplexer hat n Steuerpins und 2n Inputs.

Wahrheitstabelle

Die Wahrheitstabelle braucht man für logische Blöcke. Ein Block mit n Eingängen ergibt eine Tabelle mit 2n Zeilen.

Gatter

Gatter implementieren logische Basisfunktionen; so realisiert ein UND-Gatter die UND-Funktion.

UND

Eine UND-Funktion liefert als Ergebnis eine 1, wenn beide Eingänge wahr sind.

ODER

Eine ODER-Funktion liefert als Ergebnis eine 1, wenn mindestens einer der beiden Eingänge wahr ist.

Sum of Products

Die Funktion einer Schaltung wird in disjunktiver Normalform angegeben, sodass die Variablen durch ODER-Symbole miteinander verbunden sind.

Product of Sums

Die Funktion einer Schaltung wird in konjunktiver Normalform angegeben, sodass die Variablen durch UND-Symbole miteinander verbunden sind.

Kombinatorik

Blöcke ohne Speicher nennt man kombinatorisch. Das Ergebnis einer kombinatorischen Logik hängt nur von der aktuellen Eingabe ab.

Inverter

Ein Gatter, das die NOT-Funktion realisiert: Es macht aus einer 0 eine 1 und umgekehrt.

NAND

Der NAND-Operator entspricht dem invertierten UND-Operator. NAND-Gatter gelten als universell, da sich jede beliebige logische Funktion allein durch diesen Typ realisieren lässt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 05/2018 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben