***************************************************************************** Sorry -- no english translation (yet) available... but if you'll send me an E-Mail (mailto: volker.bosch(at)z.zgs.de) I'll start translating this file very soon... Sep.24.2000 Volker Bosch volker.bosch(at)z.zgs.de ***************************************************************************** Programm "statemachine" (c) 6/95, Volker Bosch ====================== Programm zur Erstellung von Logik-Gleichungen (DNF) fuer Zustandsautomaten (sequentielle Automaten). 1 Hostplattform ================ Das Programm wurde unter Linux erstellt. Es sollte aber auf jeder Plattform, die ueber Bison (bzw. Yacc) und Flex (bzw. Lex) verfuegt compilierbar sein. Das Makefile sollte eigentlich alle erforderlichen Aktionen uebernehmen (ggf. sind die Make-Variablen "YACC" und "YFLAGS" sowie "LEX" und "LFLAGS" anzupassen. 1.1 Compilation $make dep $make 1.2 Installation $cp statemachine /usr/local/bin (oder ${HOME}/bin) 2 Benutzung =========== Im Verzeichnis "examples" befindet sich die Beispielsdatei "drehrichtung.statem" anhand derer hier kurz der Aufbau einer Eingabedatei sowie der Programmaufruf erlaeutert werden soll. 2.1 Aufbau der Eingabedatei examples/drehrichtung.statem: Kommentarzeilen werden durch das Doppelkreuz '#' eingeleitet. ######################################################################## # Ermittlung von Drehrichtung (R) und Takt (Qa/Qb) aus den # beiden Spursignalen eines Inkrementalgebers # # +-----+ +-----+ +---------+ +-----+ # A | | | | | | | | # ----+ +-----+ +-----+ +-----+ +----- # # -----+ +-----+ +-----+ +-----+ +-----+ # B | | | | | | | | | # +-----+ +-----+ +---+ +-----+ +---- # ^ # | # Richtungsumkehr ######################################################################## # Definition der Eingangssignale. Kombinationen dieser Signale koennen Uebergaenge zwischen den Zustaenden des Zustandsautomaten ausloesen. Die Namen der Signale folgen auf das Schluesselwort "INPUTSIGNALS". Die einzelnen Signale muessen durch Leerzeichen, Tabulatoren oder Zeilenumbrueche getrennt werden. Es muessen saemtliche Eingangssignale angegeben werden. #----------------------------------------------------------------------- # Eingangssignale Spur A und Spur B # INPUTSIGNALS A B Anschließend folgt die Definition der Ausgangssignale bzw. Zustandsvariablen. Saemtliche moeglichen Zustaende muessen aus diesen Variablen bestehen. So sind fuer die Definition eines Dezimalzaehlers mindestens vier Variablen erforderlich. Es muessen jedoch nicht alle moeglichen Kombinationen auch wirklich genutzt werden. #----------------------------------------------------------------------- # Ausgangssignale Zustandsvariablen Qa Qb und Richtung R # OUTPUTSIGNALS Qa Qb R Nun folgt nach dem Schluesselwort "STATES" die Definition der Zustaende. Jeder auftretende Zustand erfordert einen eindeutigen Namen und eine ebenfalls eindeutige Kombination der Zustandsvariablen. Erlaubte Operatoren sind die Zuweisung '=', die Negation '/' sowie die logische UND-Verknuepfung '*'. Andere Operatoren sind nicht zugelassen, die Gleichungen werden durch das Programm nicht vereinfacht oder umgestellt. Das Programm prueft die Unabhaengigkeit der einzelnen Zustandsdefinitionen. #----------------------------------------------------------------------- # Zustaende # STATES Z0R = /Qa * /Qb * R Z1R = /Qa * Qb * R Z2R = Qa * Qb * R Z3R = Qa * /Qb * R Z0L = /Qa * /Qb * /R Z1L = /Qa * Qb * /R Z2L = Qa * Qb * /R Z3L = Qa * /Qb * /R Auf das Schluesselwort "TRANSITIONS" erfolgt die Definition der Eingangssignalkombinationen, welche Uebergaenge zwischen den einzelnen Zustaenden ausloesen koennen. Jeder Uebergang muss aus einer eindeutigen (unabhaengige) Kodierung der Eingangssignale aufweisen und einen eigenen Namen tragen. Die zulaessigen Operatoren entsprechen denen der Zustaende. #----------------------------------------------------------------------- # Ubergaenge # TRANSITIONS T1a0b = A * /B T1a1b = A * B T0a0b = /A * /B T0a1b = /A * B Abschließend folgt die Tabelle der Zustandsuebergange nach dem Schluesselwort "STATEMACHINE". Auf den Namen des Ausgangszustands folgt das Trennzeichen ':0=' und der Name eines Uebergangs. Nach dem Uebergang steht das Trennzeichen '->' und der Name des Zustands, der von dem Ausgangszustand heraus, beim Auftreten der dem Uebergang zugeordneten Eingangssignalkombination, erreicht. Nun koennen weitere Uebergaenge, abgetrennt durch das Zeichen '+' folgen. Die letzte Zeile eines jeden Eintrags stellt den Default-Uebergang dar, der eingeschlagen wird, wenn keiner der zuvor verwendeten Uebergaenge eintritt. #----------------------------------------------------------------------- # Abfolge der Zustaende # STATEMACHINE Z0R := T0a1b -> Z1R + T1a0b -> Z3L +-> Z0R Z1R := T1a1b -> Z2R + T0a0b -> Z0L +-> Z1R Z2R := T1a0b -> Z3R + T0a1b -> Z1L +-> Z2R Z3R := T0a0b -> Z0R + T1a1b -> Z2L +-> Z3R Z0L := T1a0b -> Z3L + T0a1b -> Z1R +-> Z0L Z3L := T1a1b -> Z2L + T0a0b -> Z0R +-> Z3L Z2L := T0a1b -> Z1L + T1a0b -> Z3R +-> Z2L Z1L := T0a0b -> Z0L + T1a1b -> Z2R +-> Z1L Die Eingabedatei wird durch das Schluesselwort "END" abgeschlossen. END 2.2 Programmaufruf $statemachine drehrichtung.statem 2.3 Ergebnisdateien Fuer jede Zustandsvariable wird eine eigene Ergebnisdatei erstellt. Sie Taegt den Namen der Eingabedatei, gefolgt vom Namen der entsprechenden Zustandsvariable, sowie die Extension "dnf". -rw-r--r-- 1 volker users 716 Sep 24 12:31 drehrichtung.Qa.dnf -rw-r--r-- 1 volker users 716 Sep 24 12:31 drehrichtung.Qb.dnf -rw-r--r-- 1 volker users 715 Sep 24 12:31 drehrichtung.R.dnf Die Datei besteht aus der Logikgleichung der entsprechenden Variablen in ihrer disjunktiven Normalform (DNF). Diese muss in der Reglen noch minmiert werden -- beispielsweise mit dem Verfahren vom Quine und McCluskey (siehe auch das Programm "qmc"). ------------------------------------------------------------------------- Volker Bosch