GALer V1.4

copyright by Christian Habermann

22. Mai 1993

Inhaltsverzeichnis

1 Allgemeines 2

2 Einführung 5 2.1 Was sind GALs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Wie ist ein solches GAL aufgebaut? . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Welche GALs gibt es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Die Betriebsmodi eines GALs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Die Software 10 3.1 Das Source-File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Das Programm ”GALer“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.2.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.2 Allgemeines zur Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.3 Die Menüpunkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.4 Der Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.5 Das Programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.6 Das Austesten von GALs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.7 Der Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.3 Das JEDEC-File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4 Weitere Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.5 Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.5.1 Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.5.2 JEDEC-Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.3 Reassembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4 Die Hardware 30 4.1 Programmierung von GALs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2 Schaltungsbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.3 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

A Anhang 35 A.1 Schlüsselwörter des Source-Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 A.2 Stückliste des GAL-Brenners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 A.3 Literaturhinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Kapitel 1

Allgemeines

GALer ist ein GAL-Programmiergerät mit der dazu nötigen Software. GALer ist SHAREWARE. Falls Sie dieses Programm und/oder die Hardware gebrauchen können, senden Sie mir bitte 20,- DM zu. Den Schaltplan für die Hardware erhalten Sie umgehend nach Erhalt der Shareware-Gebühr.

Art der Bezahlung:

Inland: Egal, das überlasse ich Ihnen.

Ausland: Bar oder Postwechsel. Bei Schecks beträgt die Sharewaregebühr 33,50 DM (13,50 DM Bearbeitungsgebühr für Auslandsschecks von Seiten der Bank).

Ein Update erhalten Sie, wenn Sie mir zusätzlich eine Diskette und 5 DM (auch in Briefmarken, 5 x 1,- DM) für Porto und Verpackung schicken und wenn ein Update fertig ist, das den Namen Update auch verdient. GALer wird allerdings auch weiterhin in PD Serien veröffentlicht werden, so daß Sie auch auf diesem Weg die neueste Version erhalten können.

Meine Adresse: Christian Habermann

Asamstr. 17 85356 Freising Deutschland

FidoNet: 2 : 246/105.10

Der Vertrieb von ”GALer“ über PD-Serien und Mailboxen ist erlaubt. Bedingung ist allerdings, daß dabei kein Gewinn gemacht wird und daß die einzelnen Files unverändert und vollständig kopiert bzw. ”upgeloaded“ werden. Falls Sie den GAL-Brenner nachgebaut haben, dürfen Sie diesen einen zum Bauteilepreis auch verkaufen. Der kommerzielle Vertrieb ist NICHT gestattet. Der Schaltplan darf nur privat und KOSTENLOS weitergegeben werden.

Aufgrund der Tatsache, daß in Deutschland (und nicht nur dort) einige Leute anscheinend den Intelligenzquotienten eines Wollpullis haben, sehe ich mich zu der nachfolgenden Erklärung gezwungen:

Folgenden Personenkreisen ist die Benutzung meines Programms strikt untersagt: Allen Mitgliedern von rechtsradikalen Parteien (DVU, Republikaner usw.), allen Mitgliedern und Sympathisanten von neonazistischen oder rassistischen Gruppierungen, allen ”Bürgern(?)“, die die krimminellen Steine- und Brandsatzwerfer moralisch (sei es durch Applaudieren oder ”nur“ durch Zuschauen) unterstützen sowie allen anderen, die meinen, mit Gewalt gegen Schwächere etwas erreichen zu können.

Falls Sie ”GALer“ über einen PD-Händler bezogen haben und dafür mehr als 5 DM bezahlt haben, sollten Sie sich schnell einen neuen Händler suchen.

ACHTUNG!!! Die Programme ”GALer“ und ”GALerTest“ senden über den Parallel- Port des Amiga Daten. Das heißt: wenn Sie dort einen Drucker, Digitizer oder sonstiges angeschlossen haben, sollten Sie diesen entweder ausschalten oder abstecken, da es sonst unter Umständen zur Beschädigung des Gerätes kommen kann.

Für eventuell entstehende Schäden durch die Hardware und/oder Software kann ich natürlich keine Verantwortung übernehmen.

Ich habe meinen Prototypen genau nach den Schaltplan aufgebaut, den auch Sie bestellen können. Das heißt, daß der Schaltplan fehlerfrei ist. Bei gewissenhaftem Nachbau kann also eigentlich gar nichts schief gehen. Der Nachbau sollte aber dennoch nur von erfahrenen Elektronik-Freaks durchgeführt werden (zumindest muß man Löterfahrung haben und Schaltpläne lesen können). Näheres zur Hardware können Sie im Kapitel 4 dieser Anleitung erfahren.

Hinweis: Diese Anleitung dient lediglich der Einführung in die Materie der GAL-Programmierung. Sie kann weiterführende Literatur (siehe unten) nicht ersetzen. Wenn Sie sich jedoch schon länger mit Digitaltechnik beschäftigen und gar nicht wissen wollen wie ein GAL intern aufgebaut ist und wie es genau funktioniert, dann müßte diese Anleitung zusammen mit den Beispiel-Listings ausreichen, um GALs sinnvoll einzusetzen.

Versionen:

V1.0: Testversion V1.1: Intuition-Umgebung hinzugefügt V1.2: einige Fehler beseitigt V1.3: Fehler im GAL-Assembler beseitigt: /name.E ist jetzt nicht mehr erlaubt - Die Pinnamen

des zu letzt assemblierten Files können an das gezeichnete GAL angefügt werden. V1.4:

• an Kick2.0 angepaßt

• neue Benutzerführung

• A- und B-Typen werden jetzt unterstützt

• Automatische Erkennung ob A-Typ oder Standardtyp vorliegt

• Format des JEDEC-Files kompatibel gemacht

• Neue Funktionen:

– Optimizer für Boolesche Gleichungen

– Verify

– Test auf Security-Fuse

– GALs Vergleichen

– Reassembler

• Fehler im Assembler beseitigt (war hoffentlich der letzte). Bei der Rückkopplung von kombinatorischen Ausgängen machte der Assembler einen Fehler (AC0 falsch gesetzt).

• WICHTIGE ÄNDERUNG!!! Negationszeichen ’/’ in der Pindeklaration werden jetzt in den Gleichungen berücksichtigt! (siehe Abschnitt ”Das Source-File“)

An dieser Stelle möchte ich mich bei folgenden Leuten für Ihre tatkräftige Unterstüztung bedanken. Dank geht an:

- alle diejenigen, die die Shareware-Gebühr bezahlt haben

- Frank Stange für das Betatesting und für seine sehr konstruktive Kritik

- Walraven van Heeckeren für einen Teil der englischen Anleitung

- Wenzel Hoche und Peter Rössel für einen Teil der englischen Anleitung und für die Grafiken in der LaTEX-Version der Anleitung

- an alle diejenigen, die Verbesserungsvorschläge gemacht oder mich auf Fehler aufmerksam gemacht haben

- an Colin Fox und Bruce Dawson für die ’req.library’

Einführung

2.1 Was sind GALs?

GALs (Generic Array Logic) sind programmierbare Logikbausteine. Durch entsprechende Programmierung durch den Anwender, können eine Vielzahl von Standardgatterfunktionen in einem IC, dem GAL, verwirklicht werden. Angenommen, Sie benötigen für eine Digitalschaltung folgende Logikfunktionen:

UND – Gatter mit 2 Eingängen ODER – Gatter mit 2 Eingängen NAND – Gatter mit 2 Eingängen NOR – Gatter mit 2 Eingängen

Um diese Schaltung zu verwirklichen, sind vier (geht auch mit weniger) Standard-ICs erforderlich (74LS... bzw. 40..). Diese Funktionen lassen sich durch EINEN! GAL-Baustein ersetzen. Die Hauptaufgabe von GALs ist die Vereinfachung von Digitalschaltungen indem ein GAL (oder mehrere) eine Vielzahl von herkömmlichen Logik-Bausteinen ersetzt. Ein GAL kann bei entsprechender Programmierung fast alle Logik-Funktionen ersetzen, wie z.B.: AND, OR, XOR, NAND, NOR, Inverter, FlipFlops, Decoder (vor allem Adressdecoder), Multiplexer, Zähler usw. Außerdem kann das GAL jederzeit neu programmiert werden, so daß sich Schaltungen nachträglich wesentlich einfacher ändern lassen, vorausgesetzt das GAL ist gesockelt und nicht fest eingelötet.

2.2 Wie ist ein solches GAL aufgebaut?

Kernstück eines GALs ist eine Matrix. Auf die Spalten dieser Matrix werden alle Eingänge invertiert und nicht invertiert zugeführt. Im unprogrammierten Zustand des GALs sind die Spalten und Zeilen miteinander verbunden. Jede dieser Verbindungen zwischen einer Zeile und einer Spalte entspricht einer UND-Verknüpfung. Durch Programmieren des GALs werden die entsprechenden UND-Verknüpfungen gelöscht, so daß sich die gewünschte Verknüpfung ergibt. Eine Zeile heißt Produktterm, da alle Eingänge (Spalten) deren Kreuzung mit einer Zeile noch existiert eben UNDverknüpft werden. Jeweils acht dieser Zeilen (= Produktterme) werden über ein ODER-Gatter zu der sogenannten OLMC (Output Logic Macro Cell) geführt. Es können also acht Produktterme (Zeilen) miteinander ODER-verknüpft werden. Die OLMC ist eine ”konfigurierbare Ausgangszelle”.

Was bitte ist eine ”konfigurierbare Ausgangszelle“? Ein GAL besitzt acht dieser konfigurierbaren Ausgangszellen. Diese Ausgangszellen können entweder als Eingang, als kombinatorischer Ausgang, als Tristate-Ausgang oder als Register-Ausgang programmiert werden.

Kombinatorischer Ausgang: dieser Ausgang ist ständig aktiv (entweder HIGH oder LOW)

Tristate-Ausgang: dieser Ausgang kann drei Zustände annehmen HIGH, LOW und hochohmig (hochohmig wäre mit dem Abklemmen des Pins zu vergleichen). Dies wird benötigt, wenn man mehrere Ausgänge zusammenschalten will, dabei aber nur einer dieser Ausgänge aktiv sein darf.

Register-Ausgang: Bei diesem Ausgang gelangt das Verknüpfungsergebnis der Eingänge nicht direkt an den Ausgang, sondern über ein D-FlipFlop. Erst bei einem Clock-Impuls gelangt das Ergebnis zu dem entsprechenden Ausgang. Wenn /OE auf HIGH liegt, gehen alle Ausgänge in den hochohmigen Zustand.

Neben der Matrix gibt es in einem GAL noch mehrere ”Bits“: ( (n) bedeutet dabei, daß diese Bits für jeden Ausgang extra vorhanden sind)

XOR (n): Mit diesem Bit kann das Ergebnis der Verknüpfung invertiert werden.

XOR (n) = 0: Ausgang active LOW XOR (n) = 1: Ausgang active HIGH

SYN, AC0, AC1(n): Mit diesen Bits wird bestimmt, in welchem Betriebsmodus sich das GAL befinden soll. Im wesentlichen gibt es drei Betriebsmodi:

Betriebsmodus 1: SYN = 1, AC0 = 0 AC1(n) = 1: OLMC als Eingang AC1(n) = 0: OLMC als kombinatorischer Ausgang

Betriebsmodus 2: SYN = 1, AC0 = 1

AC1(n) = 1 : Tristate-Ausgang Betriebsmodus 3: SYN = 0, AC0 = 1

AC1(n) = 1: OLMC als Tristate-Ausgang AC1(n) = 0: OLMC als Register-Ausgang

PT0...63: (PT = Produkttermfreigabe) Diese Bits bestimmen, ob die Zeilen 0...63 in der Matrix des GALs gültig sein sollen oder nicht.

PTx = 1: UND-Verknüpfungen in der Zeile x sind gültig PTx = 0: UND-Verknüpfungen in der Zeile x sollen nicht berücksichtigt werden (haben

also keine Auswirkung auf den Ausgang) (x = zwischen 0 und 63; in der Matrix gibt es 64 Zeilen, so daß jede Zeile individuell aktiviert bzw. deaktiviert werden kann)

All diese Bits (82 Stück) sind zum sogenannten Architektur-Kontroll-Wort (ACW) zusammengefaßt. Der Aufbau dieses ACW wird im Kapitel 4 näher beschrieben.

Signatur: Hier stehen acht Bytes für eigene Anwendungen zur Verfügung. In der Regel wird hier ein kleiner Kommentar oder die Versionsnummer des GALs als ASCII-Text abgelegt.

Sicherheitszelle (Security-Bit): Durch Setzen dieses Bits wird das GAL gegen unerlaubtes Kopieren geschützt. Das Auslesen der Matrix ist nicht mehr möglich. Da aber die restlichen Bits noch gelesen werden können, ist dieser Schutz nicht sehr effektiv.

Bulk Erase: Durch Programmieren dieser Zelle wird das gesamte GAL gelöscht. Ein GAL kann so ca. einhundertmal(!) neu programmiert werden.

2.3 Welche GALs gibt es?

Am gebräuchlichsten sind die Standard-Typen GAL16V8, GAL20V8 und deren A- und B-Typen GAL16V8A, GAL20V8A bzw. GAL16V8B, GAL20V8B. Die A- und B-Typen sind schneller und stromsparender als die Standard-Typen (ohne A oder B im Namen). Diese sechs GAL-Typen werden auch durch dieses GAL- Programmiergerät unterstützt. Wenn ab jetzt von GAL16V8 oder GAL20V8 die Rede ist, so sind damit auch die A- und B-Typen gemeint. Wenn es erforderlich ist zwischen A-, B-Typen und Standard-Typen zu unterscheiden, werde ich dies extra erwähnen.

Pinbelegungen:

GAL16V8:

Eingang oder Clock Eingang Eingang Eingang Eingang Eingang Eingang Eingang Eingang

GND

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

+5V konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle Eingang oder /OE

GAL20V8:

Eingang oder Clock Eingang Eingang Eingang Eingang Eingang Eingang Eingang Eingang Eingang Eingang

GND

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

+5V Eingang konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle konfigurierbare Ausgangszelle Eingang Eingang oder /OE

Aus der Pinbelegung erkennt man, daß sich die GAL-Typen GAL16V8 und GAL20V8 nach außen hin nur durch die Anzahl der Eingänge unterscheiden. So hängt die Wahl, ob man ein GAL16V8 oder GAL20V8 verwenden soll, nur von der Anzahl der benötigten Eingänge ab.

2.4 Die Betriebsmodi eines GALs

Wie unter 2.2 bereits erwähnt wurde, bestimmen die Bits SYN, AC0 und AC1(n), in welchem Modus sich das GAL befindet. Von diesem Modus hängt die Pin-Belegung des GALs ab.

GAL16V8:

Betriebs- Betriebs- Betriebs-
modus 1 modus 2 modus 3
E  E  Clock
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
GND  GND  GND

Betriebs- Betriebs- Betriebs-
modus 1 modus 2 modus 3
+5 V  +5 V  +5 V
E/K  T*  E/T/R
E/K  E/T  E/T/R
E/K  E/T  E/T/R
K  E/T  E/T/R
K  E/T  E/T/R
E/K  E/T  E/T/R
E/K  E/T  E/T/R
E/K  T*  E/T/R
E  E  /OE

1 2 3 4 5 6 7 8 9 10  11 12 13 14 15 16 17 18 19 20

GAL20V8:

Betriebs- Betriebs- Betriebs-
modus 1 modus 2 modus 3
E  E  Clock
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
E  E  E
GND  GND  GND

Betriebs- Betriebs- Betriebs-
modus 1 modus 2 modus 3
+5 V  +5 V  +5 V
E  E  E
E/K  T*  E/T/R
E/K  E/T  E/T/R
E/K  E/T  E/T/R
K  E/T  E/T/R
K  E/T  E/T/R
E/K  E/T  E/T/R
E/K  E/T  E/T/R
E/K  T*  E/T/R
E  E  E
E  E  /OE

1 2 3 4 5 6 7 8 9 10 11 12  13 14 15 16 17 18 19 20 21 22 23 24

Abkürzungen:

E Eingang

K kombinatorischer Ausgang ohne Rückkopplung

T Tristate-Ausgang

T* Tristate-Ausgang ohne Rückkopplung auf die Matrix, was nur heißt, daß dieser Ausgang nicht als Eingang verwendet werden kann

R Register-Ausgang

Clock Takt für D-FlipFlops; nur für die Pins interessant, die als Register-Ausgang programmiert sind

/OE Output Enable (low aktiv): aktiviert die Registerausgänge

(Erklärung der Begriffe siehe Abschnitt 2.2)

Aus der Pinbelegung ist z.B. ersichtlich, daß die Pins 15 und 16 des GAL16V8 bzw. die Pins 18 und 19 des GAL20V8 nicht als Eingänge programmiert werden können, wenn sich das GAL im Betriebsmodus 1 befindet. Das gleiche gilt für die Pins 12 und 19 bzw. 15 und 22 für den Betriebsmodus 2. Im Betriebsmodus 1 sind die Pins 1 und 11 (GAL16V8) bzw. die Pins 1 und 13 (GAL20V8) für Clock und /OE reserviert. Diese Pins können also nicht wie in den anderen beiden Modi, als Eingänge verwendet werden.

Angenommen, Sie benötigen für Ihr GAL zumindest einen Registerausgang. Dann ist bereits der Betriebsmodus 3 festgelegt. Wenn Sie aber mindestens einen Tristate-Ausgang benötigen und keinen Registerausgang, dann befindet sich das GAL im Betriebsmodus 2. Wenn Sie weder einen Tristate- noch einen Register-Ausgang benötigen, ist Betriebsmodus 1 zu verwenden.

Die Software

Im Prinzip können Sie fast das ganze Kapitel 2 wieder vergessen. Im Prinzip - wohlgemerkt. Was Sie sich unbedingt merken sollten, ist die Pinbelegung der GALs in den verschiedenen Modi. Dadurch lassen sich unnötige Fehler vermeiden. Die Bestimmung des Betriebsmodus und die anderen Parameter, die bei der GAL-Programmierung zu berücksichtigen sind, nimmt Ihnen die Software ”GALer“ ab.

3.1 Das Source-File

Als erstes muß mit Hilfe eines Texteditors ein sogenanntes Source-File oder auch Eingabe-Datei erstellt werden. Diese Datei muß folgende Informationen enthalten:

1. den GAL-Typ (GAL16V8, GAL20V8 bzw. A oder B-Typ)

2. einen 8 Byte langen Text, der als Kommentar in das GAL geschrieben werden soll (Signatur, siehe unter 2.2)

3. die Pinnamen - hier werden den Pinnummern Namen zugewiesen, was wesentlich anschaulicher ist

4. die Booleschen Gleichungen

5. Das Schlüsselwort DESCRIPTION - nach diesem Wort kann ein beliebiger Text stehen. Dieser Text beschreibt in der Regel die Funktion des GALs. Dadurch weiß man auch nach Jahren noch, für was das GAL eigentlich programmiert wurde.

Bevor ich jetzt noch länger ’rum schwafle, hier ein BEISPIEL (freu, jubel).

Beispiel 1: Angenommen, Sie benötigen für eine Schaltung folgende Gatter:

ein AND mit 3 Eingängen
ein NAND mit 2 Eingängen
ein OR  mit 2 Eingängen

eine kleine Digitalschaltung, in der die Ausgänge von 2 AND–Gattern zu den Eingängen eines OR–Gatters führen Schaltbilder:

AND:  ^{W = A * B * C}^{A}^{B}_{C}  ^{W} &

NAND:  _{/X = D * E}_{O}_{D}_{E}  _{X} &

OR:  _{Y = F + G}_{F}_{G}  _{Y} �1

kleine Digitalschaltung:  _{Z = H * I + J * K}_{H}_{I}  &_{J}_{K}  &  _{Z} �1

Legende: *: UND - Verknüpfung +: ODER - Verknüpfung /: low aktiv Um das Source-File zu erstellen, ist zuerst der GAL-Typ zu bestimmen. Für die Verwirklichung der obigen Logik-Funktionen werden insgesamt 11 Eingänge und 4 Ausgänge benötigt. Aus Kapitel 2 wissen wir (oder auch nicht), daß die Wahl des GALs von der Anzahl der Eingänge abhängt. Die Anzahl der Eingänge wiederrum hängt von dem Betriebsmodus ab (siehe unter 2.4, Pinbelegung in den einzelnen Modi). Da weder Tristate- noch Register-Ausgänge verwendet werden, wird sich das GAL nach der Programmierung im Betriebsmodus 1 befinden. Daraus folgt, daß das GAL16V8 10 Eingänge und 8 konfigurierbare Ausgänge besitzt. Da wir nur 4 Ausgänge benötigen, könnten wir die restlichen als Eingänge programmieren, so daß wir insgesamt die benötigten 11 Eingänge und 4 Ausgänge zur Verfügung haben. Daraus folgt, daß GAL16V8 für unsere Aufgabe ausreichend ist. GAL20V8 ginge zwar auch, es wären aber wesentlich mehr Pins unbenutzt (Verschwendung).

Als zweites benötigen wir einen Text für die Signatur, der max. acht Zeichen lang sein darf - z.B. ”Beispiel“.

Als nächstes kommen die Pin-Deklarationen. Hier werden einfach die Pins 1 bis 20 der Reihe nach mit ihrem Namen aufgelistet. Nichtverwendete Pins müssen mit ”NC” (not connected) gekennzeichnet werden, Masse mit GND und +5V mit VCC.

Hier:

B C D E F G H I J GND
K NC NC NC Z Y X W A VCC

Das heißt:

Pin 1 = B  Eingang
Pin 2 = C  Eingang
Pin 3 = D  Eingang
Pin 4 = E  Eingang
Pin 5 = F  Eingang
Pin 6 = G  Eingang
Pin 7 = H  Eingang
Pin 8 = I  Eingang
Pin 9 = J  Eingang
Pin 10 = GND
Pin 11 = K  Eingang
Pin 12 = NC  nicht verwendet
Pin 13 = NC  nicht verwendet
Pin 14 = NC  nicht verwendet
Pin 15 = Z  kombinatorischer Ausgang
Pin 16 = Y  kombinatorischer Ausgang
Pin 17 = X  kombinatorischer Ausgang
Pin 18 = W  kombinatorischer Ausgang
Pin 19 = A  (konfigurierbarer Ausgang als Eingang def.)
Pin 20 = VCC

B C D E F G H I J

GND VCC A W X Y Z NC NC NC K

1 2 3 4 5 6 7 8 9 10  11 12 13 14 15 16 17 18 19 20

Der nächste Punkt sind die Booleschen Gleichungen.

W = A * B * C
/X = D * E
Y = F + G
Z = H * I + J * K

Somit haben wir alle Dinge, die man für das Eingabe-File benötigt. Nun stellt sich aber die Frage, wie dieses File aufgebaut ist:

In der 1. Zeile muß der GAL-Typ stehen. Hier: GAL16V8

In der 2. Zeile muß die Signatur stehen. Hier: Beispiel

Danach folgt die Pin-Deklaration:

B C  D  E F G H I J GND
K NC NC NC Z Y X W A VCC

dann die Booleschen Gleichungen:

W = A * B * C
/X = D * E
Y = F + G
Z = H * I + J * K

und das Schlüsselwort DESCRIPTION.

Jetzt können Sie mit Hilfe eines Texteditors das Eingabe–File erstellen und unter “beispiel.pld“ abspeichern. Dabei dürfen Sie den Anhang ”.pld” NICHT weglassen. So sollte das Eingabe-File schließlich aussehen:

GAL16V8 hier darf ein Kommentar stehen
Beispiel  hier darf ein Kommentar stehen
B C  D  E F G H I J GND
K NC NC NC Z Y X W A VCC
W = A * B * C
/X = D * E
Y = F + G
Z = H * I + J * K

DESCRIPTION: Ab hier darf ein beliebiger Text stehen, der am besten die Funktion des GALs näher beschreibt.

Ob Sie im Eingabe-File als GAL-Typ GAL16V8, GAL16V8A oder GAL16V8B angeben ist im Prinzip egal. Die JEDEC-Datei, die später der Assembler aus diesem Eingabe-File erzeugt, ist bei allen drei Typen gleich.

Bei der Pindeklaration ist folgendes zu beachten: In der Version 1.4 von GALer werden Negationszeichen (”/”) in der Pindeklaration auch in den Gleichungen berücksichtigt. Das heißt: Wenn in der Pindeklaration vor einem Pinnamen ein ”/” steht und in einer Gleichung der Pinname ohne ”/” steht, hat dies die selbe Wirkung als wenn der Pinname in der Pindeklaration ohne ”/” stehen würde und in der Gleichung mit ”/”. Steht sowohl in der Pindeklaration als auch in der Gleichung vor dem Pinnamen ein ”/”, so heben sich die Negationszeichen auf (doppelte Negation).

Wie erhält man aber jetzt aus dem Eingabe-File das programmierte GAL? Dazu wird das Programm ”GALer“ benötigt. Die Software wird im folgenden Kapitel ausführlich und hoffentlich auch allgemeinverständlich erklärt.

3.2 Das Programm “GALer“

3.2.1 Installation

GALer benötigt im libs: Verzeichnis die ”req.library”. Die Konfigurationen werden im File ”s:GALer.config” abgespeichert. Wird dieses File beim Starten von GALer nicht gefunden, werden die Default-Werte eingestellt. Sie können ”GALer“ entweder von der Workbench oder von der Shell (oder CLI) aus starten.

3.2.2 Allgemeines zur Bedienung

Zur Bedienung läßt sich eigentlich nur sagen, daß dieses überaus nette Wesen häufig in Restaurants anzutreffen ist und dem Trinkgeld nicht abgeneigt ist.

Fast alle Requester (einzige Ausnahme ist der File-Requester) können sowohl mit der Maus als auch mit der Tastatur bedient werden. Die Tastenbelegung ist dabei folgende:

”w”:  entspricht dem Anklicken von ”Weiter” oder ”O.K.”
”a” oder ESC: entspricht dem Anklicken von ”Abbruch”
”1”:  entspricht dem Anklicken von ”GAL16V8”
”2”:  entspricht dem Anklicken von ”GAL16V8A”
”3”:  entspricht dem Anklicken von ”GAL20V8”
”4”:  entspricht dem Anklicken von ”GAL20V8A”
”ü”:  entspricht dem Anklicken von ”übernehmen”

(siehe Optimizer)

”v”:  entspricht dem Anklicken von ”verwerfen”

(siehe Optimizer)

”GALer“ verwaltet die Endungen an den File-Namen ”.pld”, ”.jed”, ”.chp”, ”.pin”, ”.fus” selbstständig. Im File-Requester können Sie daher File-Namen entweder mit oder ohne die entsprechenden Endungen eingeben.

Die Bedienung an sich dürfte nicht zu schwer sein. Befolgen Sie einfach die Anweisungen von ”GALer“. Bei jeder Aktion erscheinen entsprechende Requester, die Sie darauf hinweisen, was gerade gemacht wird oder warum ein bestimmte Funktion nicht ausgeführt werden kann bzw. wo ein Fehler ist.

3.2.3 Die Menüpunkte

Projekt-Menü:

über GALer

Sagt Ihnen wer den ganzen Mist verbrochen hat. Ich kann’s Ihnen auch gleich so sagen: Ich war’s!

Konfig. sichern

Hiermit können einige Einstellungen wie GAL-Typ usw. abgespeichert werden (File ”s:GALer.config”). Beim nächsten Start von ”GALer“ wird dieses File geladen und die entsprechenden Werte werden wieder eingestellt.

Quit

”GALer“ verlassen (heul). Mit dieser Funktion sollten Sie extrem vorsichtig sein: Wenn sie zu oft benutzt wird, merkt sich das ”GALer“ und wird sehr sehr böse. Die Folge: ”GALer“ hebelt den Prozessor ’raus und verkauft ihn meistbietend - dann schaut Ihr Amiga und versteht das RAM nicht mehr.

GAL-Typ - Menü:

GAL16V8, GAL20V8, A-Typ

Mit diesen drei Menüpunkten kann der zu verwendende GAL-Typ eingestellt werden. Welcher Typ eingestellt ist, ist an dem Amiga-Haken links neben dem entsprechenden Menüpunkt zu sehen.

Auto-A-Typ

Wenn dieses Menü aktiviert ist (Amiga-Haken), ist die automatische A- bzw. B-Typ-Erkennung aktiviert. Das heißt: GALer erkennt selbstständig, ob ein A-, B- oder ein Standard-Typ-GAL verwendet wird und verhält sich ensprechend. Sie müssen also nicht mehr aufpassen, daß Sie den richtigen Typ eingestellt haben. Sie müssen nur noch einstellen, ob ein GAL16V8 oder ein GAL20V8 verwendet wird.

Typ-Requester

Wenn dieser Menüpunkt aktiviert ist, erscheint vor jeder Schreib- oder Lesefunktion auf ein GAL ein Requester, in dem Sie nochmal den GAL-Typ auswählen können. Diese Auswahl hat eine globale Wirkung — die gleiche, wie wenn Sie den GAL-Typ über den entsprechenden Menüpunkt auswählen würden. Das heißt: Wenn Sie z.B. im GAL-Typ-Menü ein GAL20V8 eingestellt haben und im Requester jetzt ein GAL16V8 auswählen, so wird im GAL-Typ-Menü automatisch ein GAL16V8 eingestellt. Alle darauffolgende Aktionen beziehen sich dann auf das GAL16V8.

\underline{GAL - Menü:}

programmieren

GAL programmieren. Es erscheint ein File-Requester, mit dem Sie die entsprechende JEDEC-Datei auswählen können, die in das GAL gebrannt (programmiert) werden soll.

kopieren

GAL kopieren. Mit dieser Funktion haben Sie die Möglichkeit GALs zu kopieren. Dies ist jedoch nur sinnvoll, wenn das zu kopierende GAL nicht geschützt (Security-Fuse) ist.

löschen

GAL löschen. Bevor ein bereits programmiertes GAL neu programmiert werden kann, muß es zuvor gelöscht worden sein. Diese Aufgabe übernimmt diese Funktion.

vergleichen

Es gibt drei verschiedene Möglichkeiten des Vergleichs, die Sie in einem entsprechenden Requester auswählen können. Als da wären:

1. GAL mit GAL vergleichen: Es wird ein Quell-GAL eingelesen, das dann mit mehreren, nacheinander in die Textool-Fassung einzusetzenden GALs verglichen werden kann.

2. GAL mit JEDEC-File vergleichen: Es wird wieder zuerst ein Quell-GAL eingelesen. Anschließend können Sie JEDEC-Files auswählen, die mit dem GAL verglichen werden.

3. JEDEC-File mit GAL vergleichen: Es wird zunächst ein JEDEC-File geladen, das dann anschließend mit mehreren GALs verglichen werden kann.

Leertest

Testen, ob das GAL leer ist.

setze Security-Bit

Brennt die Security-Fuse in einem GAL (siehe 2.2).

teste Security-Bit

Diese Funktion testet ein GAL daraufhin, ob die Security-Fuse gebrannt wurde oder nicht.

Schreibverhalten

Nach Aufruf dieses Menüpunkts erscheint ein Requester. In diesem Requester können Sie folgendes einstellen: programmieren mit oder ohne vorherigem Leertest und mit oder ohne anschließendem Verify (Überprüfung, ob die Daten richtig in das GAL programmiert worden sind). GAL kopieren: Beim Ziel-GAL vorher Leertest durchführen oder nicht und nach dem Kopieren Verfiy durchführen oder nicht. GAL löschen: Nach dem Löschen des GALs einen Leertest durchführen um festzustellen, ob das GAL auch wirklich leer ist.

GAL-Assembler - Menü:

Datei assemblieren

Durch Auswahl dieses Menüpunktes wird der Assembler aufgerufen. Mit dem Assembler wird ein Source-File (”.pld”) in eine JEDEC-Datei (”.jed”) umgewandelt. Die JEDEC-Datei wird zur Programmierung des GALs benötigt. Es erscheint zunächst wieder ein Requester. In dem Requester kann eingestellt werden, welche Files erzeugt werden sollen, ob die Files automatisch (ohne extra einen File- Requester zu öffnen) geschrieben werden sollen und ob der im Source-File (”.pld”) angegebene GAL-Typ (GAL16V8, GAL20V8) übernommen werden soll. Durch Anklicken von ”Weiter” erscheint ein File-Requester, mit dessen Hilfe Sie das zu assemblierende Source-File (Endung ”.pld”) auswählen können.

GAL-Disassembler - Menü:

Signatur lesen

Liest die Signatur aus dem GAL aus und gibt sie auf dem Bildschirm aus.

ACW lesen

Liest das Architektur-Kontroll-Wort aus dem GAL aus und gibt es auf dem Bildschirm aus.

GAL-Info

Diese Funktion gibt einige Informationen über das GAL aus: GAL-Typ (A-Typ oder Standard), Hersteller und ob das GAL durch diese Version von GALer unterstützt wird oder nicht.

JEDEC-Datei erstellen

Diese Funktion liest ein bereits programmiertes GAL aus und erstellt eine JEDEC-Datei.

JEDEC-Datei Parameter

Die Einstellungen die hier vorgenommen werden können, beziehen sich auf das Schreiben und auf das Lesen der JEDEC-Datei. Diese Einstellungen gelten für alle Funktionen, die eine JEDEC-Datei erzeugen bzw. einlesen. Das sind: erzeugen: der GAL-Assembler und die Funktion ”JEDEC-Datei erstellen” bzw. lesen: GAL mit JEDEC-File bzw. JEDEC-File mit GAL vergleichen und ”GAL programmieren”.

Folgende Einstellungen sind für das JEDEC-File-Schreiben zuständig:

1. Security-Bit: Gibt an, ob im JEDEC-File das Security-Bit gesetzt sein soll oder nicht. Wenn es gesetzt ist und später ein GAL mit dieser JEDEC-Datei programmiert wird, so werden Sie nach der Programmierung des GALs in einem Requester gefragt, ob die Security-Fuse im GAL gebrannt werden soll oder nicht.

2. Fuse-Checksumme: Gibt an, ob eine Checksumme über die verschiedenen Fuses (1en und 0en im JEDEC-File) gebildet werden soll oder nicht. Diese Checksumme wird dann beim späteren Einlesen der Datei überprüft. Damit wird verhindet, daß versehentlich Fuses geändert werden. In der Datei kann aber z.B. ein Kommentar verändert werden, ohne daß dies einen Einfluß auf die Checksumme hätte, da die Checksumme ja nur über die 1en und 0en gebildet wird - deshalb Fuse-Checksumme.

3. File-Checksumme: Gibt an, ob eine Checksumme über das gesamte File erstellt wird. Dieses File darf dann überhaupt nicht mehr geändert werden, auch der Kommentar nicht. Ansonsten wird die Checksumme verändert und beim Einlesen der JEDEC-Datei wird dann darauf hingewiesen, daß die File-Checksumme nicht mehr stimmt. Damit wird verhindert, daß die Datei in irgendeiner Weise verändert wird.

Für das Lesen des JEDEC-Files gibt es nur eine Einstellung: CTRL ⇒ neue Zeile. Dies hat folgende Bewandtnis: Wenn das JEDEC-File mit einer File-Checksumme erzeugt wurde, sind im File einige Steuerzeichen (STX = 0x02 und ETX = 0x03) enthalten. Einige Texteditoren (z.B. CED) beginnen nach einem solchen Steuerzeichen eine neue Zeile, obwohl kein CR (carriage return) vorliegt. Wenn jetzt im JEDEC-File ein Fehler gefunden wurde, gibt ”GALer“ natürlich eine Fehlermeldung zusammen mit der Zeilennummer aus, in der der Fehler auftrat. Da aber ”GALer“ nicht wissen kann, ob Sie anschließend das JEDEC-File mit einem Texteditor editieren, der nach einem <STX> oder <ETX> eine neue Zeile beginnt oder nicht, kann mit dem ”CTRL ⇒ neue Zeile” eingestellt werden, ob ”GALer“ das <STX> bzw. <ETX> als ein Carriage Return bewerten soll oder nicht. Damit wird erreicht, daß die von ”GALer“ ausgegebene Fehler-Zeilennummer mit der Zeilennummer in Ihrem Lieblingseditor übereinstimmt.

Reassembler

Diese Funktion liest eine JEDEC-Datei ein und erstellt daraus das entsprechende Source-File. Im Requester ”Pinnamen” können Sie die Pinnamen für die Pinnamendeklaration im Source-File eingeben. Mit ”Clear” werden die voreingestellten Pinnamen gelöscht. Mit ”Set” werden diese wieder hergestellt.

Tools - Menü:

Pinnamen zeigen

Falls bereits ein Source-File erfolgreich assembliert wurde und der eingestellte GAL-Typ mit dem GAL-Typ in der Source-Datei übereinstimmt, fügt diese Funktion die entsprechenden Pinnamen an das symbolische GAL in der Bildschirmmitte an.

Pinnamen löschen

Löscht die Pinnamen am GAL wieder.

Prüfmuster

Programmiertes GAL auf Funktionsfähigkeit hin überprüfen - nähere Beschreibung siehe unten.

Optimizer

Diese Funktion dient der Optimierung von den Booleschen Gleichungen in den Source-Files. Siehe weiter unten.

3.2.4 Der Assembler

Um ein GAL zu programmieren, muß zunächst das Source-File in das sogenannte JEDEC-File umgewandelt werden. Diese Aufgabe übernimmt der GAL-Assembler. Das JEDEC-File (Endung ”.jed”) ist ein ASCII-File, in dem sämtliche Bits, die in einem GAL gesetzt werden können, der Reihe nach aufgelistet sind. Den Zustand der Bits (0 oder 1) ermittelt der GAL-Assembler aus dem Source-File. Neben dem JEDEC-File kann der GAL-Assembler noch drei weitere Files generieren. Diese Files dienen aber lediglich der Dokumentation. Das Fuse-File (Endung ”.fus”) zeigt den Zustand der Bits in der Logik-Matrix. Das Chip-Diagramm (Endung ”.chp”) zeigt den Anschlußplan des GALs und das Pin-Belegungs-File (Endung ”.pin”) listet alle Pins auf und zeigt, ob diese als Eingang oder Ausgang programmiert sind. Die Files können von einem beliebigen Texteditor gelesen und eventuell nachbearbeitet werden. Bei der Eingabe von Filenamen in ”GALer“ ist zu beachten, daß die Endungen (”.jed”, ”.chp”, ”.pin”, ”.pld”) der einzelnen File-Typen (JEDEC-, Chip-, Pin-, Eingabe-File) entweder weggelassen oder mit angegeben werden können.

Die Assemblierung eines Source-Files geschieht wie folgt: Sie wählen einfach den Menüpunkt ”Datei assemblieren” an. Im daraufhin erscheinenden Requester kann folgendes einstellt werden:

• Welche Files erzeugt werden sollen — JEDEC, Fuse, Chip, Pin.

• Ob die zu erzeugenden Files automatisch abgespeichert werden sollen. Das heißt, daß nach erfolgreicher Assemblierung des Source-Files der Name des Source-Files (”name.pld”) mit den entsprechenden Endungen ”name.jed”, ”name.fus”, ”name.chp” und ”name.pin” versehen wird und anschließend ohne File-Requester in das selbe Directory geschrieben wird, in dem sich auch das Source-file (”name.pld”) befindet.

• Ob der GAL-Typ aus dem Source-File übernommen werden soll. Wenn diese Funktion aktiviert ist, wird das symbolische GAL in der Bildschirmmitte mit den Pinnamen aus dem Source-File versehen. Damit wird ein späteres Austesten mit der Funktion ”Prüfmuster” erheblich erleichtert, da anstatt der selten bläden Pinnummern jetzt richtige Namen dastehen (ist doch toll, oder?). Anmerkung: ”selten bläd“ ist ein bayerischer Kraftausdruck und heißt soviel wie: nicht häufig unintelligent oder allgemein verständlicher: selten dämlich

Durch Anklicken von ”Weiter” geht’s weiter und mit ”Abbruch” wird abgebrucht (hi hi – lustiger Spruch, muß ich mir merken). Wenn Sie sich nach Abwägung sämtlicher Vor- und Nachteile und nach Beseitigung sämtlicher Gewissenskonflikte zu einem ”Weiter” durchgerungen haben, erscheint jetzt ein File-Requester. Gleich eines vorweg: Der File-Requester ist nicht von mir, Sie haben es sicher schon bemerkt. Der File-Requester stammt aus der ”req.library” und wurde von Colin Fox und Bruce Dawson programmiert - denen gebührt also die Ehre. Kennen Sie meinen ”File-Requester“ aus der 1.3er Version von ”GALer“? Wenn ja, dann wissen Sie was Sie den beiden zu verdanken haben. In diesem File-Requester können Sie jetzt das Source-File auswählen, das assembliert werden soll.

Wenn während der Assemblierung kein Fehler aufgetreten ist, dann erscheint erneut ein File-Requester. Hier können Sie auswählen, unter welchem Namen die soeben erzeugte JEDEC-Datei abgespeichert werden soll. Fehlermeldungen des Assemblers werden in einem eigenen Abschnitt ausführlich erklärt.

3.2.5 Das Programmieren

Um ein GAL zu programmieren muß, wie bereits erwähnt, zunächst aus dem Source-File die JEDEC-Datei erzeugt werden. Diese Aufgabe übernimmt, wie ebenfalls bereits erwähnt, der Assembler.

Liegt die JEDEC-Datei vor, muß sichergestellt sein, daß das GAL leer ist. Dies kann mit der Funktion ”Leertest” überprüft werden. Wenn ein GAL nicht leer ist, muß es vor der erneuten Programmierung mit der Funktion ”löschen” gelöscht werden. Wenn es dann leer ist, kann die Funktion ”programmieren” aufgerufen werden. Im daraufhin erscheinenden File-Requester können Sie das JEDEC-File auswählen, das in das GAL programmiert werden soll. Wenn dies geschehen ist, wird das GAL programmiert.

Hier nochmal eine kurze Zusammenfassung der Vorgehensweise bei der Programmierung von GALs:

1. mit Texteditor das Eingabe-File erstellen (”name.pld”)

2. Eingabe-File assemblieren ⇒ JEDEC-File (”name.jed”)

3. GAL-Typ einstellen (GAL16V8 oder GAL20V8 und eventuell A-Typ, wenn nicht die automatische A-Typ-Erkennung (Menü Auto-Typ) aktiviert ist)

4. GAL in die Fassung einsetzen Wenn das GAL nicht leer ist, muß es durch Anwählen von ”löschen” zuerst gelöscht werden, bevor es programmiert werden kann.

5. ”programmieren” anwählen

6. GAL aus der Fassung entfernen — fertig

3.2.6 Das Austesten von GALs

Nachdem das GAL programmiert wurde stellt sich immer die Frage, ob sich das GAL auch so verhält, wie man es sich eigentlich vorgestellt hat. Dazu gibt es den GAL-Prüfer. Um ein GAL auf seine Funktion hin zu überprüfen, muß es natürlich zuerst wieder in die Fassung gesteckt werden und gegebenenfalls der GAL-Typ wieder richtig eingestellt werden. Jetzt kann der Menüpunkt ”GAL-Prüfer - Prüfmuster” angewählt werden. In der Mitte des Bildschirms sehen Sie symbolisch ein GAL abgebildet. Im GAL selbst sind einige ’E’s und ’A’s zu sehen. Das ’E’ steht für Eingang und das ’A’ für Ausgang. Das ’A’ ist ein Gadget. Durch Anklicken wird das ’A’ zu einem ’E’ und durch nochmaliges Anklicken wieder zu einem ’A’. Das heißt, Sie können bestimmen, ob dieser Pin als Eingang oder als Ausgang behandelt werden soll. Falls ein Pin ein Eingang ist, kann durch ein weiteres Gadget bestimmt werden, ob der Eingang auf High (’H’) oder auf Low (”L”) gelegt werden soll. Die Ausgänge sind blau umrandet. Ein Ausgang kann drei Zustände annehmen: ’H’ (High-Pegel), ’L’ (Low-Pegel) und’Z’ (hochohmig).

Wenn Sie das GAL aus dem obigen Beispiel verwenden, muß zunächst Pin 19 (=”A”) durch Anklicken von ’A’ (das bei Pin 19), als Eingang definiert werden, da dieser Pin im obigen Beispiel eben als Eingang programmiert wurde. Die Eingänge des AND-Gatters sind: Pin 19 (=”A”), Pin 1 (=”B”), Pin 2 (=”C”) Der Ausgang ist Pin 18 (=”W”). Wenn Sie jetzt die Eingänge des AND-Gatters durch Anklicken der Pegel-Gadgets auf HIGH legen, so muß der Ausgang (=Pin 18) ebenfalls auf HIGH gehen. Tut er das nicht oder geht der Ausgang auch bei anderen Kombinationen als bei ”A”=HIGH, ”B”=HIGH, ”C”=HIGH auf HIGH, liegt wahrscheinlich ein Fehler in der Eingabe-Datei vor. Diese sollte dann nocheinmal überprüft und gegebenenfalls korrigiert werden. Wurde ein Fehler gefunden, muß das GAL zuerst gelöscht werden bevor es neu programmiert werden kann (ein GAL kann bis zu einhundertmal gelöscht und neu programmiert werden). Auf diese Art und Weise läßt sich das gesamte GAL überprüfen. Wenn das GAL vollständig getestet wurde und kein Fehler gefunden wurde, kann es in die Schaltung eingebaut werden.

3.2.7 Der Optimizer

Es kann vorkommen, daß die Booleschen Gleichungen im Source-File recht komplex sind. Boolesche Gleichungen lassen sich aber häufig vereinfachen. Dazu gibt es mehrere Möglichkeiten:

1. Karnaugh-Diagramm: Dies ist ein graphisches Verfahren, um Boolesche Gleichungen zu vereinfachen. Es eignet sich aber eher für einfachere Gleichungen und dann vor allem dazu, Gleichungen von Hand zu optimieren.

2. Quine-McCluskey: Dies ist für den Computer das weitaus bessere Verfahren. Hier werden soviele Produktterme wie möglich an die eigentliche Gleichung angehängt (getrennt durch ’+’) die aber den Wahrheitsverlauf der Gleichung nicht verändern. Diese Produktterme werden als Resolventen bezeichnet. Durch diese zusätzlichen Produktterme ist es in der Regel möglich, andere Produktterme der Gleichung zu eliminieren. Wenn man Glück hat, wird die daraus enstehende Gleichung weniger komplex als die ursprüngliche. Wenn man Pech hat, ist das Ergebnis der Optimierung wieder die Ausgangsgleichung. Wenn man absolut megagroßes Pech hat, wird die Gleichung sogar noch komplexer als die Ausgangsgleichung - da hilft dann nur noch der Sprung aus dem Fenster (hoffentlich haben Sie Ihren Amiga im Keller stehen). Der Optimizer von ”GALer“ verwendet genau diesen überaus effizienten Algorithmus.

Nun zur Bedienung des Optimizers:

Nachdem Sie die Menüpunkt ”Optimizer” angewählt haben, erscheint ein File-Requester. Dort können Sie das Source-File auswählen, dessen Booleschen Gleichungen Sie vereinfachen wollen. Wenn das Source-File ohne Fehlermeldung geladen werden konnte, beginnt GALer mit der Optimierung der Gleichungen. Unter ”alte Gleichung:” steht die Boolesche Gleichung, so wie sie im Source-File steht. Unter ”optimierte Gleichung:” steht, unter Umständen nach einigen Sekunden (Minuten, Stunden,...) Rechenzeit, das Ergebnis der Optimierung. Im Feld ”Statistik:”, ist eine Übersicht über die Anzahl der ’*’ und ’+’ der jeweiligen Gleichung zu sehen. Wenn Ihnen das Ergebnis der Optimierung gefällt, klicken Sie das Gadget ”Übernehmen” an oder drücken die ”ü”-Taste. Wenn Ihnen das Ergebnis nicht gefällt, dann klicken Sie ”verwerfen” an oder drücken die ”v”-Taste. Falls noch eine Gleichung vorhanden ist, wird die nächste optimiert. Wenn alle Gleichungen verkasimatukelt wurden, erscheint wieder ein File-Requester. Dort können Sie jetzt angeben, unter welchem Namen das neue Source-File, das jetzt die optimierten Gleichungen enthält (soweit ”übernehmen” angewählt wurde), abgespeichert werden soll. Dort sollten Sie immer einen anderen Namen angeben, als den Namen des ursrünglichen Source-Files.

Z.B.:

ursprüngliches Source-File: name.pld
optimiertes Source-File:  name-opt.pld

Zum Schluß noch ein schönes Beispiel, das zeigt wie effektiv eine Optimierung sein kann:

Gleichung: X = /A*/C + A*/C + C*/D + /B*/C + /A*C*D + B*/D

Durch GALer optimierte Gleichung: X = /C + /D + /A

Beide Gleichungen sind vom Wahrheitsverlauf her völlig identisch. Es wurde nichts weggelassen, was wichtig wäre.

3.3 Das JEDEC-File

Da das JEDEC-File inzwischen 9327 Mal erwähnt wurde, wird dieses wundersame File an dieser Stelle näher erklärt. JEDEC steht übrigens für Joint Electron Device Engineering Council.

Zunächst einmal ist das JEDEC-File nichts anderes als ein ”Text”-File, in dem sämtliche Sicherungen, die in einem GAL enthalten sind der Reihe nach aufgelistet sind. Den Zustand der Bits (0 oder 1) ermittelt der oben bereits erklärte GAL-Assembler.

Am File-Anfang kann ein fast beliebiger Text stehen. Das einzige Zeichen das in diesem Text nicht vorkommen darf ist ein ein Asterix (*) - nicht zu verwechseln mit dem bekannten Gallier. Nach dem ersten ’*’ werden die eigentlichen Steuerzeichen erwartet. Jedes Steuerzeichen MUß wieder mit einem ’*’ abgeschlossen werden, wobei das ’*’ auch erst in einer der nächsten Zeilen stehen kann.

Mögliche Steuerzeichen sind:

N: Das Steuerzeichen N leitet einen Kommentar ein. Das Ende des Kommentars wird mit einem ’*’ gekennzeichnet. Beispiel: N das ist ein Kommentar *

F: Wenn nicht alle Zustände der Sicherungen aufgelistet sind, muß der Wert der fehlenden Zustände angegeben werden. Dazu dient das Steuerzeichen F. Direkt hinter dem F muß eine 0 oder 1 stehen. Diese 0 oder 1 gibt den Wert der fehlenden Zustände an. Das hat den Vorteil, daß nicht alle Sicherungen des GALs aufgelistet werden müssen. Damit wird das JEDEC-File erheblich kürzer und übersichtlicher. Das GAL20V8 hat immerhin 2706 Sicherungen, was ein ganz schön langes File ergeben würde, wenn für jede Sicherung eine ”0” oder ”1” angegeben werden müßte. Beispiel: F0 * G: G bestimmt, ob beim späteren Programmieren eines GALs die Security-Fuse gebrannt werden

soll oder nicht.

G0 *: Security-Fuse nicht brennen ⇒ Auslesen der Fuse-Matrix möglich

G1 *: Security-Fuse brennen ⇒ Auslesen der Fuse-Matrix nicht mehr möglich. Bevor die Security-Fuse gebrannt wird, werden Sie aber durch einen Requester gefragt ob Sie das auch wirklich wollen.

L: Das L leitet die eigentliche Fuse-Liste ein. Direkt hinter dem L muß die Adresse der nachstehenden Sicherungen stehen. Hinter dieser Adresse folgt dann die Liste der Sicherungen (”0”, ”1”). Beispiel: L0000 10110111111111111111111111011111 * Das heißt: in die Adresse 0000 des GALs wird eine 1 geschrieben, in die Adresse 0001 eine 0, in die Adresse 0002 wieder eine 1 usw....

Die Adressen haben folgende Bedeutung:

GAL16V8, GA16V8A, GAL16V8B:

0000-2047: Fuse-Matrix
2048-2055: XOR-Bits der Ausgangszellen
2056-2119: Signatur
2120-2127: AC1-Bits der Ausgangszellen
2128-2191: Produkttermfreigabe
2192 :  SYN-Bit
2193 :  AC0-Bit

GAL20V8, GAL20V8A, GAL20V8B:

0000-2559: Fuse-Matrix
2560-2567: XOR-Bits der Ausgangszellen
2568-2631: Signatur
2632-2639: AC1-Bits der Ausgangszellen
2640-2703: Produkttermfreigabe
2704 :  SYN-Bit
2705 :  AC0-Bit

QF: QF gibt an, wieviele Fuses (Sicherungen) in der JEDEC-Datei enthalten sind. Beim GAL16V8 sind es 2194 und beim GAL20V8 2706. Damit wird klar definiert für welchen GAL-Typ dieses JEDEC-File bestimmt ist. Beispiel: QF2194 *

C: Dem C folgt eine Checksumme (hexadezimale 16-Bit-Zahl) über die verschiedenen Fuses (1en und 0en im JEDEC-File). Diese Checksumme wird dann beim späteren Einlesen der Datei überprüft. Damit wird verhindet, daß versehentlich Fuses geändert werden. In der Datei kann aber z.B. ein Kommentar verändert werden, ohne daß dies einen Einfluß auf die Checksumme hätte, da die Checksumme ja nur über die 1en und 0en gebildet wird, deshalb Fuse-Checksumme. Beispiel: C6402 *

<STX>, <ETX>: Diese Zeichen sind Kontrollzeichen:

<STX>: 0x02 = CTRL-B

<ETX>: 0x03 = CTRL-C

Das <STX> kennzeichnet den Fileanfang und das <ETX> das Fileende. Direkt hinter dem <ETX> muß eine File-Checksumme (hexadez. 16-Bit-Zahl) stehen. Nach der File-Checksumme darf kein Zeichen mehr stehen, also auch KEIN ’*’. Diese Checksumme ist die Summe aller ASCII-Zeichen des Files ab dem <STX> bis zum <ETX> einschließlich des <STX> (0x02) und des <ETX> (0x03). Da diese Checksumme in der Regel über das ganze File gebildet wird, ist eine nachträgliche Änderung des Files nicht mehr erlaubt. Dieses File darf überhaupt nicht mehr geändert werden, auch der Kommentar nicht. Ansonsten wird die File-Checksumme verändert und beim Einlesen der JEDEC-Datei (durch ”GALer“) erscheint dann eine entsprechende Warnung, daß die File-Checksumme nicht mehr stimmt.

V: Nach dem V folgt ein sogenannter Testvektor. Testvektoren werden hier noch nicht unterstützt. Sie werden wie ein normaler Kommentar behandelt (wie ein N).

3.4 Weitere Beispiele

Als nächstes möchte ich ein Beispiel zu Tristate-Ausgängen bringen.

[figure: A; B; Y1; O]

[figure: VCC; Y2; C; D; �1]

[figure: E; F; &; O; G; Y3]

Y1 soll nur dann den Zustand von ”B” annehmen, wenn ”A” = LOW ist. Y2 soll ständig aktiv sein (entweder H oder L – abhängig von ”C” und ”D”). Dies entspricht einem kombinatorischen Ausgang. Y3 soll nur dann aktiv sein, wenn ”E” UND ”F” = HIGH sind.

GAL16V8

A B C D E F G NC NC

GND VCC Y1 Y2 Y3 NC NC NC NC NC NC

1 2 3 4 5 6 7 8 9 10  11 12 13 14 15 16 17 18 19 20

Im Eingabe-File werden die Tristate-Ausgänge durch ein ”.T” gekennzeichnet. Die Tristate-Freigabe erfolgt anschließend mit einem ”.E”. Fehlt die Tristate-Freigabe, so wird ständige Freischaltung angenommen (=VCC). Tristate-Freigabe = GND entspricht ständigem Sperren (= hochohmig). Achtung: Bei Tristate-Ausgängen können maximal sieben Produktterme verwendet werden (bei allen anderen Ausgangsarten sind es maximal acht). In der Tristate-Freigabe darf nur EIN Produktterm verwendet werden (kein OR).

Das Eingabe-File sieht wie folgt aus:

{GAL16V8 \atop Bsp.2}

A  B  C  D  E  F G NC NC GND
NC NC NC NC NC NC Y3 Y2 Y1 VCC
Y1.T = B
Y2.T = C + D
Y3.T = /G
Y1.E = /A
Y3.E = E * F

DESCRIPTION

Als letztes Beispiel wird die Verwendung von Register-Ausgängen gezeigt.

GAL16V8

Clock D0 D1 D2 D3 Set

Clear NC NC

GND VCC Q0 Q1 Q2 Q3 NC NC NC NC /OE

1 2 3 4 5 6 7 8 9 10  11 12 13 14 15 16 17 18 19 20

Da Register verwendet werden heißt das, daß sich das GAL im Betriebsmodus 3 befindet. Dies bedeutet, daß die Pins 1 und 13 für Clock und /OE reserviert sind. Wenn /OE auf HIGH liegt, gehen alle Registerausgänge (hier Q0-Q3) auf ”hochohmig” (=Z). Wenn Clear = HIGH ist und ein Clock-Impuls (LOW-HIGH) anliegt, werden die Ausgänge auf 0 zurückgesetzt. Durch die Eingänge D0-D3 kann der Zähler vorgeladen werden. Durch Set = HIGH und einem Clock-Impuls werden die Werte von D0-D3 in Q0-Q3 übernommen. Ein Clock-Impuls bei Clear und Set gleich LOW bewirkt, daß der Zähler um eins weiterzählt.

Im Eingabe-File werden Register-Ausgänge mit ”.R” gekennzeichnet. Es sind maximal acht Produktterme pro Register-Ausgang erlaubt.

GAL16V8 4-Bit Counter

Bsp.2

Clock D0 D1 D2 D3 Set Clear NC NC GND
/OE NC NC NC NC Q3 Q2 Q1 Q0 VCC
Q0.R = /Clear * Set * D0

+ /Clear * /Set * /Q0

Q1.R = /Clear * Set * D1

+ /Clear * /Set * /Q1 * Q0 + /Clear * /Set * Q1 * /Q0

Q2.R = /Clear * Set * D2

+ /Clear * /Set * Q2 * /Q1 + /Clear * /Set * Q2 * /Q0 + /Clear * /Set * /Q2 * Q1 * Q0

Q3.R = /Clear * Set * D3

+ /Clear * /Set * Q3 * /Q2 + /Clear * /Set * Q3 * /Q1 + /Clear * /Set * Q3 * /Q0 + /Clear * /Set * /Q3 * Q2 * Q1 * Q0

DESCRIPTION

3.5 Fehlermeldungen

In den folgenden Abschnitten werden alle möglichen Fehlermeldungen, die ”GALer“ erzeugen kann aufgelistet und genau beschrieben.

3.5.1 Assembler

”Zeile 1: GAL-Typ erwartet”

In der 1. Zeile des Source-Files wird der GAL-Typ erwartet. Wenn in der ersten Zeile etwas anderes als GAL16V8, GAL20V8, GAL16V8A, GAL20V8A, GAL16V8B, GAL20V8B steht, erscheint diese Fehlermeldung.

”unerwartetes Ende der Eingabe-Datei”

Diese Meldung erscheint dann, wenn im Source-File (=Eingabe-Datei) das Schlüsselwort ”DESCRIPTION” fehlt.

”habe nach / Pinnamen erwartet”

Es wurde ein Negations-Zeichen / gefunden, hinter dem aber nicht unmittelbar ein Pinname folgt.

”Pinname hat mehr als 8 Buchstaben und Ziffern”

Pinnamen dürfen nicht aus mehr als 8 Zeichen bestehen. Wird diese maximale Länge der Pinnamen überschritten, erscheint diese Meldung.

”unerlaubtes Zeichen bei Pin-Deklaration”

In den Pinnamen kommt ein Zeichen vor, das nicht erlaubt ist. Erlaubte Zeichen sind: a..z, A..Z, 0..9, /

”VCC/GND-Zuweisung nur an den entsprechenden Pins erlaubt” VCC und GND sind Schlüsselwörter, die nur zur Kennzeichnung der entsprechenden Pins am GAL erlaubt sind. Wenn in der Pindeklaration ein VCC oder GND als Pinname auftritt und dieser Pin nicht der VCC-Pin bzw. GND-Pin des GALs ist, dann erscheint diese Meldung.

”für VCC-Pin Zuweisung VCC erwartet”

Dem VCC-Pin des GALs wurde ein anderer Name als VCC zugeordnet. Eine häufige Ursache für diese Fehlermeldung ist, daß in der Aufzählung der Pinnamen in der Pindeklaration ein Pin vergessen wurde.

”für GND-Pin Zuweisung GND erwartet”

Dem GND-Pin des GALs wurde ein anderer Name als GND zugeordnet. Eine häufige Ursache für diese Fehlermeldung ist, daß in der Aufzählung der Pinnamen in der Pindeklaration ein Pin vergessen wurde.

”gleicher Pinname kommt mehrfach vor”

In der Pindeklaration kommt der selbe Pinname mehrfach vor. ”unerlaubte Verwendung von /”

Es wurde ein Negationszeichen gefunden, das nicht VOR einem Pinnamen steht, sondern irgendwo in der Gegend herumlungert.

”unbekannter Pin-Name in den Boolean-Gleichungen”

In den Gleichungen tritt ein Pinname auf, der nicht definiert wurde. ”NC (Not Connected) in Boolean-Gleichungen nicht erlaubt”

NC ist ein Schlüsselwort, das nur zu Kennzeichnung von nichtverwendeten Pins dient. Kommt NC in den Booleschen Gleichungen vor, erscheint diese Meldung.

”nach ’.’ wird ein ’T’, ’E’ oder ’R’ erwartet”

Diese Fehlermeldung tritt auf, wenn nach einem ’.’ ein anderes Zeichen als ’T’, ’E’ oder ’R’ steht.

”’=’ wurde erwartet”

Diese Fehlermeldung erscheint, wenn zwei Pinnamen hintereinander stehen und nach dem zweiten Pinnamen kein ’=’ folgt. Die Ursache für eine solche Fehlermeldung ist häufig ein vergessenes ’+’ oder ’*’.

”Pin kann nicht als Ausgang programmiert werden”

Der Pin, der vor dem ’=’–Zeichen steht, kann nicht als Ausgang definiert werden. ”gleicher Pin ist mehrfach als Ausgang definiert worden”

Diese Fehlermeldung tritt bei folgender Konstellation auf:

X = ... X = ...

”Tristate-Kontrolle: Tristate-Ausgang noch nicht definiert” Bevor ein ’name.E’ erfolgen darf, muß der entsprechende Tristate-Ausgang definiert worden sein. Also:

name.T = ...
name.E = ...

”Betriebsmodus 2: Pins 12,19 können nicht als Eingang verwendet werden”

Bei einem GAL16V8 können die Pins 12 und 19 nicht als Eingang definiert werden, wenn sich das GAL im Betriebsmodus 2 (siehe Einführung) befindet. Diese Pins können auch nicht zurückgekoppelt werden.

”Betriebsmodus 2: Pins 15,22 können nicht als Eingang verwendet werden”

Bei einem GAL20V8 können die Pins 15 und 22 nicht als Eingang definiert werden, wenn sich das GAL im Betriebsmodus 2 (siehe Einführung) befindet. Diese Pins können auch nicht zurückgekoppelt werden.

”Tristate-Kontrolle wurde mehrfach angegeben”

Es wurde eine Tristate-Kontrolle für einen Ausgang mehrfach angegeben. Beispiel:

name.E = A * B
name.E = C

”Tristate-Kontrolle wurde auf Registerausgang angewendet”

Tristate-Kontrollen (”name.E”) dürfen nur für Tristate-Ausgänge angegeben werden. Hier wurde eine Tristate-Kontrolle für einen Registerausgang angegeben.

”Tristate-Kontrolle ohne vorheriges ’.T”’ Es wurde eine Tristate-Kontrolle für einen kombinatorischen Ausgang angegeben. Beispiel:

name  = ...
name.E = ...

”statt /VCC, /GND bitte GND, VCC verwenden”

Diese Fehlermeldung erklärt sich von selbst. Oder doch nicht? Also: Irgendwo im Source-File kommt ein /VCC oder /GND vor. Statt dieser komischen Konstruktion, geben Sie bitte ein GND bzw. VCC ein.

”Betriebsmodus 3: Pins 1,11 für ’Clock’ und ’/OE’ reserviert”

Wenn Registerausgänge verwendet werden, befindet sich das GAL im Modus 3. In diesem Modus sind beim GAL16V8 die Pins 1 und 11 reserviert und können nicht als Eingang verwedet werden.

”Betriebsmodus 3: Pins 1,13 für ’Clock’ und ’/OE’ reserviert”

Wenn Registerausgänge verwendet werden, befindet sich das GAL im Modus 3. In diesem Modus sind beim GAL20V8 die Pins 1 und 13 reserviert und können nicht als Eingang verwedet werden.

”VCC und GND nicht in Booleschen Ausdrücken erlaubt”

Ausdrücke wie ”X = A * VCC” sind nicht erlaubt.

”bei der Tristate-Kontrolle ist nur EIN Produktterm erlaubt”

In einer Tristate-Kontrolle darf kein ’+’ vorkommen, da für die Tristate- Kontrolle im GAL nur ein Produktterm zur Verfügung steht. Beispiel: name.E = A + B * C ist NICHT erlaubt

”maximal 8 Produktterme erlaubt”

Bei kombinatorischen Ausgängen oder Registerausgängen dürfen max. sieben ODER (’+’) vorkommen. Dies entspricht acht Produkttermen.

”maximal 7 Produktterme erlaubt” Bei Tristate-Ausgängen dürfen max. sechs ODER (’+’) vorkommen. Dies entspricht sieben Produkttermen. Das ist einer weniger als bei kombinatorischen bzw. bei Register-Ausgängen. Dieser eine Produktterm wird zur Tristate-Kontrolle benötigt.

”keine Booleschen Gleichungen vorhanden”

Es wurde versucht, ein Source-File zu assemblieren, in dem keine Booleschen Gleichungen vorhanden sind.

3.5.2 JEDEC-Datei

”unerwartetes Dateiende”

Am Ende eines JEDEC-Files wird entweder die File-Checksumme oder ein ’*’ erwartet. Wenn keines von beiden vorhanden ist, erscheint diese Fehlermeldung.

”unbekannte Anweisung gefunden”

Es wurde eine unbekanntes Steuerzeichen gefunden. Die Ursache dafür ist meistens ein vergessenes ’*’.

”falsches Zahlenformat nach Anweisung”

Es konnte eine hex. oder dez.-Zahl nicht korrekt interpretiert werden. ”erwarte unmittelbar nach einer Anweisung eine Zahl”

Nach einer Anweisung muß direkt eine Zahl folgen. Wenn nach der Anweisung z.B. ein Space steht, tritt diese Fehlermeldung auf.

”habe unmittelbar nach der Anweisung eine 0 oder 1 erwartet” Nach einer Anweisung muß direkt eine Zahl folgen. Diese Zahl muß in diesem Fall eine ’0’ oder ’1’ sein. Ist das nicht der Fall, erscheint diese Fehlermeldung.

”keine eindeutige GAL-Typ-Bestimmung möglich”

Aus der JEDEC-Datei geht nicht eindeutig hervor, ob sie für ein GAL16V8 oder für ein GAL20V8 bestimmt ist. Für die auszuführende Funktion ist dies aber nötig.

”Anweisung QF mehrfach vorhanden”

Na ja, QF ist eben mehrfach vorhanden, und das ist nicht erlaubt. ”Anweisung QP mehrfach vorhanden”

Na ja, QP ist eben mehrfach vorhanden, und das ist nicht erlaubt. ”habe abschließendes ’*’ erwartet”

Am JEDEC-Datei-Ende fehlt ein ’*’. ”nach ’C’ keine weiteren ’L’ mehr erlaubt”

Nach der Fuse-Checksumme darf keine Sicherung mehr verändert werden, da ja sonst die Checksumme nicht mehr stimmt.

”Fuse-Checksumme stimmt nicht”

Die Fuse-Checksumme stimmt nicht mehr. Die Ursache für diese Fehlermeldung kann nur sein, daß einige Fuses mit einem Texteditor nachträglich (nach der Assemblierung des Source-Files mit GALer) verändert wurden.

”<STX> Steuerzeichen (= CTRL-B, 0x02) mehrfach vorhanden”

Das <STX> Steuerzeichen sollte nur einmal am Datei-Anfang stehen. ”<ETX> Steuerzeichen (= CTRL-C, 0x03) mehrfach vorhanden”

Das <ETX> Steuerzeichen sollte nur einmal am Datei-Ende (aber vor der File-Checksumme) stehen.

”Reihenfolge der Steuerzeichen <STX> und <ETX> stimmt nicht”

Die Reihenfolge der Steuerzeichen stimmt nicht. ”nach der File-Checksumme wird das Datei-Ende erwartet”

Nach der File-Checksumme wurde noch ein Zeichen gefunden, das kein Space, TAB oder Carriage Return ist.

”Überlappung von Fuse-Adressen (L... zu klein)”

Beispiel: L0010 1011* L0013 0111* Adresse 13 wurde zweimal definiert.

”Fuse-Adressen übersprungen, aber kein Default-Wert (F0/1) angegeben” Es wurden nicht alle Sicherungen angegeben. Da GALer aber wissen muß auf welchen Wert er die fehlenden Sicherungen setzen soll, muß ein F0/1 Steurerzeichen vorhanden sein. Das fehlt aber leider, wenn Sie diese Fehlermeldung erhalten.

”habe ’*’ erwartet”

Es wurde ein ’*’ erwartet aber keines gefunden. Ja wo ist es denn? ”Diskrepanz zwischen QF... und letzter Fuse-Adresse L...”

QF gibt die Anzahl der vorhandenen Sicherungen an. Wenn diese Anzahl nicht mit dem letzten L-Kommando übereinstimmt, erscheint diese Fehlermeldung.

”keine Fuses (weder F0/1 noch L...) vorhanden”

Die Datei ist praktisch sinnlos, da keine Angaben über den Zustand der Fuses (Sicherungen) gemacht wurden. Daher hat GALer keinen Bock, diese Datei weiter zu bearbeiten.

”nur QF2194 * (für GAL16V8) und QF2706 * (für GAL20V8) erlaubt” Es wurde ein QF... gefunden, das weder zu einem GAL16V8 noch zu einem GAL20V8 paßt. Diese Softwareversion untestützt aber nur diese beiden GAL-Typen.

”es sind zu viele Sicherungen im JEDEC-File (>2706)”

Im JEDEC-File wurden zu viele Sicherungen angegeben. ”es sind mehrere Fuse-Checksummen vorhanden”

Es wurden mehrere Fuse-Checksummen (C...) angegeben, erlaut ist aber nur eine. ”eingestellter GAL-Typ paßt nicht zum JEDEC-File”

Die JEDEC-Datei ist für einen anderen GAL-Typ bestimmt als den ein- gestellten. Diese Meldung tritt z.B. dann auf, wenn Sie ein GAL16V8 programmieren wollen, aber ein GAL20V8 zur Programmierung eingestellt haben.

3.5.3 Reassembler

Mögliche Fehler beim Reassemblieren:

”der Modus AC0 = SYN = 0 wird nicht unterstützt”

Im JEDEC-File ist AC0 = 0 und SYN = 0. Dieser Modus wird von ”GALer“ nicht unterstützt und verursacht daher die obige Fehlermeldung.

”Pin xx: Pinname doppelt”

Bei der Pinnamendeklaration ist der Pin mit der Nummer xx mehrfach vorhanden. ”Pin xx: illegales Zeichen”

Der Pin mit der Nummer xx enthält ein nicht zugelassenes Zeichen. Zugelassene Zeichen sind alle Ziffern, Buchstaben und das ”/” vor(!) dem Pinnamen. Illegale Zeichen sind z.B. SPACE,#,*,....

”Pin xx: kein Pinname vorhanden”

Für den Pin mit der Nummer xx ist kein Pinname angegeben worden.

”Pin xx: VCC/GND am falschen Pin”

VCC und GND sind nur an den entsprechenden Pins erlaubt. Wenn VCC und/oder GND an einem anderen Pin vorkommt, erscheint diese Fehlermeldung.

”Pin xx: illegales /”

Diese Fehlermeldung erscheint, wenn mehrere / angegeben worden sind oder wenn das / nicht unmittelbar vor dem Pinnamen steht.

”Pin xx: GND erwartet”

Am Pin 10 des GAL16V8 bzw. Pin 12 des GAL20V8 wird GND als Pinname erwartet. Zuwiderhandlung wird mit Amiga-Entzug und MS-DOS-Zwang für eine Dauer von drei Jahren bestraft.

”Pin xx: VCC erwartet”

Am Pin 20 des GAL16V8 bzw. Pin 24 des GAL20V8 wird VCC als Pinname erwartet. Zuwiderhandlung wird mit Amiga-Entzug und Atari-Zwang für eine Dauer von sechs Jahren bestraft.

Die Hardware

4.1 Programmierung der GALs

Als erstes stellt sich natürlich die Frage wie ein GAL programmiert werden kann, wenn doch bereits alle Pins belegt sind und keine Pins für die Programmierung mehr frei sind. Legt man am Pin 2 eines GALs jedoch 16.5 Volt (oder 12.0 Volt, je nach GAL-Typ) an, so ändert sich die Pinbelegung. Das GAL befindet sich dann im sogenannten Edit-Mode.

12.0 Volt bzw. 16.50 Volt an Pin 2 ⇒

GAL16V8:

VIL EDIT RAG1 RAG2 RAG3 RAG4 RAG5 SCLK SDIN GND VCC P,/V RAG0 VIL VIL VIL VIL VIL SDOUT /STR

1 2 3 4 5 6 7 8 9 10  11 12 13 14 15 16 17 18 19 20

GAL20V8:

VIL EDIT RAG1 RAG2 RAG3

VIL VIL

RAG4 RAG5 SCLK SDIN GND VCC VIL P,/V RAG0 VIL VIL VIL VIL VIL SDOUT VIL /STR

1 2 3 4 5 6 7 8 9 10 11 12  13 14 15 16 17 18 19 20 21 22 23 24

Ob das GAL programmiert oder ausgelesen werden soll, hängt vom Pegel von P,/V ab. Ein HIGH bedeutet programmieren, ein LOW lesen. An den Pins RAG0-RAG5 wird die zu lesende/programmierende Adresse angelegt. Das Programmieren geschieht wie folgt: nach Anlegen der Adresse an RAG0-RAG5 müssen die zu schreibenden Bits an SDIN (seriell) angelegt und durch einen LOW-HIGH-Impuls an SCLK in ein internes Schieberegister getaktet werden. Ein LOW-Impuls am /STR-Pin programmiert schließlich die adressierte Zelle. Dies wiederholt man solange, bis das gesamte GAL programmiert ist. Das Auslesen eines GALs geschieht ähnlich: Nach Anlegen der Adresse an RAG0-RAG5 werden die Bits der entsprechenden Adresse durch einen LOW-Impuls (5us) an /STR in das interne Schieberegister geholt. Durch LOW-HIGH-Impulse an SCLK werden die einzelnen Bits aus dem Schieberegister zu SDOUT, einem Open-Collector-Ausgang, getaktet. Die Bit-Breite einer Adresse bestimmt die Anzahl der SCLK-Impulse, die nötig sind, um die Adresse vollständig zu programmieren bzw. auszulesen. Die Bezeichnung VIL bedeutet ”Input Voltage Low”. Die mit VIL gekennzeichneten Pins müssen im Edit-Mode entweder direkt auf Masse oder auf Low-Pegel liegen. Bei GALs gibt es unterschiedliche Programmieralgorithmen. Über die Funktion ”GAL-Info” von GALer kann man die Algorithmusnummer des eingesetzten GALs erfahren. Diese Algorithmusnummer ist für den Anwender eigentlich unwichtig. GALer benötigt sie aber, um GALs richtig auszulesen oder zu programmieren.

LESEN  PROGRAMMIEREN
Algorithmus Edit-Spannung STR-Impuls Edit-Spannung STR-Impuls
0  12 ± 0,25 V  5 us  15,75 ± 0,25 V 80 ± 5 ms
1  12 ± 0,25 V  5 us  15,75 ± 0,25 V 80 ± 5 ms
2  12 ± 0,25 V  5 us  16,50 ± 0,25 V 10 ± 1 ms
3  12 ± 0,25 V  5 us  14,50 ± 0,25 V 40 ± 5 ms
4  12 ± 0,25 V  5 us  14,00 ± 0,25 V 100 ± 5 ms

Beim Löschen eines GALs muß die STR-Impulsbreite 100 ms betragen.

Die interne Organisation der GALs (Adressen der Zeilen) sieht wie folgt aus: GAL16V8:

Adresse  Breite
0-31  Fuse-Matrix  jeweils 64 Bit
32  Signatur  64 Bit
33-59  reservierter Bereich  jeweils 64 Bit
60  Architektur-Kontroll-Wort ACW 82 Bit
61  Sicherheitszelle
62  reserviert
63  Bulk Erase

GAL20V8:

Adresse  Breite
0-39  Fuse-Matrix  jeweils 64 Bit
40  Signatur  64 Bit
41-59  reservierter Bereich  jeweils 64 Bit
60  Architektur-Kontroll-Wort ACW 82 Bit
61  Sicherheitszelle
62  reserviert
63  Bulk Erase

Das Architektur-Kontroll-Wort der Standard-GALs unterscheidet sich im Aufbau von dem der Abzw. B-Typen. Es hat folgenden Aufbau (82 Bit breit):

GAL16V8:

Bits 0-31: 32 Bit Produkttermfreigabe 0-31
Bits 32-35: 4 Bit XOR(n) für OLMC-Pins 19-16
Bit  36: AC0-Bit
Bits 37-44: 8 Bit AC1(n) für OLMC-Pins 19-12
Bit  45: SYN-Bit
Bits 46-49: 4 Bit XOR(n) für OLMC-Pins 15-12
Bits 50-81: 32 Bit Produkttermfreigabe 32-63

GAL16V8A und GAL16V8B:

Bits  0-3: 4 Bit XOR(n) für OLMC-Pins 19-16
Bit  4: AC0
Bits  5-8: 4 Bit AC1(n) für OLMC-Pins 19-16
Bits 9-72: 64 Bit Produkttermfreigabe PT0 - PT63
Bits 73-76: 4 Bit AC1(n) für OLMC-Pins 15-12
Bit  77: SYN
Bits 78-81: 4 Bit XOR(n) für OLMC-Pins 15-12

GAL20V8:

Bits 0-31: 32 Bit Produkttermfreigabe 0-31
Bits 32-35: 4 Bit XOR(n) für OLMC-Pins 22-19
Bit  36: AC0-Bit
Bits 37-44: 8 Bit AC1(n) für OLMC-Pins 22-15
Bit  45: SYN-Bit
Bits 46-49: 4 Bit XOR(n) für OLMC-Pins 18-15
Bits 50-81: 32 Bit Produkttermfreigabe 32-63

GAL20V8A und GAL20V8B:

Bits  0-3: 4 Bit XOR(n) für OLMC-Pins 22-19
Bit  4: AC0
Bits  5-8: 4 Bit AC1(n) für OLMC-Pins 22-19
Bits 9-72: 64 Bit Produkttermfreigabe PT0 - PT63
Bits 73-76: 4 Bit AC1(n) für OLMC-Pins 18-15
Bit  77: SYN
Bits 78-81: 4 Bit XOR(n) für OLMC-Pins 18-15

4.2 Schaltungsbeschreibung

Im folgenden Abschnitt werde ich auf die Funktionsweise meines GAL- Progammiergerätes eingehen. Dabei werde ich mich auf den Schaltplan beziehen. Sollten Sie diesen noch nicht besitzen, so können Sie diesen Abschnitt überspringen.

Die Hardware wird am Parallelport des Amiga angeschlossen. Die verwendeten Datenleitungen sind dabei D0-D4 und die BUSY-Leitung. IC1, IC3, IC4 und IC5 sind achtstufige ”seriell ein/parallel aus” Schieberegister. Die Ausgänge der Schieberegister von IC3, IC4 und IC5 führen zu der Textool-Fassung für das GAL. Dadurch ist es möglich, an jedem Pin (außer VCC und GND) des GALs einen beliebigen Pegel (HIGH oder LOW) anzulegen. Die möglichen Ausgänge des GALs (Pin 14 bis 22) können über IC7 und IC6a ausgelesen werden. IC7 ist ein achtstufiges ”parallel ein/seriell aus” Schieberegister. IC1 ist sozusagen die Schaltzentrale. Dieses IC steuert IC3, 4 und 5 (OE). Desweiteren werden über dieses IC die Spannungen für das GAL (VCC, Edit-Spannungen) ein- bzw. ausgeschaltet. Damit die ICs 1, 3, 4, 5, 7 individuell angesprochen werden können, ist für jedes dieser ICs eine eigene Takt-Leitung (Clk) vorhanden. Diese Clock- Leitungen werden über IC2, einem 1-aus-4-Decoder, aus den Datenleitungen D0 und D1 des Parallelports erzeugt. D3 bestimmt, ob gelesen (low) oder geschrieben (high) werden soll. Dabei ist folgendes zu beachten: D3 darf nur dann low werden, wenn durch D0 und D1 das IC, das angesprochen werden soll bereits selektiert ist. Ansonsten bekommt ein IC einen ungewollten Clock-Impuls und beim nächsten Strobe-Impuls (D2) liegen dann die falschen (um eins nach links geschobenen) Daten an den Ausgängen an. Der Strobe-Impuls für die Schieberegister wird aus D2 gewonnen. Wenn D2 auf high geht, werden die Daten in den Schieberegistern in die Ausgangsregister der ICs 1, 3, 4, 5 übernommen. Bei IC7 bewirkt ein D2 = high, daß die Daten an den Pins P1-P8 in das interne Schieberegister übernommen werden und anschließend durch entsprechende Clock-Impulse über BUSY ausgelesen werden können.

Über D4 gelangen die einzelnen Bits vom Amiga zum GAL-Brenner. Da an den Pins 2 und 4 der Textool-Fassung eine Spannung von mindestens 12.0 Volt anliegen kann, muß IC4 durch die Dioden D2 und D3 vor Überspannung geschützt werden. Die Edit-Spannung wird von IC9, einem frequenzgesteuerten Sperrwandler, erzeugt. Die verschiedenen Spannungen können über die Spindeltrimmer R40 bis R44 exakt eingestellt werden.

Das Relais K1 legt die Versorgungsspannung des GALs auf Pin 24 des Textool- Sockels. Relais K2 legt entweder den Ausgang Q7 von IC3 oder +5V Versorgungsspannung (je nach GAL-Typ) an Pin 22 des Textool-Sockels. Beide Relais werden über IC1 angesteuert. Die LED zeigt an, ob am Textool-Sockel eine Spannung anliegt oder nicht. Wenn die LED an ist, darf weder ein GAL in die Fassung gesteckt, noch aus der Fassung heraus genommen werden.

Zusammenfassung:

Parallel-Port:

D0-D1: Selektion der einzelnen ICs über Clk
D2:  Strobe-Impuls für IC 1, 3, 4, 5
D3:  schreiben = low, lesen = high
D4:  Datenleitung für ”Bits schreiben”
BUSY: Datenleitung für ”Bits lesen”

IC1:

Q1 Programmierspannung aufbauen (noch nicht anlegen!)
Q2 an Pin 2 Edit-Spannung für GAL20V8 anlegen
Q3 an Pin 4 Eidt-Spannung für GAL16V8 anlegen
Q5 Vcc anlegen
Q6 OE für IC3, 4, 5
Q7 steuert LED an : high = on, low = off
Q8 selektiert über IC10 die Programmierspannung

IC3:

Q1-Q8 Pin 16-23 des Textool-Sockels über R3-R8

IC4:

Q1-Q8 Pin 1-8 des Textool-Sockels

IC5:

Q1-Q3 Pin 9-11 des Textool-Sockels
Q4  Pin 13 des Textool-Sockels
Q5,Q6 Pins 14, 15 des Textool-Sockels über R9, R10
Q7,Q8 selektiert über IC10 die Programmierspannung

IC6:

a Pin 13 des Textool-Sockels lesen
b IC7 auslesen

IC7:

P1-P8 Pin 14-21 des Textool-Sockels lesen

4.3 Aufbau

Im Anhang finden Sie die Stückliste. Die Kosten für die Bauteile (ohne Platine und Textool-Sockel) dürften um die 40 bis 50 Millionen DM liegen. Wenn Sie sich den Textool-Sockel sparen wollen (ca. 15 DM), können Sie auch eine normale 24polige IC-Fassung verwenden. Da der Abstand der Pinreihen aber zu groß ist, müssen Sie die Querverbindungen zwischen den Pinreihen aufsägen, sauber abfeilen und anschließend die beiden Pinreihen im entsprechenden Abstand einlöten. Als IC-Fassungen sollten Sie nur Präzisions-Fassungen verwenden.

Die 25polige Sub-D-Buchse (A1000) bzw. der Sub-D-Stecker (sonstige Amiga Modelle) wird wie folgt beschaltet:

D0 = Pin 2
D1 = Pin 3
D2 = Pin 4
D3 = Pin 5
D4 = Pin 6
BUSY = Pin 11
GND = Pin 14 für A1000

Pin 17 für A500, A2000, A3000 und was weiß ich nicht noch alles

Die Spannungsversorgung (+5V) müssen Sie sich entweder vom Expansion-Port des Amiga holen oder von einem externen Netzteil (das auf 5V stabilisiert ist!). Der GAL-Brenner hat eine maximale Stromaufnahme von ca. 220 mA. Wer einen Amiga 1000 besitzt, kann die 5V auch direkt vom Parallel-Port holen. Dies hat den Vorteil, daß keine zusätzlichen Kabel herum liegen. Ich habe mich für diese Variante entschlossen und bis jetzt hat sich mein A1000 nicht in Rauch aufgelöst. DIES GEHT ABER NUR BEIM A1000. Bei allen anderen Amiga-Modellen sind die 5V über einen 47 Ω Widerstand nach außen geführt. Wenn Sie dort den GAL-Brenner anschließen, dann sendet dieser Widerstand mit Sicherheit immer größer werdende Rauchzeichen aus und es riecht sehr nach Strom. Wenn die Garantie für Ihren Amiga bereits abgelaufen ist, können Sie den 47 Ω Widerstand herauslöten und durch eine 500 mA Schmelzsicherung ersetzen. Dann können die 5V vom Parallel-Port als Spannungsversorgung verwendet werden.

Das Hauptproblem beim Aufbau des GAL-Brenners ist wahrscheinlich die Platine. Da die wenigsten in der Lage sein dürften eine doppelseitige, durchkontaktierte Platine herzustellen, ist die beste Lösung die, daß man die Schaltung mit Hilfe der Fädeltechnik auf eine einseitige Euro-Lochrasterplatine aufbaut. Dazu werden die Bauteile einfach auf die Platine gelötet und anschließend durch dünne Drähte miteinander verbunden. Wenn das Ganze auch einen einigermaßen sauberen Eindruck machen soll, kann man auch Fädelleisten (Verdrahtungskämme) verwenden. Entlang dieser Leisten können die Drähte dann geführt werden, so daß nicht alles drunter und drüber geht. Wer die Fädeltechnik noch nicht kennt, der kann sie sich ja einmal im Fachgeschäft erklären lassen.

Wenn Sie die Schaltung aufgebaut und an den Amiga angeschlossen haben und dieser NICHT explodiert ist, können Sie das Testprogramm ”GALerTest“ starten. Das Programm legt verschiedene Pegel an die Pins der Textool-Fassung, die Sie mit einem Meßgerät überprüfen können. Die Programmierspannungen können dann mit R40-R44 eingestellt werden. Sollte die Programmierspannung wider Erwarten nicht stabil anliegen, dann müssen Sie C1 um ein paar pF erhöhen.

NICHT VERGESSEN: Programmierspannungen einstellen (mit den Spindeltrimmern), sonst funktioniert der GAL-Brenner NICHT!!!! (”GALerTest“ starten und bis zu den entsprechenden Testpunkten durchklicken)

Falls sich Ihr GAL-Brenner genau so verhält wie es das Testprogramm verlangt, können Sie probeweise ein GAL brennen und mit dem GAL-Prüfer überprüfen. Wenn es funktioniert, dann dürfte in der Hardware kein Fehler sein. GALs vom Typ GAL16V8 müssen so in die Textool-Fassung gesteckt werden, daß Pin 1 des GALs mit Pin 3 der Fassung übereinstimmt. Bei GALs vom Typ GAL20V8 muß Pin 1 des GALs mit Pin 1 der Fassung übereinstimmen.

Anhang A

A.1 Schlüsselwörter des Source-Files

GAL16V8, GAL20V8,  bestimmt den GAL-Typ — ob dabei ein
GAL16V8A, GAL20V8A Standard-, ein A- oder ein B-Typ
GAL16V8B, GAL20V8B angegeben wird ist hier bedeutungslos
NC  nichtverwendeter Pin
GND  Masse (=LOW)
VCC  +5V (=HIGH)
.T  Ausgangspin ist Tristate-Ausgang
.E  Tristate-Freigabe durch Produktterm
.R  Ausgangspin ist Register-Ausgang
=  Ausgangspin wird eine Gleichung zugewiesen
+  ODER - Verknüpfung

UND - Verknüpfung

/  NICHT
DESCRIPTION  kennzeichnet das Ende der Booleschen Gleichungen

A.2 Stückliste des GAL-Brenners

ICs:

IC1, IC3, IC4, IC5  : 4 x 4094
IC2  : 1 x 4555
IC6  : 1 x 4503
IC7  : 1 x 4021
IC8  : 1 x 74LS06
IC9  : 1 x TL 497
IC10  : 1 x 14LS145

Dioden:

D1-D4  : 4 x 1N4148
LED  : 1 x rot, 3 mm

Transistoren:

T2, T4, T5  : 3 x BC237B
T1, T3  : 2 x BC327

Widerstände (1/4 Watt):

R1, R2, R35-39  : 7 x 1  KΩ
R3-13, R19-26  : 19 x 10  KΩ
R28-32  : 5 x 1,8  KΩ
R14  : 1 x 1  Ω
R15  : 1 x 47  KΩ
R34  : 1 x 220  Ω
R18  : 1 x 4,7  Ω
R27  : 1 x 47  Ω
R33  : 1 x 22  KΩ
R40-44  : 5 x 1  KΩ, Spindeltrimmer

R16 und R17 gibt es nicht mehr Relais:

K1, K2 : 2 x Siemens V23101A3A101 o. ä.

(1 x Wechselkontakt)

Spule:

L1 : 1 x 100 μH Miniatur-Festinduktivität

Kondensatoren:

C1  : 1 x 100  pF
C2  : 1 x 4,7  uF, Tantal
C3  : 1 x 100  nF
C4  : 1 x 220  uF, 25V

Sonstiges: IC-Fassungen

8 x 16polig
2 x 14polig
1 x 24polig  Textool-Fassung, schmal!
Sub-D-Buchse  1 x 25polig  für Amiga 1000
Sub-D-Stecker  1 x 25polig  für alle anderen Amiga-Typen

A.3 Literaturhinweise

1. GALs - Programmierbare Logikbausteine in Theorie und Praxis — Bitterle — Franzis-Verlag

2. Das GAL Buch - Grundlagen, Entwurf, Selbstbau-Brenner (für PCs) — elektor

3. Programmable Logic Manual - GAL Products — SGS-Thomson

Tja, das war’s dann wohl.

An dieser Stelle möchte ich mich bei Ihnen herzlich bedanken, da Sie es geschaft haben, diese Anleitung tatsächlich bis zum Ende durchzulesen. Falls Sie die Anleitung von hinten her durchlesen, möchte ich mich trotzdem bedanken und Ihnen schon Mal im voraus gratulieren, daß Sie sie bis zum Anfang (?!) durchlesen.

Vielen Dank und Grüße an alle.

Tschau, Tschüß,.... bis zum nächsten Update oder bis zum nächsten Projekt, Euer

Christian Habermann