<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <chapter name="Digital">
        <par>
            Digital ist ein Simulator für digitale Schaltkreise. Die einzelnen Gatter eines Schaltkreise können
            miteinander durch Leitungen verbunden werden und das Verhalten der Gesamtschaltung wird simuliert.
            Der Anwender kann mit der laufenden Simulation über bestimmte Elemente interagieren, indem z.B Knöpfe
            betätigt oder Eingänge gesetzt werden.
        </par>
        <par>
            Auf diese Weise können die meisten Grundschaltungen der Digitaltechnik aufgebaut werden. Im Ordner
            <e>examples</e> finden sich viele Beispiele bis hin zum funktionsfähigen 16-Bit Single Cycle Harvard Prozessor.
        </par>
        <par>
            Der Simulator kennt dabei zwei Modi: Im Bearbeitungsmodus kann die Schaltung bearbeitet werden. Es können
            Elemente hinzugefügt oder durch Leitungen verbunden werden. In diesem Modus ist die eigentliche Simulation
            nicht aktiv. Der Bearbeitungsmodus wird durch die Funktion <e>Elemente Bearbeiten</e> aktiviert.
            Der Simulationsmodus wird durch <e>Start</e> aktiviert. Beim Wechsel in diesen Modus wird die Schaltung
            auf Konsistenz überprüft. Gibt es in der Schaltung noch Fehler, wird eine entsprechende Meldung angezeigt.
            Wenn möglich werden die betroffenen Elemente bzw. Leitungen hervorgehoben. Enthält die Schaltung keine
            Fehler mehr, wird die Simulation aktiviert. Jetzt kann mit der laufenden Simulation interagiert werden.
            Die Bearbeitung der Elemente ist dann jedoch nicht mehr möglich. Dazu muss erneut in den
            Bearbeitungsmodus gewechselt werden.
        </par>
    </chapter>
    <chapter name="Gatterlaufzeiten">
        <par>
            Bei der Simulation wird davon ausgegangen, dass jedes Gatter eine endliche Laufzeit hat, und dass diese Laufzeit
            für alle Gatter identisch ist. Die Laufzeit eines jeden Elementes aus der Bibliothek hat genau diese Laufzeit,
            unabhängig von dessen Komplexität. Ein Und-Gatter hat also die selbe Signalverzögerung wie ein RAM-Baustein.
            Ausgenommen davon sind die Dioden, der Leitungssplitter für die Erzeugung von Datenbussen und der Schalter.
            Diese Elemente haben keine Gatterlaufzeit bzw. diese beträgt Null.
        </par>
        <par>
            Wird eine Schaltung in eine andere Schaltung eingebettet, um ein hierarchisches Design zu erstellen, behalten die
            eingebetteten Schaltungen ihre Laufzeiten. Wird also ein komplexes Schaltnetz eingebettet bei welchem ein Signal
            von einem Eingang bis zu einem Ausgang drei Gatter passiern muss, beträgt dessen Laufzeit auch als eingebettete
            Schaltung drei Gatterlaufzeiten. Es gibt keine zusätzlichen Verzögerungen durch
            das Einbetten einer Schaltung. Sind nicht alle Ausgangssignale einer eingebetteten Schaltung gleich schnell,
            werden sich die Signale in der einbettenden Schaltung ebenso verhalten.
            Generell verändert das Einbetten einer Schaltung in eine andere dessen Laufzeitverhalten nicht. Die Schaltung
            verhält sich exakt so, als befänden sich alle Elemente auf der selben Ebene.
        </par>
    </chapter>
    <chapter name="Verbindungsleitungen">
        <par>
            Alle Elemente müssen über Leitungen verbunden werden. Es ist nicht möglich, zwei Elemente direkt miteinander
            zu verbinden, indem man sie direkt nebeneinander platziert.
        </par>
        <par>
            Zudem gibt es nur Verbindungen zwischen einem Leitungsende und einem Bauteil. Wird ein Bauteil mitten auf
            eine Leitung gesetzt, wird keine Verbindung zwischen dem Bauteil und der Leitung hergestellt.
            Daher muss an jedem Bauteileanschluss, welcher mit einem anderen Verbunden werden soll, eine Leitung
            tatsächlich enden bzw. beginnen.
            Selbst wenn das Tunnel-Element verwendet wird, muss es eine Leitung zwischen dem Pin und dem Tunnel-Element
            geben.
        </par>
        <par>
            Soll ein Element incl. der angeschlossenen Verbindungsleitungen verschoben werden, kann das Element mit der
            Rechteckauswahl ausgewählt werden. Danach kann es mit der Maus verschoben werden. Wenn ein Element per
            Mausklick selektiert wird, wird nur das Bauteil allein - also ohne die angeschlossenen Leitungen
            mitzunehmen - verschoben.
        </par>
    </chapter>
    <chapter name="Dateinamen">
        <par>
            Um eine Schaltung in mehrere Teile zu zerlegen, die auch unabhängig z.B. in einem Versionskontrollsystem
            abgelegt und verfolgt werden können, wird jede eingebundenen Schaltung in einer eigenen Datei gespeichert.
            Dabei werden in einer Schaltung nur die Dateinamen der Teilschaltungen gespeichert, und die entsprechenden
            Dateien zur Laufzeit im Dateisystem gefunden werden müssen.
            Um die verschiedenen Arbeitsweisen der Nutzer bestmöglich zu unterstützen und dennoch
            auf eine komplexe Verwaltung von Importpfaden usw. zu verzichten, ist eine etwas ungewöhnliche Import-Strategie
            implementiert.
        </par>
        <par>
            In einer Schaltung sind nur die Dateinamen der eingebetteten Schaltungen gespeichert. Soll die Datei geöffnet werden,
            werden alle Unterordner nach einer Datei des entsprechenden Namens durchsucht. Wird
            eine passende Datei gefunden, wird diese importiert. Dabei kommt es nur auf den Dateinamen der einzulesenden
            Datei an, nicht auf dessen Pfad. Entsprechend wird eine Fehlermeldung erzeugt, wenn sich in verschiedenen
            Unterordneren mehrere Dateien gleichen Namens befinden, da dann Mehrdeutigkeiten entstehen.
        </par>
        <par>
            Eine geeignete Projektstruktur sieht daher wie folgt aus: In einem eigenen Ordner befindet sich die Wurzelschaltung.
            Alle importierten Schaltungen müssen sich im selben Ordner oder in Unterordnern befinden. Alle Schaltungen müssen
            unterschiedliche Namen haben, es darf also nicht vorkommen, dass sich in verschiedenen Ordnern Schaltungen
            gleichen Namens befinden.
        </par>
    </chapter>
    <chapter name="Schaltungsanalyse und Synthese">
        <par>
            Eine vorliegende Schaltung kann über den Menüeintrag <e>Analyse</e> analysiert werden. Bei rein
            kombinatorischen Schaltungen wird eine Wahrheitstabelle erzeugt. Diese Wahrheitstabelle kann beliebig
            bearbeitet werden.
            Aus dieser Wahrheitstabelle lässt sich nach einer Bearbeitung eine neue Schaltung erzeugen.
            Im Menü der Schaltungserzeugung finden sich auch Funktionen um so gen. JEDEC Dateien zu erzeugen.
            Dabei handelt es sich
            um ein spezielles Dateiformat, welches die Fuse-Map eines PLD beschreibt. Diese JEDEC Datei kann
            mit Hilfe eines speziellen Programmers in ein entsprechendes PLD geschrieben werden, um dieses zu konfigurieren.
            Zur Zeit werden Bausteine des Typs <e>GAL16v8</e> und <e>GAL22v10</e> bzw. Fuse-Map-Kompatible
            Bausteine unterstützt.
        </par>
        <par>
            Neben rein kombinatorischen Schaltungen lassen sich auch Schaltwerke analysieren bzw. erzeugen. Anstelle einer
            einfachen Wahrheitstabelle entsteht eine so gen. Zustandsfolgetabelle. Jedes Flipflop taucht dabei auf der
            Eingangsseite und der Ausgangsseite der Zustandsfolgetabelle auf. In dieser Tabelle findet sich auf der
            rechten Seite der abhängigen Signale der Folgezustand, der nach dem nächsten Taktsignal eintreten wird,
            abhängig vom aktuellen Zustand der Flipflops. Damit eine Analyse möglich ist, müssen die Flipflops benannt
            werden.
        </par>
        <par>
            Dabei gilt folgende Namenskonvention: Der Folgezustand eines Bits auf der rechten Seite der Tabelle wird
            durch ein angähngtes kleines 'n+1' gekennzeichnet. Der dazu gehörige aktuelle Zustand wird durch ein
            angehängtes 'n' ausgezeichnet. Gibt es also eine Zustandsvariable 'A', dann kennzeichnet 'An' den aktuellen
            Zustand und 'An+1' den Folgezustand. Finden sich in der Wahrheitstabelle auf der linken und rechten Seite Signale,
            die diesem Muster entsprechen, wird davon ausgegegangen, dass es sich um eine Zustandsfolgetabelle handelt und
            bei der Synthese wird entsprechend ein Schaltwerk anstelle eines Schaltnetzes erzeugt.
        </par>
        <par>
            Zu beachten ist dabei, dass die zu analysierende Schaltung neben den eingebauten D- und JK-Flipflops nur
            rein kombinatorische Elemente enthalten darf. Wird ein Flipflop z.B. aus Nor-Gattern aufgebaut, wird diese
            Schaltung nicht als Flipflop erkannt und daher auch nicht entsprechend behandelt. In diesem Falle wird
            die Schaltung nicht korrekt analysiert, was bedeutet, das eine nicht korrekte Zustandsfolgetabelle
            erzeugt wird.
        </par>
    </chapter>
    <chapter name="Der ATF1502AS">
        <par>
            Der Baustein <a href="http://www.microchip.com/wwwproducts/en/ATF1502AS"><e>ATF1502AS</e></a>
            ist ein einfaches CPLD mit 32 Makrozellen. Er ist baugleich mit dem CoolRunner I von
            Xilinx. Er ist in einem PLCC Gehäuse verfügbar, was ihn für Laborversuche gut geeignet erscheinen lässt:
            Sollte ein IC bei Versuchen zerstört werden, kann es einfach ersetzt werden.
            Zudem ist mit dem <a href="http://www.atmel.com/tools/atdh1150usb.aspx"><e>ATDH1150USB</e></a>
            ein einfach zu benutzender, günstiger Programmer erhältlich, mit dem der Baustein in seiner Schaltung
            (In System) programmiert werden kann.
            Für die Programmierung ist die Software <a href="http://www.atmel.com/tools/ATMISP.aspx"><e>ATMISP</e></a>
            erforderlich, welche auf der ATMEL/Microchip Webseite erhältlich ist.
        </par>
        <par>
            Leider sind die Details der Fuse-Map nicht öffentlich zugänglich, so dass kein geeigneter Fitter für
            diesen Baustein in Digital integriert werden kann, wie das bei den <e>GAL16v8</e> und <e>GAL22v10</e>
            Bausteinen möglich ist.
        </par>
        <par>
            Daher muss auf den von ATMEL bereitgestellten Fitter <e>fit1502.exe</e> zurückgegriffen werden.
            Dieses Programm erzeugt aus einer geeigneten <e>TT2</e> Datei eine <e>JEDEC</e>-Datei die dann programmiert
            werden kann.
            Digital startet den Fitter automatisch wenn eine <e>TT2</e> Datei erzeugt wird. Dazu muss in den
            Digital-Einstellungen der Pfad zu <e>fit1502.exe</e> angegeben werden. Die erzeugte Datei kann dann direkt
            mit <a href="http://www.atmel.com/tools/ATMISP.aspx"><e>ATMISP</e></a> geöffnet und gebrannt werden.
        </par>
        <par>
            Aus rechtlichen Gründen kann der Fitter <e>fit1502.exe</e> nicht mit Digital ausgeliefert werden.
            Er findet sich jedoch nach der Installation von
            <a href="http://www.atmel.com/tools/wincupl.aspx"><e>WinCupl</e></a>
            im Ordner <e>WinCupl\Fitters</e>.
            <a href="http://www.atmel.com/tools/wincupl.aspx"><e>WinCupl</e></a> wiederum ist auf der ATMEL/Microchip
            Webseite verfügbar.
            Aus der
            <a href="http://www.atmel.com/tools/wincupl.aspx"><e>WinCupl</e></a>-Installation wird nur die Datei
            <e>fit1502.exe</e> benötigt und diese kann in jedem Ordner abgelegt werden.
            Unter Linux lässt sich <e>fit1502.exe</e> ebenfalls von Digital starten, wenn <e>wine</e> installiert ist.
        </par>
    </chapter>
    <chapter name="Häufig gestellte Fragen">
        <faq>
            <question>Wie kann ich eine Leitung verschieben?</question>
            <answer>Mit der Rechteckauswahl einen Endpunkt auswählen und dann mit der Maus verschieben.
                Alternativ kann eine einzelne Leitung mit STRG+Mausklick selektiert werden.</answer>
        </faq>
        <faq>
            <question>Wie kann ich eine Leitung löschen?</question>
            <answer>Mit der Rechteckauswahl einen Endpunkt auswählen und dann <e>Entfernen</e> drücken bzw. auf den Papierkorb klicken.
                Alternativ kann eine einzelne Leitung mit STRG+Mausklick selektiert werden.</answer>
        </faq>
        <faq>
            <question>Wie kann ich ein Element verschieben und dabei alle angeschlossenen Leitungen mitnehmen?</question>
            <answer>Das Bauteil mit der Rechteckauswahl auswählen. Die Auswahl muss das Bauteil komplett enthalten.
            Dann kann das Bauteil zusammen mit den Leitungen verschoben werden.</answer>
        </faq>
        <faq>
            <question>Ich habe ein Element, das nicht mit einer Leitung verbunden ist, obwohl die Pins auf der Leitung liegen.</question>
            <answer>Pins werden nur mit einer Leitung verbunden, wenn ein Endpunkt der Leitung auf dem Pin liegt.</answer>
        </faq>
        <faq>
            <question>Wenn die Simulation gestartet wird, ist die Leitung grau. Was bedeutet das?</question>
            <answer>Mit Hellgrün und Dunkelgrün wird eine logische 1 bzw. 0 dargestellt. Grau bedeutet, dass die Leitung hochohmig ist.</answer>
        </faq>
        <faq>
            <question>Ich habe eine Wahrheitstabelle. Wie kann ich daraus die minimalen Schaltfunktionen erzeugen?</question>
            <answer>Im Menü <e>Analyse<arrow/>Synthese</e> auswählen und dann die Wahrheitstabelle eingeben.
                In der Statusleiste des Fensters findet sich die Schaltfunktion. Geben mehr als eine abhängige Größe ein,
                öffnet sich ein neues Fenster, in welchem alle Schaltfunktionen angegeben sind.</answer>
        </faq>
        <faq>
            <question>Ich habe eine Wahrheitstabelle eingegeben, es wird jedoch mehr als eine Schaltfunktion für
                das gesuchte Signal angezeigt. Welche ist die Richtige?</question>
            <answer>Wenn eine Schaltfunktion minimiert wird, kann es mehrere minimierte Schaltfunktionen gleicher
                Komplexität geben (gleiche Anzahl von Termen).
                Digital zeigt alle möglichen Lösungen an und alle liefern die selbe Wahrheitstabelle.
                In den Don't Care-Zeilen der Wahrheitstabelle kann es natürlich Unterschiede zwischen den verschiednen
                Funktionen geben.</answer>
        </faq>
        <faq>
            <question>Ich habe eine Wahrheitstabelle. Wie kann ich daraus eine Schaltung erzeugen?</question>
            <answer>Im Menü <e>Analyse<arrow/>Synthese</e> auswählen und dann die Wahrheitstabelle eingeben.
                Unter <e>Neu</e> bzw. mit <e>Spalten hinzufügen</e> können Variablen hinzugefügt werden.
                Im Menü mit <e>Erzeugen<arrow/>Schaltung</e> dann eine Schaltung erzeugen.</answer>
        </faq>
        <faq>
            <question>Wie kann ich die Signalnamen in der Wahrheitstabelle verändern?</question>
            <answer>Mit einem Rechtsklick auf den Signalnamen im Tabellenkopf kann der Name bearbeitet werden.</answer>
        </faq>
        <faq>
            <question>Ich habe eine Schaltfunktion. Wie kann ich daraus eine Schaltung erzeugen?</question>
            <answer>Im Menü <e>Analyse<arrow/>Ausdruck</e> auswählen und dann die Funktion eingeben.</answer>
        </faq>
        <faq>
            <question>Ich habe eine Schaltfunktion. Wie kann ich daraus eine Wahrheitstabelle erzeugen?</question>
            <answer>Im Menü <e>Analyse<arrow/>Ausdruck</e> auswählen und dann die Funktion eingeben.
                Dann die Schaltung erzeugen und im Menü <e>Analyse<arrow/>Analyse</e> die Wahrheitstabelle erzeugen.</answer>
        </faq>
        <faq>
            <question>Wie kann ich aus einer Schaltung eine JEDEC-Datei erzeugen?</question>
            <answer>Im Menü <e>Analyse<arrow/>Analyse</e> auswählen und dann im neuen Fenster im Menü
                <e>Erzeugen<arrow/>Bausteine</e> den entsprechenden Baustein auswählen.</answer>
        </faq>
        <faq>
            <question>Wie kann ich bei der Erzeugung einer JEDEC-Datei die Pinnummern der Signale festlegen?</question>
            <answer>Bei den entsprechenden Eingängen und Ausgängen in der Schaltung kann unter <e>Beschreibung</e> der
                Text 'Pin [n]' eingetragen werden, wobei mit [n] die Pinnummer anzugeben ist. Findet sich hier kein
                entsprechender Text, wird der nächste freie Pin zugewiesen.</answer>
        </faq>
        <faq>
            <question>Ich habe eine JEDEC Datei erzeugt. Wie bekomme ich diese in ein <e>GAL16v8</e> bzw. <e>GAL22v10</e>?</question>
            <answer>Für die Programmierung von GAL's ist eine entsprechende Zusatz-Hardware, ein so gen. GAL-Programmer
                erforderlich.</answer>
        </faq>
    </chapter>
</root>
