************************************************************************** * * * a m i G A L * * * * Bedienungsanleitung * * * * * * © 1992 by * * * * Johannes Schnell * * Hard- & Softwareentwicklung * * St.-Andreas-Str. 13 * * 8899 Langenmosen * * Tel.: 08433/1512 * * * ************************************************************************** ========================================================================== Was zum Teufel ist ein GAL? ========================================================================== GALs sind programmierbare Logikbausteine, d.h. ihre Funktion ist nicht festgelegt und kann, anders als beispielsweise bei Bausteinen der Serie 74LSxxx, vom Anwender selbst bestimmt werden. Somit kann ein Anwender ganze Schaltungsteile, die vorher auf mehrere Standart-Logikbausteine ver- teilt waren, mit einem GAL realisieren. Ein GAL kann, im Gegensatz zu den teureren PAL-Bausteinen, mindestens einhundertmal elektrisch gelöscht und wieder programmiert werden. Dieser Umstand ist besonders bei der Entwicklung von Schaltungen von Vorteil und spart eine Menge Kosten. Zudem ersetzen die GALs 16V8 und 20V8 zusammen 42 PAL-Bausteine. Ein GAL 16V8 ist heute ab ca. 2,50 DM, ein GAL 20V8 ab ca. 3,00 DM (Stand August 1992) zu bekommen. Ein GAL 16V8 hat 18 freie Anschlüsse (22 beim GAL 20V8), welche alle als Eingänge und acht davon als Ausgänge benutzt werden können. Die Ausgänge können über interne D-Flipflops geführt werden, womit auch Zähler und Schieberegister realisierbar sind. Zudem kann jeder Ausgang auch in den 3-State (hochohmigen) Zustand geschaltet werden. Zur Programmierung von GALs ist allerdings ein Programmiergerät, sowie ein Computer mit zugehöriger Software nötig. In der Elektronikzeitschrift ELEKTOR erschien in der Ausgabe 3/92 eine Bauanleitung für ein GAL- Programmiergerät zum Anschluß an IBM-kompatible PC's. Dieses Programmiergerät ist nun auch an den Commodore AMIGA anschließbar. ========================================================================== Der ELEKTOR-GAL-Programmer ========================================================================== Der Aufbau des Programmiergerätes Wie das Programmiergerät aufgebaut ist und montiert wird, entnehmen Sie bitte dem Artikel "GAL-Programmer" aus der ELEKTOR 3/92, Seite 17 - 22. In der Amiga-Version ist zusätzlich eine kleine Änderung nötig: An der Centronics-Buchse sind die Pins 10 und 11 zu verbinden, eine ein- fache Lötbrücke reicht dafür aus! Das Programmiergerät kann mit jedem handelsüblichen Druckerkabel für die parallele Schnittstelle an den Amiga angeschlossen werden. Das so modifizierte Programmiergerät kann auch weiter- hin an einem PC betrieben werden. Welche GALs können programmiert werden? Das Gerät kann die GAL-Bausteine 16V8, 16V8A, 20V8 und 20V8A folgender Hersteller programmieren (Programmierspannung 16,5 V): - National Semiconductor - Lattice - SGS/Thomson (ST) - VTI Eine Beschreibung dieser GALs und eine Einführung in diese Materie, ent- nehmen Sie bitte dem Artikel "GALS- Programmierung und Einsatz" aus der ELEKTOR 3/92, Seite 58 - 63. Weiterführende und ergänzende Literatur ist im Literaturverzeichniss angegeben. ========================================================================== Die AMIGA-GAL-Software ========================================================================== Das AMIGA-GAL-Softwarepaket besteht aus dem GAL-Editor amiGAL und der Programmiersoftware amiBURN. Diese Programme erlauben die komfortable Erstellung der GAL-Funktionen und deren Programmierung. Die Bedienung und das Aussehen der Programme entspricht dem Standart der neuen Workbench 2.0. Die Software ist fast ausschließlich mit der Maus zu bedienen. ========================================================================== amiGAL ========================================================================== Mit dem Programm amiGAL können Sie komfortabel die Funktionen eines GAL- Bausteins festlegen. Zum erfolgreichen Entwurf von GAL-Funktionen sollten Grundkenntnisse in der Digitaltechnik vorhanden sein! Zum Starten des Programms müssen Sie das amiGAL-Icon zweimal anklicken. Es wird anschließend ein Fenster auf dem Workbench-Screen geöffnet. Die Be- dienung des Programms erfolgt fast ausschließlich mit der Maus. Damit die räumliche Darstellung des Programms voll zur Geltung kommt, sollten die Bildschirmfarben nach Art der Workbench-Version 2.0 einge- stellt sein, also: Farbe 0: hellgrau, o.ä. Farbe 1: schwarz Farbe 2: weiß Farbe 3: hellblau, o.ä. Das Programm läuft auf allen Amigas, in den Workbenchversionen 1.2, 1.3 und 2.0. Ein Arbeitsspeicher von 512 kByte ist ausreichend. Das Hauptmenü ------------- Auf der linken Seite des amiGAL-Windows befindet sich die Menü-Leiste. Hier können durch Anklicken mit der linken Maustaste, die Hauptfunktionen des Programms angewählt werden. Bei Funktionen, die Aufgrund des Programmablaufs zeitweise nicht zur Verfügung stehen, ist daß jeweilige Leisten-Element in 'Geisterschrift' dargestellt. Der Projekt-Bildschirm ---------------------- Diese Funktion ist immer verfügbar. In neun Eingabezeilen kann der Anwender verschiedene Angaben zum momentan bearbeiteten Projekt machen. Bevor eine Eingabe gemacht werden kann, muß die jeweilige Zeile mit der Maus angeklickt werden. Die eingegebenen Daten werden später auch im 'JEDEC'-File als Kommentar mit abgespeichert. Der Laden-Bildschirm -------------------- Mit dieser Funktion können Dateien im amiGAL-Format geladen werden. Unter dem Anzeigefeld für Dateien und Verzeichnisse befinden sich fünf Gadgets, mit denen das aktuelle Laufwerk ausgewählt werden kann. Dabei werden die beiden Diskettenlaufwerke 'DF0' und 'DF1', die Fest- platten 'DH0' und 'DH1', sowie die RAM-Disk 'RAM' unterstüzt. In der Texteingabezeile 'VERZ.' wird der jeweils aktuelle Pfad angezeigt. Er kann hier auch vom Anwender geändert werden. Nachdem ein Laufwerks-Gadget angeklickt, oder ein neuer Pfad eingegeben wurde, werden alle Unterverzeichnisse und Files im Anzeigefeld dargestellt. Zuerst sind die Unterverzeichnisse in der Farbe weiß (WB2.0 Look) aufge- listet, anschliessend folgen die Files in schwarzer Farbe. Falls das 'Filter'-Gadget aktiviert ist, werden nur Files angezeigt, die die Endung '.GAL' in ihrem Namen haben. Somit werden Files, die sowieso nicht geladen werden können, erst gar nicht angezeigt. Rechts neben dem Anzeigefeld befindet sich ein sogenanntes Proportional- Gadget, vergleichbar mit einem Schieberegler. Mit dessen Hilfe kann der anzeigte Inhalt des Anzeigefedes verschoben werden. Klickt man einen Verzeichnisnamen an, so wird der Inhalt dieses Ver- zeichnisses geladen und dargestellt. Durch Anklicken des 'PARENT'-Gadgets gelangt man wieder in das übergeordnete Verzeichnis. Bei Anwahl eines Filenamens wird der Name in der 'FILE'-Textzeile darge- stellt. Durch die Anwahl des 'OK'-Gadgets wird das File dann geladen, vorausgesetzt, es handelt sich um ein File im amiGAL-Format, andernfalls wird ein sogenannter Requester angezeigt, der auf diesen Umstand hinweist. Der Requester muß durch Anklicken eines der 'ABBRUCH'-Gadgets beantwortet werden. Sobald das File geladen ist, verzweigt das Programm in das Projekt-Menü und zeigt dort eventuell vorhandene Projekt-Daten an. Der Sichern-Bildschirm ---------------------- Diese Funktion kann nur ausgewählt werden, falls sich Daten im Speicher befinden. Die Bedienung entspricht, bis auf wenige Unterschiede, der der Laden- Funktion. Auf der rechten Seite befinden sich zusätzlich drei Gadgets, mit denen das Format der zu speichernden Files ausgewählt wird. amiGAL kann folgende drei Formate abspeichern. Das amiGAL-Format Eingegebene Daten sollten grundsätzlich im amiGAL-Format gespeichert werden. Nur diese Speicherart ermöglicht es, nachträglich einige Änderungen an den Funktionen und der Pinbelegung eines GALs vorzunehmen. Files im amiGAL-Format werden grundsätzlich mit der Endung '.GAL' im Filenamen abgespeichert. Das Programm fügt diese Endung automatisch hinzu. Das JEDEC-Format Dieses Format enthält die Daten, mit denen ein GAL programmiert wird. Files dieses Formates erhalten die Endung '.JED'. Dieses Format ist inter- national genormt. Die von amiGAL erzeugten JEDEC-Dateien können somit auch von anderen Programmiergeraeten und Programmen gelesen werden. Wenn also ein GAL programmiert werden soll, müssen die GAL-Daten vorher in einem JEDEC-File abgespeichert werden, damit sie das Programm amiBURN lesen kann. Das Dokument-Format Hier speichert man ein ASCII-File, welches Daten enthält, die im Drucken- Bildschirm festgelegt worden sind. Das File erhält die Endung '.DOC'. Sehen Sie dazu den Punkt "Drucken-Bildschirm". Der Ein/Aus-Bildschirm ---------------------- Auf diesem Bildschirm kann der Anwender die Variablen der GAL-Funktion(en) und deren Art eingeben. Es sind vier verschiedene Variablenarten möglich: - EIN: Die Variable ist eine Eingangsvariable. - AUS: Die Variable ist eine Ausgangsvariable, der Zustand des Aus- gangs wird nicht in die UND-Matrix des GALs zurückgeführt. Beispiel: Ausgang eines Logik-Gatters - E/A: Ebenfalls ein Ausgang, welcher allerdings in die UND-Matrix zu- rückgeführt ist und dessen Zustand als Eingangsvariable verwendet werden kann. Beispiel: Realisierung eines RS-Flipflops - DFF: Ein Ausgang, der über ein D-Flipflop geführt ist. Der Zustand des Ausgangs ist in die UND-Matrix zurückgeführt. Beispiel: Realisierung eines Zählers Der Type einer Variablen wird durch die Anwahl eines der vier entsprechenden Gadgets festgelegt. Unter den Gadgets befinden sich Anzeigen, die jeweils die Anzahl der bereits verwendeten Variablen angeben. Unter dem Gadget DFF wird zusätzlich die Anzahl der möglichen Zustände eines Schaltwerkes dargestellt. Sobald ein Variablentyp nicht mehr zur Verfügung steht (wenn z.B. alle acht möglichen Ausgangsvariablen belegt sind), werden die ent- sprechenden Gadgets gesperrt dargestellt. Im Texteingabefeld 'NAME' muß ein Name für die Variable eingegeben werden, er darf maximal fünf Zeichen lang sein. Durch anschliessendes Drücken der 'RETURN'-Taste oder durch Anwahl des 'OK'-Gadgets wird die Variable in die Variablenliste auf der linken Bild- schirmseite eingefügt. Gibt man eine Variable des Typs D-Flipflop (DFF) ein, werden automatisch die Variablen '/G' (steuert den 3-State-Zustand eines DFF-Ausgangs) und 'CLK' (Taktsignal-Eingang) mit in die Liste eingefügt. In der Variablenliste werden zuerst alle Eingänge, dann die Ausgänge, die Ausgänge mit Rückführung und danach die DFF-Ausgänge aufgelistet. Mit dem Schieberegler, rechts neben der Liste, kann diese verschoben werden. Mit dem 'NEU'-Gadget löscht man, nach einer Sicherheitsabfrage, sämtliche bereits eingegebene Daten. Im linken, unteren Feld des Bildschirms erscheinen bei einer fehlerhaften Eingabe entsprechende Fehlermeldungen, z.B. wenn ein Name bereits vorhanden ist. Falls eine bereits eingegebene Variable wieder gelöscht werden soll, muß zuerst der Varablenname in der Liste angeklickt werden. Er erscheint da- raufhin im Texteingabefeld. Klickt man jetzt das 'Löschen'-Gadget an, so wird die Variable aus der Liste entfernt. Doch Vorsicht: Falls bereits eine Wertetabelle oder Gleichungen eingegeben wurden, werden bei nachträglichem Löschen oder Hinzufügen einer Variablen die Wertetabelle und die Gleichungen gelöscht. Ein Requester weist darauf hin. Der Wertetabellen-Bildschirm ---------------------------- Mithilfe einer Wertetabelle können einfachere Funktionen ohne Kenntnisse der Schaltalgebra eingegeben werden. Aufbau der Wertetabelle Am linken Rand der Tabelle befindet sich die Zeilennummerierung. Die Variablen werden in mehreren Blöcken dargestellt. Auf der linken Seite befinden sich die Eingangsvariablen, beginnend mit der '/G'-Variablen (falls vorhanden). Der Zustand dieser Variable wird vom Programm automat- isch vorgegeben und kann nicht verändert werden (was auch nicht sinnvoll ist). Als nächstes folgen die Eingangsvariablen, die Rückführungen der Ausgänge und die Rückführungen der D-Flipflop-Ausgänge. Die Rückführungen werden dabei als Ausgangszustand bezeichnet. Auf der rechten Seite der Wertetabelle befinden sich die Ausgänge, auch als Folgezustände bezeichnet. Zuerst die D-Flipflop-Ausgänge, die Ausgänge mit Rückführung und die Ausgänge ohne Rückführung. Innerhalb eines Blocks sind die Variablen entsprechend der Reihenfolge in der Variablenliste von rechts nach links angeordnet. Eingabe von Funktionen Falls D-Flipflop-Ausgänge verwendet werden, gibt die erste Zeile der Wertetabelle an, wann die DFF-Ausgänge in den 3-State-Zustand gehen. Dies ist bei den GALs 16V8 und 20V8 nicht frei festlegbar und deshalb kann auch der Anwender diese Zeile der Tabelle nicht verändern. In den nächsten Zeilen folgen dann die eigentlichen Funktionen. Der Inhalt der Wertetabelle kann sowohl über Tastatur, wie auch mit der Maus eingegeben werden. Es sind folgende Funktionen möglich: - Neue Zeile eingeben: Drücken der 'RETURN'-Taste oder Anklicken des 'OK'-Gadgets - Zeile löschen: Drücken der 'DEL'-Taste oder Anklicken des 'Lösche'-Gadgets - Cursor bewegen: Die aktuelle Zeile wird farblich hervorgehoben, die aktuelle Variable ist zusätzlich andersfarbig dargestellt. Der Cursor kann mit den Cursortasten bewegt werden. Durch Anklicken eines Tabelleneintrags kann der Cursor direkt gesetzt werden, mit dem Schieberegler am rechten Rand der Tabelle kann deren Anzeigeinhalt ver- schoben werden. - Tabelleninhalt verändern: Ein Eintrag in der Tabelle kann durch Drücken der entsprechenden Taste, oder durch Anklicken mit der Maus verändert werden. Dabei muß die linke Maustaste sooft gedrückt werden, bis der gewünschte Eintrag erscheint. Klickt man mit der Maus eine andere Zeile an als die aktuelle, wird der neu gewählte Tabelleneintrag an der Cursorposition noch nicht verändert, bei Cursorbewegungen innerhalt einer Zeile wird der Inhalt sofort ver- ändert. Bedeutung der verschiedenen Tabelleneinträge - 0: Eine '0' bedeutet, das die Variable im Low-Zustand ist - 1: Eine '1' bedeutet, das die Variable im High-Zustand ist - X: "don't care" Eingangsseite: Der Zustand der Variable hat in dieser Zeile keinen Einfluss auf einen Ausgang. Ausgangsseite: Die Ausgangsvariable wird von dieser Zeile nicht beein- flusst. - Z: nur Ausgangsseite: Der Ausgang geht in den 3-State-Zustand. - R: nur Eingangsseite: "Rest" Um eine Funktion eindeutig festzulegen, müssen theoretisch alle möglichen Zustände der Eingangsvariablen eingegeben werden. So müssten z.B. bei 13 Eingangsvariablen, 8192 (= 2^13) Zeilen eingegeben werden. Dies ist natürlich nicht sinnvoll. Deshalb werden zuerst nur die "interessanten" Zeilen eingegeben. Die letzte Zeile besteht nun bei den an der Funktion beteiligten Variablen aus 'R'-Zeichen. Diese Zeile deckt nun alle noch nicht eingegebenen Zustände ab. Achtung: Nach dem 'R'-Eintrag dürfen für die betreffenden Variablen nur noch 'X'-Einträge folgen! (Sehen Sie dazu die Beispiele 1 & 2: Logic Gates & Address Decoder) Prüfen der Tabelle Sobald alle Einträge in der Tabelle vorgenommen wurden, muß diese durch Anklicken des 'Prüfe'-Gadgets auf fehlerhafte Eingaben überprüft werden. Das Programm prüft hier allerdings nicht, ob alle möglichen Zustände abge- deckt sind, oder die eingegebenen Funktionen sinnvoll sind. Dies muß der Anwender schon selbst machen (siehe oben: Rest-Funktion). Fehler werden in dem Feld zwischen dem 'Prüfe'- und dem 'Lösche'-Gadget mit den jeweiligen Zeilennummern angezeigt. Falls keine Fehler vorhanden sind, erzeugt das Programm aus der Tabelle die sogenannten Minterme, sozu- sagen die Wertetabelle in Gleichungsform. Der Minterme-Bildschirm ----------------------- In dieser Betriebsart kann der Anwender die Funktionen eines GALs in Gleichungsform eingeben. Die Gleichungen werden dabei in der sogenannten disjunktiven Normalform eingegeben, das heist, in einzelnen Zeilen (Produkttermen) werden Variablen logisch UND-verknüpft. Die einzelnen Zeilen können zusätzlich logisch ODER-verknüpft werden. Falls eine Wertetabelle eingegeben wurde und die Prüfe-Funktion erfolg- reich abgearbeitet wurde, stehen jetzt bereits Gleichungen zur Verfügung. Aufbau des Bildschirms Am linken, oberen Rand befindet sich die Liste der Ausgänge, darunter ist die Liste der Eingänge. Die Anzeigen der Listen können jeweils durch einen Schieberegler verschoben werden. Auf der rechten Seite befindet sich das Anzeigefeld für die Gleichungen. Auch hier ist ein Schieberegler vorhanden. Über dem linken Rand des Anzeigefeldes sind folgende zwei Gadgets: - 'Z'-Gadget: Wenn dieses Gadget angewählt ist, kann die Gleichung für den 3-State-Zustand des betreffenden Ausgangs eingegeben oder ver- ändert werden. Falls hier nichts eingegeben wird, kann der Ausgang nicht in den 3-State-Zustand geschaltet werden. Bei DFF-Ausgängen wird die Variable '/G' hier automatisch einge- tragen und kann auch nicht verändert werden. - '/'-Gadget: Mit diesem Gadget bestimmt man, ob der Ausgang negiert oder nicht negiert wird. Neben diesen beiden Gadgets wird der Name des gerade bearbeiteten Ausgangs angezeigt. Durch klicken auf einen Namen in der Ausgangsliste, können für jeden Ausgang die Gleichungen angezeigt und bearbeitet werden. Negierte Variablen werden mit einen Überstrich dargestellt. Eingabe einer Gleichung In der Eingansvariablenliste sind die Namen der Eingangsvariablen aufge- listet. Vor jedem Namen befindet sich ein '/'-Zeichen. Durch Anklicken des '/' wird der entsprechende Name negiert in die Gleichung eingefügt; wird der Name angeklickt, wird er nicht negiert eingefügt. Jede neu hinzugefügte Variable wird mit den bereits vorhandenen UND-ver- knüpft, solange, bis das '+'-Gadget angeklickt wird. Das '+' steht für eine ODER-Verknüpfung und leitet einen neuen Produktterm ein. Mithilfe des 'Lösche'-Gadgets kann die jeweils letzte Variable einer Gleichung gelöscht werden. Die Variablen des letzten Produkttermes der Gleichung können auch noch nachträglich negiert oder nicht negiert werden, wenn man den Namen in der Eingangsliste anklickt. Die Darstellung der Produktterme erfolgt in formatierter Form und kann vom Anwender nicht verändert werden. Minimieren der Funktionen Jeder Ausgang eines GALs kann maximal acht Produktterme enthalten, handelt es sich um einen 3-State-Ausgang, sind es nur Sieben. Da aber Gleichungen, besonders wenn diese aus der Wertetabelle erzeugt wurden, mehr Produkt- terme enthalten können, muß versucht werden, die Gleichungen zu verkleinern. Dazu entfernt man alle überflüssigen Terme. Dies erledigt das Programm, wenn das 'MIN'-Gadget angeklickt wird. So können in vielen Fällen die Gleichungen auf eine erlaubte Produkttermanzahl reduziert werden. Die Minimierung muß für jeden Ausgang einzeln durchgeführt werden! Falls trotz Minimierung die Produkttermanzahl noch zu groß ist, bleibt nur die Möglichkeit, die Produktterme eines nicht benutzten Ausgangs mit zu benutzen. Siehe dazu die Beispiele 5a & 5b 12-to-1 Multiplexer. Der Pins-Bildschirm ------------------- Hier wird die Pinbelegung des GAL-Bausteins festgelegt. Links oben befindet sich das 'GAL-TYP'-Gadget, mit dem zwischen einem GAL 16V8 und 20V8 gewählt werden kann. Ein symbolisches GAL-Gehäuse wird entsprechend der Einstellung auf der rechten Seite dargestellt. Unter dem 'GAL-TYP'-Gadget befindet sich das Eingabefeld für die 'User Electronic Signature', in dem z.B. eine maximal acht Zeichen lange Seriennummer eingetragen werden kann. Die Standartbelegung ist '*amiGAL*'. Darunter ist die Variablenliste. Um einem Pin eine Variable zuzuordnen, muß der entsprechende Pin in der GAL-Darstellung angeklickt werden. Der Pin wird daraufhin farblich her- vorgehoben. Als nächstes klickt man in der Liste die gewünschte Variable an; diese wird aus der Liste entfernt und dem GAL-Gehäuse zugeordnet. Ausgänge können nur auf den Pins 12 - 19 (GAL 16V8) bzw. 15 - 22 (GAL 20V8) abgelegt werden. Der CLK- und der /G-Pin werden automatisch belegt. Soll eine Belegung rückgängig gemacht werden, ist nur der betreffende Pin anzuklicken, die Variable wird dadurch wieder in die Liste eingefügt. Der Assembler-Bildschirm ------------------------ ACHTUNG: Diese Funktion ist in der Demoversion von amiGAL nicht enthalten! Dieser Bildschirm ist nur freigegeben, wenn alle Variablen einem Pin im Pin-Bildschirm zugeordnet wurden. Diese Funktion erzeugt aus den Gleichungen aus dem Minterme-Bildschirm die Programmierdaten für das GAL. Der Assemblierungsvorgang wird sofort nach der Anwahl der Funktion gestartet. Bei einer erfolgreichen Assemblierung werden Informationen über die Auslastung und die Betriebsart des GALs aus- gegeben, sowie der Inhalt der SYN- und der AC0-Zelle. Durch Anklicken des 'Weiter'-Gadgets werden die Inhalte der AC1-, der PTD- und der XOR-Zellen angezeigt. Tritt bei der Assemblierung ein Fehler auf, so wird darauf hingewiesen und falls möglich, ein Lösungsvorschlag gemacht. Sehen Sie dazu auch den Punkt 'Betriebsarten eines GALs'. Fehlermeldungen: - Fehler #1 - Zuviele Produktterme: Es sind für eine Ausgangszelle mehr als acht, bzw. sieben Produktterme eingegeben worden. Da keine anderen Ausgangs- zellen mehr frei sind, kann die Funktion auch nicht aufge- teilt werden. -> Funktionen eventuell auf mehrere GAL-Bausteine verteilen! - Fehler #2 - Zuviele Produktterme: Es sind für eine Ausgangszelle mehr als acht, bzw. sieben Produktterme eingegeben worden. Da aber noch mindestens eine Ausgangszelle unbelegt ist, sollte versucht werden, die be- treffende Funtion auf zwei Ausgangszellen aufzuteilen. - Fehler #3 - Keine Produktterme: Es sind für eine Ausgangszelle keine Produktterme eingegeben worden. - Fehler #4 - Zuviele Produktterme für 3-State Zustand: Es ist für die Ansteuerung des 3-State Zustandes eines Aus- gangs mehr als ein Produktterm verwendet worden. Für diese Funktions darf nur ein Produktterm verwendet werden! 3-State-Ansteuerung eventuell auf eine freie Ausgangszelle mit Rückkopplung verlagern. (Dieser Fehler kann nur auftreten, wenn die Funktion über die Wertetabelle eingegeben wurde.) - Fehler #5 - Ein Ausgangspin soll als Eingang verwendet werden: Es wird versucht, einem Pin, der in der Betriebsart 'Medium- PAL-Mode' des GALs nur ein Ausgang ohne Rückkopplung sein kann, eine Eingangsvariable zuzuordnen. Abhilfe: Belegen Sie den betreffenden Pin mit einem einfachen Ausgang ohne Rückkopplung. Der Drucken-Bildschirm ---------------------- Hier können einige Daten auf einem Drucker ausgegeben werden. Die Daten, die hier zum Druck ausgewählt werden, können auch als Dokument-File im Menüpunkt Sichern auf einem Datenträger gespeichert werden. Zur Auswahl stehen folgende Daten: - Projektdaten aus dem Projekt-Bildschirm - Pinbelegung des GALs - Wertetabelle - Gleichungen (ein '!' steht hier für eine Negation) - Assembler-Protokoll - Fuse-Map (Zeigt die Zustände der einzelnen Zellen des GALs) Zusätzlich kann ein Blattkopf ausgegeben werden, der zu Beginn einer jeden Seite, zusammen mit der Seitennummer, gedruckt wird. Der gewünschte Text kann im Texteingabefeld eingegeben werden. Die Grundeinstellungen des Druckers müssen in den Preferences des Amiga vorgenommen werden. Folgende Einstellungen sind zu empfehlen: - Einzelblatt DIN A4: Length: 62 PaperSize: U.S. Letter PaperType: Single - Endlospapier 12 Zoll: Length: 66 PaperSize: Narrow Tractor PaperType: Fanfold Ende-Menüpunkt -------------- Beendet das Programm, nach positiver Beantwortung einer Sicherheits- abfrage. ========================================================================== Betriebsarten eines GALs ========================================================================== GALs vom Typ 16V8 und 20V8 können grundsätzlich in drei verschiedenen Betriebsarten betrieben werden. Jede dieser Betriebsarten hat ihre kleinen Einschränkungen, die der Anwender beachte sollte, um erfolgreich mit diesen praktischen Bausteinen zu arbeiten. Die Betriebsart wird vom amiGAL- Assembler je nach den Anforderungen ausgewählt. - Smal-PAL-Mode: Diese Betriebsart wird vom amiGAL-Assembler verwendet, wenn die Funktionen des GALs aus rein kombinatorischer Logik bestehen und keine 3-State-Aus- gänge vorkommen. Die Ausgänge dürfen auch keine Rückkopplung haben. Die maximale Produkttermanzahl pro Ausgangszelle ist acht. Es kann, bis auf zwei Pins, jeder Pin als Eingang verwendet werden. Die restlichen beiden Pins können nur als Ausgang benutzt werden. Dies sind folgende Pins: GAL 16V8: Pin 15 & Pin 16 GAL 20V8: Pin 18 & Pin 19 - Medium-PAL-Mode: In diesem Modus können alle, bis auf zwei Pins, als Eingang Verwendung finden. Alle Ausgänge können in den 3-State Zustand geschaltet werden, sechs der acht Ausgangszellen haben Rückkopplungen in die UND-Matrix des GALs. Es dürfen pro Ausgang nur sieben Produktterme benutzt werden, der achte Produktterm dient zur Ansteuerung des 3-State Zustandes. Folgende Pins dürfen in dieser Betriebsart nur als Ausgang (ohne Rückkopplung) verwendet werden: GAL 16V8: Pin 12 & Pin 19 GAL 20V8: Pin 15 & Pin 22 - Registered-PAL-Mode: Dieser Zustand wird grundsätzlich benutzt, wenn wie bei Zählern und Schieberegistern, getaktete D-Flipflops benötigt werden. Es kann jeder Pin ein 'normaler' Eingang sein, bis auf folgende zwei Pins: Pin 1 ist IMMER der Takteingang 'CLK', Pin 11 (Pin 13 beim GAL 20V8) ist IMMER der Schalteingang '/G' (High -> 3-State) für den 3-State Zustand der D-Flipflop-Ausgänge. Den Ausgangszellen können auch Ausgänge mit und ohne Rückführung zuge- ordnet werden, die maximale Produkttermanzahl ist jedoch nur sieben, im Gegensatz zu den acht Produkttermen bei DFF-Ausgängen. Da der '/G'-Pin NICHT den 3-State Zustand der Nicht-DFF-Ausgänge schaltet, wird der achte Produktterm wiederum für diese Funktion benötigt. ========================================================================== amiGAL Beispiele ========================================================================== Im Verzeichnis 'Beispiele' auf der GAL-Diskette befinden sich einige amiGAL-Dateien, welche die Möglichkeiten und die Realisierung von GALs zeigen sollen. Beispiel 1: Logic Gates ----------------------- In einem GAL 16V8 sind folgende grundsätzliche Logikgatter realisiert: - UND mit zwei Eingängen - ODER mit zwei Eingängen - Inverter - Invertiertes UND mit drei Eingängen - Invertiertes ODER mit zwei Eingängen - EXCLUSIV-ODER mit zwei Eingängen Pinbelegung: Gleichungen: GAL 16V8 ____ ____ | |_| | C = A * B A -| 1 20|- Vcc | | !F = !D * !E B -| 2 19|- C | | H = !G D -| 3 18|- F | | !L = I * J * K E -| 4 17|- G | | O = !M * !N I -| 5 16|- H | | R = P * !Q + J -| 6 15|- L !P * Q | | K -| 7 14|- R | | P -| 8 13|- O | | Q -| 9 12|- N | | GND -|10 11|- M |___________| Anhand dieses Beispiels ist die Handhabung des 'R'-Eintrags in der Werte- tabelle sehr gut zu erkennen. So ist z.B. beim UND-Gatter der Ausgang nur '1', wenn beide Eingänge '1' sind. Diese Zeile ist hier eingegeben, die restlichen drei möglichen Zeilen repräsentiert die 'R'-Zeile. Somit können zwei Eingabezeilen eingespart werden. Q P N M K J I G E D B A # R O L H F C ------------------------------------------ 0 X X X X X X X X X X 1 1 # X X X X X 1 <- C = A * B 1 X X X X X X X X X X R R # X X X X X 0 <- Rest = 0 2 X X X X X X X X 0 0 X X # X X X X 0 X 3 X X X X X X X X R R X X # X X X X 1 X 4 X X X X X X X 0 X X X X # X X X 1 X X 5 X X X X X X X 1 X X X X # X X X 0 X X 6 X X X X 1 1 1 X X X X X # X X 0 X X X 7 X X X X R R R X X X X X # X X 1 X X X 8 X X 0 0 X X X X X X X X # X 1 X X X X 9 X X R R X X X X X X X X # X 0 X X X X 10 0 0 X X X X X X X X X X # 0 X X X X X 11 0 1 X X X X X X X X X X # 1 X X X X X 12 1 0 X X X X X X X X X X # 1 X X X X X 13 1 1 X X X X X X X X X X # 0 X X X X X Beispiel 2: Address Decoder --------------------------- Auch in diesem Beispiel wird der 'R'-Platzhalter eingesetzt. Es sollte ein Adressdecoder realisiert werden, welcher beim Anlegen von zwei bestimmten Adressen an den Adreßleitungen jeweils einen Ausgang auf Low-Zustand schaltet. A A A A A A A A A A A A A A A A # / / F E D C B A 9 8 7 6 5 4 3 2 1 0 # C C # S S # _ _ # 2 1 ------------------------------------------ 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 0 # 0 1 1 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 1 # 1 0 2 R R R R R R R R R R R R R R R R # 1 1 Wie Anhand der Wertetabelle zu sehen ist, wurden nur die zwei Adressen und die dazugehörigen Ausgangszustände in die Tabelle eingetragen, alle anderen möglichen Adressen werden durch die 'R'-Platzhalter abgedeckt. Somit ist die Funktion eindeutig definiert. Beispiel 3: Priority Encoder ---------------------------- Hier ist ein Prioritätsencoder realisiert. Das Dezimaläquvivalent an den vier Ausgängen entspricht dem Eingang mit dem Zustand High, der die höchste Priorität besitzt. Beispiel 4: 4-to-1 Multiplexer ------------------------------ Mithilfe dieser Schaltung kann eine 4 Bit breite Leitungsgruppe wahlweise auf vier verschiedene Eingangsleitungsgruppen geschaltet werden. Die Aus- wahl wird mit den Eingängen 'S0' und 'S1' getroffen. Beispiel 5a: 12-to-1 Multiplexer (Glitches möglich) --------------------------------------------------- Mittels der vier Auswahlleitungen 'S0, S1, S2 und S3' kann ein Ausgang 'Q' wahlweise auf 12 Eingänge geschaltet werden. Hier tritt das Problem auf, daß zur Realisierung dieser Funktion 12 Produkt- terme benötigt werden. Da aber pro Ausgangszelle eines GALs maximal acht Produktterme zur Verfügung stehen, muß die Funktion auf zwei Ausgangszellen aufgeteilt werden. Der Ausgang mit Rückkopplung 'Qa' enthält die ersten sieben Terme (Hier dürfen nur sieben Produktterme verwendet werden, da das GAL im 'Medium-PAL- Mode' betrieben wird!), der Ausgang 'Q' die restlichen fünf Terme, sowie einen Term mit der Rückkopplung von 'Qa': Qa = !S0 * !S1 * !S2 * !S3 * A0 + S0 * !S1 * !S2 * !S3 * A1 + !S0 * S1 * !S2 * !S3 * A2 + S0 * S1 * !S2 * !S3 * A3 + !S0 * !S1 * S2 * !S3 * A4 + S0 * !S1 * S2 * !S3 * A5 + !S0 * S1 * S2 * !S3 * A6 Q = Qa + S0 * S1 * S2 * !S3 * A7 + !S0 * !S1 * !S2 * S3 * A8 + S0 * !S1 * !S2 * S3 * A9 + !S0 * S1 * !S2 * S3 * A10 + S0 * S1 * !S2 * S3 * A11 Bei dieser Art der Schaltungsrealisierung tritt jedoch das Problem unter- schiedlicher Signallaufzeiten auf. Die Signale der Eingänge, die über den Ausgang 'Qa' laufen, brauchen doppelt soviel Zeit bis sie am Ausgang 'Q' eine Änderung bewirken, als die restlichen Eingänge. Deshalb kann es zu Störimpulsen (Glitches) kommen, die bei einigen Schaltungen zu schweren Funktionsstörungen führen können. Falls zusätzlich noch eine Ausgangszelle des GALs frei ist, sollten Schaltungen dieser Art auf die in Beispiel 5b gezeigte Weise realisiert werden. Beispiel 5b: 12-to-1 Multiplexer (Glitches werden weitgehend vermieden) ----------------------------------------------------------------------- In diesem Beispiel wurden die 12 Produktterme der Funktion auf die zwei Ausgänge mit Rückkopplung 'Qa' und 'Qb' verteilt. Diese wiederum werden für den Ausgang 'Q' miteinander verknüpft. Q = Qa * !Qb + !Qa * Qb Qa = !S0 * !S1 * !S2 * !S3 * A0 + S0 * !S1 * !S2 * !S3 * A1 + !S0 * S1 * !S2 * !S3 * A2 + S0 * S1 * !S2 * !S3 * A3 + !S0 * !S1 * S2 * !S3 * A4 + S0 * !S1 * S2 * !S3 * A5 Qb = !S0 * S1 * S2 * !S3 * A6 + S0 * S1 * S2 * !S3 * A7 + !S0 * !S1 * !S2 * S3 * A8 + S0 * !S1 * !S2 * S3 * A9 + !S0 * S1 * !S2 * S3 * A10 + S0 * S1 * !S2 * S3 * A11 Somit sind die Laufzeiten aller Eingangssignale gleich und Störimpulse werden weitestgehend vermieden. Beispiel 6: Flipflops --------------------- Dieses Beispiel zeigt, wie verschiedene Flipflop-Typen auf einem GAL-Bau- stein erzeugt werden können. - RS-Flipflop: Qrs = S + Qrs * !R !/Qrs = S + Qrs * !R - Toggle-Flipflop: Qt = PR + Qt * !T * !CLR + !Qt * T * !CLR 3-State = /G !/Qt = PR + Qt * !T * !CLR + !Qt * T * !CLR 3-State = /G - D-Flipflop: Qd = PR + D * !CLR 3-State = /G !/Qd = PR + D * !CLR 3-State = /G - JK-Flipflop: Qjk = PR + Qjk * !K * !CLR + !Qjk * J * !CLR 3-State = /G !/Qjk = PR + Qjk * !K * !CLR + !Qjk * J * !CLR 3-State = /G Die drei letzteren Flipflop-Typen besitzen zusammen einen Setz- (Preset) und einen Löscheingang (Clear). Außerdem können sie in einen hochohmigen Zustand (3-State) versetzt werden, wenn am Eingang '/G' High-Signal an- liegt. Beispiel 7: 7 Bit Counter with Parallel Load -------------------------------------------- Dies ist das Beispiel eines Dezimalzählers, der über sieben Eingänge vorgeladen werden kann. Beispiel 8: 4 Bit Gray-Counter with Parallel Load ------------------------------------------------- Ein vorladbarer Zähler, der im Gray-Code zählt. Diese Funktion wurde mit einer Wertetabelle eingegeben. Dabei stehen auf der linken Seite der Tabelle jeweils die Zustände der Eingänge und der rückgekoppelten Ausgänge vor einem Taktimpuls, auf der rechten Seite stehen die Zustände der Ausgänge nach einem Taktimpuls. Beispiel 9: 8 Bit Shiftregister with Parallel Load -------------------------------------------------- Ein Beispiel eines Schieberegisters, das vorgeladen und rechts- und links- schieben kann. Es existiert nur ein serieller Eingang für beide Schiebe- richtungen. ========================================================================== Literatur ========================================================================== - ELEKTOR, Ausgabe 3/92, Seiten 17 - 22, und 58 - 63 - Das GAL Buch, Hack/Hoffmann, Elektor Verlag - GALs, Dieter Bitterle, Franzis Verlag - Programmable Logic Devices, National Semiconductor