***************************************************************************** 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 "qmc" (c) 7/95 Volker Bosch ============== Programm zur Minimierung von Logikgleichungen in der disjunktiven Normalform mittels des Verfahrens nach Quine und McCluskey. 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 qmc /usr/local/bin (oder ${HOME}/bin) 2 Benutzung =========== Im Verzeichnis "examples" befindet sich die Beispielsdatei "drehrichtung.Qa.dnf" anhand derer hier kurz der Aufbau einer Eingabedatei sowie der Programmaufruf erlaeutert werden soll. 2.1 Aufbau der Eingabedatei examples/drehrichtung.Qa.dnf: Kommentarzeilen werden durch das Doppelkreuz '#' eingeleitet. # DNF-file created by 'statemachine' (ver. 0.1b, 95-7-22) # Input file: drehrichtung.statem # created: Sun Sep 24 12:31:40 2000 # Das Schluesselwort "SIGNALS" leitet die Definition der verwendeten Signale ein. Es duerfen maximal 32 Signale verwendet werden. Die einzelnen Signale muessen durch Leerzeichen, Tabulatoren oder Zeilenumbrueche getrennt werden. SIGNALS Qa Qb R A B Auf das Schluesselwort "EQUATION" folgt die Logikgleichung in ihrer disjunktiven Normalform (DNF), d.h. die Ausdruecke einen Zeile duerfen ausschliesslich aus UND-Verknuepfungen (Operator '*') bestehen. Der Operator '/' stellt die logische Negation dar. Die einzelnen Zeilen werden durch ODER-Verknuepfungen (Operator '+') verbunden. Weitere Operatoren sind nicht zulaessig, auch keine Klammerung! EQUATION Qa := /Qa * /Qb * R * A * /B + /Qa * Qb * R * A * B + Qa * Qb * R * A * /B + Qa * Qb * R * /A * /B + Qa * Qb * R * A * B + Qa * /Qb * R * A * B + Qa * /Qb * R * A * /B + Qa * /Qb * R * /A * B + /Qa * /Qb * /R * A * /B + Qa * /Qb * /R * A * B + Qa * /Qb * /R * A * /B + Qa * /Qb * /R * /A * B + Qa * Qb * /R * A * /B + Qa * Qb * /R * /A * /B + Qa * Qb * /R * A * B + /Qa * Qb * /R * A * B Die Eingabedatei wird durch das Schluesselwort "END" abgeschlossen. END 2.2 Programmaufruf $qmc drehrichtung.Qa.dnf 2.3 Ergebnisdatei -rw-r--r-- 1 volker users 694 Sep 24 13:08 drehrichtung.Qa.dnf.qmc Die Ergebnisdatei traegt die Extension ".qmc". examples/drehrichtung.Qa.dnf.qmc: # file created by 'qmc' (ver.0.1b/95-7-29) # Input file: drehrichtung.Qa.dnf # created: Sun Sep 24 13:08:35 2000 # SIGNALS Qa Qb R A B In einem Kommentar werden saemtliche verbliebenen Minterme aufgefuehrt. Nach dem Ausdruck "#Idx:" folgt eine Zeile, in der jeder Spalte einer der Eingangsterme zugeordnet ist. Die Eingangsterme, die in dem zugehoerigen Minterm enthalten sind, sind durch Kreuze 'X' markiert. #All remaining min terms: # Qa := /Qb * A * /B # Idx: X-----X-X-X----- # + Qb * A * B # Idx: -X--X---------XX # + Qa * Qb * /B # Idx: --XX--------XX-- # + Qa * /Qb * B # Idx: -----X-X-X-X---- # + Qa * A # Idx: --X-XXX--XX-X-X- Auf das Schluesselwort "EQUATION" folgt die Auswahl der Minterme, welche die Minimierte Logikgleichung darstellt. Leider ist die Heuristik zur Auswahl der erforderlichen Minterme nicht so zuverlaessig, dass in jedem Fall die guensitgste Kombination gefunden wird -- deshalb die Angabe saemtlicher Minterme. Falls Jemand eine bessere Heuristik findet... EQUATION Qa := /Qb * A * /B # Idx: X-----X-X-X----- + Qb * A * B # Idx: -X--X---------XX + Qa * Qb * /B # Idx: --XX--------XX-- + Qa * /Qb * B # Idx: -----X-X-X-X---- ------------------------------------------------------------------------- Volker Bosch