home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
galer
/
galer_deutsch
/
dok
/
galer.dok
next >
Wrap
Text File
|
1995-02-27
|
82KB
|
2,172 lines
GALer - copyright by Christian Habermann
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.
Falls Sie mir schreiben wollen, beachten Sie bitte, daß es in Deutschland
ab dem 1. Juli 1993 neue Postleitzahlen gibt.
Meine Adresse bis zum 30. Juni 1993: Christian Habermann
Asamstr. 17
8050 Freising
Deutschland
Meine Adresse ab dem 1. Juli 1993: Christian Habermann
Asamstr. 17
85356 Freising
Deutschland
EMail-Adresse: 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 entstandene 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 100%ig fehlerfrei
ist. Bei gewissenhaftem Nachbau kann also eigentlich gar nichts schief gehen.
Der Nachbau sollte aber dennoch nur von erfahreneren Elektronik-Freaks durch-
geführt werden (zumindest muß man Löterfahrung haben und Schaltpläne lesen
können). Näheres zur Hardware können Sie im Kapitel III 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-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 die TeX-Version der Anleitung,
das IFF-Layout und für die Übersetzung 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'
Inhaltsverzeichnis:
Kapitel I Einführung
I.1 Was sind GALs
I.2 Wie ist ein solches GAL aufgebaut?
I.3 Welche GALs gibt es?
I.4 Die Betriebsmodi eines GALs
Kapitel II Die Software
II.1 Das Source-File (Eingabe-Datei)
II.2 Das Programm "GALer"
II.2.1 Installation
II.2.2 Allgemeines zur Bedienung
II.2.3 Die Menüpunkte
II.2.4 Der Assembler
II.2.5 Das Programmieren
II.2.6 Austesten von programmierten GALs
II.2.7 Der Optimizer
II.3 Das JEDEC-File
II.4 Weitere Beispiele
II.5 Fehlermeldungen
II.5.1 Assembler
II.5.2 JEDEC-Datei
II.5.3 Reassembler
Kapitel III Die Hardware
III.1 Programmierung von GALs
III.2 Schaltungsbeschreibung
III.3 Aufbau
Anhang
Schlüsselwörter des Source-Files
Stückliste des GAL-Brenners
Literaturhinweise
Kapitel I: Einführung
=====================
I.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-Bau-
steinen 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.
I.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 UND-verknü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 Ausgangs-
zellen 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üpfungser-
gebnis 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 III näher be-
schrieben.
Signatur:
Hier stehen acht Bytes für eigene Anwendungen zur Verfügung.
In der Regel wird hier ein kleiner Kommentar oder die Versions-
nummer 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.
I.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 1| |20 +5V
Eingang 2| |19 konfigurierbare Ausgangszelle
Eingang 3| |18 konfigurierbare Ausgangszelle
Eingang 4| |17 konfigurierbare Ausgangszelle
Eingang 5| |16 konfigurierbare Ausgangszelle
Eingang 6| |15 konfigurierbare Ausgangszelle
Eingang 7| |14 konfigurierbare Ausgangszelle
Eingang 8| |13 konfigurierbare Ausgangszelle
Eingang 9| |12 konfigurierbare Ausgangszelle
GND 10| |11 Eingang oder /OE
---------
GAL20V8
---- ----
Eingang oder Clock 1| |24 +5V
Eingang 2| |23 Eingang
Eingang 3| |22 konfigurierbare Ausgangszelle
Eingang 4| |21 konfigurierbare Ausgangszelle
Eingang 5| |20 konfigurierbare Ausgangszelle
Eingang 6| |19 konfigurierbare Ausgangszelle
Eingang 7| |18 konfigurierbare Ausgangszelle
Eingang 8| |17 konfigurierbare Ausgangszelle
Eingang 9| |16 konfigurierbare Ausgangszelle
Eingang 10| |15 konfigurierbare Ausgangszelle
Eingang 11| |14 Eingang
GND 12| |13 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.
I.4 Die Betriebsmodi eines GALs
-------------------------------
Wie unter I.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, GAL16V8A, GAL16V8B:
Betriebs-|Betriebs-|Betriebs-| |Betriebs-|Betriebs-|Betriebs-|
modus 1 |modus 2 |modus 3 | |modus 1 |modus 2 |modus 3 |
------------------------------ -------------------------------
| | --- --- | |
E | E | Clock 1| |20 +5V | +5V | +5V
E | E | E 2| |19 E/K | T* | E/T/R
E | E | E 3| |18 E/K | E/T | E/T/R
E | E | E 4| |17 E/K | E/T | E/T/R
E | E | E 5| |16 K | E/T | E/T/R
E | E | E 6| |15 K | E/T | E/T/R
E | E | E 7| |14 E/K | E/T | E/T/R
E | E | E 8| |13 E/K | E/T | E/T/R
E | E | E 9| |12 E/K | T* | E/T/R
GND | GND | GND 10| |11 E | E | /OE
-------
GAL20V8, GAL20V8A, GAL16V8B:
Betriebs-|Betriebs-|Betriebs-| |Betriebs-|Betriebs-|Betriebs-|
modus 1 |modus 2 |modus 3 | |modus 1 |modus 2 |modus 3 |
------------------------------ -------------------------------
| | --- --- | |
E | E | Clock 1| |24 +5V | +5V | +5V
E | E | E 2| |23 E | E | E
E | E | E 3| |22 E/K | T* | E/T/R
E | E | E 4| |21 E/K | E/T | E/T/R
E | E | E 5| |20 E/K | E/T | E/T/R
E | E | E 6| |19 K | E/T | E/T/R
E | E | E 7| |18 K | E/T | E/T/R
E | E | E 8| |17 E/K | E/T | E/T/R
E | E | E 9| |16 E/K | E/T | E/T/R
E | E | E 10| |15 E/K | T* | E/T/R
E | E | E 11| |14 E | E | E
GND | GND | GND 12| |13 E | E | /OE
-------
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 ver-
wendet 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 Register-
ausgänge
(Erklärung der Begriffe siehe I.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 be-
findet. 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.
Kapitel II: Die Software
========================
Im Prinzip können Sie fast das ganze Kapitel I 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.
II.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 I.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 ----| & |---- W
C ----| |
+----+
NAND: +----+ /X = D * E
D ----| |
| & |o--- X
E ----| |
+----+
OR:
+----+ Y = F + G
F ----| |
| >1 |---- Y
G ----| |
+----+
kleine Digital- +----+ Z = H * I + J * K
schaltung: H ----| |
| & |----+
I ----| | | +----+
+----+ +---| |
| >1 |---- Z
+----+ +---| |
J ----| | | +----+
| & |----+
K ----| |
+----+
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 I 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 I.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 be-
sitzt. 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
GAL16V8
---- ----
B 1| |20 VCC
C 2| |19 A
D 3| |18 W
E 4| |17 X
F 5| |16 Y
G 6| |15 Z
H 7| |14 NC
I 8| |13 NC
J 9| |12 NC
GND 10| |11 K
---------
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:
(**** kennzeichnet File-Anfang und File-Ende, bitte nicht mit eingeben)
******************************************************
GAL16V8 hier darf ein Kommentar stehen auch ohne ';'
Beispiel hier darf ein Kommentar stehen auch ohne ';'
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 Pin-
deklaration 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.
II.2 Das Programm "GALer"
-------------------------
II.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.
II.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.
II.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 Mit diesen drei Menüpunkten kann der zu verwendende
GAL20V8 GAL-Typ eingestellt werden. Welcher Typ eingestellt
A-Typ ist, ist an dem Amiga-Haken links neben dem ent-
sprechenden 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 ver-
hä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 entsprech-
enden 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.
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 Ver-
gleichs, 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 I.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 durch-
führen oder nicht und nach dem Kopieren Verfiy durch-
fü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 unter-
stü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. ein-
lesen. Das sind: erzeugen: der GAL-Assembler und
die Funktion "JEDEC-Datei erstellen" bzw. lesen:
GAL mit JEDEC-File bzw. JEDEC-File mit GAL ver-
gleichen und Programmieren eines GALs.
Folgende Einstellungen sind für das JEDEC-File-Schrei-
ben 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 Program-
mierung 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-Check-
summe.
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-Check-
summe erzeugt wurde, sind im File einige Steuer-
zeichen (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 Fehler-
meldung 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 Text-
editor 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 er-
stellt 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).
II.2.4 Der Assembler
--------------------
Um ein GAL zu programmieren, muß zunächst das Source-File in das so-
genannte JEDEC-File umgewandelt werden. Diese Aufgabe übernimmt der
GAL-Assembler. Das JEDEC-File (Endung ".jed") ist ein "Text"-File, in dem
sämtliche Bits, die in einem GAL gesetzt werden können, der Reihe nach auf-
gelistet 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 Dokumen-
tation. 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 Bild-
schirmmitte 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" durch-
gerungen 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.
II.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
II.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 über-
prü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') ge
legt 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.
II.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 ur-
sprü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.
II.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
(J)oint (E)lectron (D)evice (E)ngineering (C)ouncil.
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 verschie-
denen Fuses (1en und 0en im JEDEC-File). Diese Checksumme wird dann beim
späteren Einlesen der Datei überprüft. Damit wird verhindet, daß ver-
sehentlich 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
In Texteditoren sehen dieses Zeichen in der Regel so aus:
<STX>
<ETX>
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).
II.4 Weitere Beispiele
----------------------
Als nächstes möchte ich ein Beispiel zu Tristate-Ausgängen bringen.
A ---------+
|
|\o
| \
B -------| +------------------------ Y1
| /
|/
VCC
|
+----+ |\|
C -------| | | \
| >1 |-----------| +------- Y2
D -------| | | /
+----+ |/
+----+
E -------| |
| & |------+
F -------| | |
+----+ |
|\|
| \
G -----------------| +o------------- 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 1| |20 VCC
B 2| |19 Y1
C 3| |18 Y2
D 4| |17 Y3
E 5| |16 NC
F 6| |15 NC
G 7| |14 NC
NC 8| |13 NC
NC 9| |12 NC
GND 10| |11 NC
---------
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
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
---- ----
(Input) Clock 1| |20 VCC
(Input) D0 2| |19 Q0 (Output)
(Input) D1 3| |18 Q1 (Output)
(Input) D2 4| |17 Q2 (Output)
(Input) D3 5| |16 Q3 (Output)
(Input) Set 6| |15 NC (nicht verwendet)
(Input) Clear 7| |14 NC (nicht verwendet)
(Input) NC 8| |13 NC (nicht verwendet)
(Input) NC 9| |12 NC (nicht verwendet)
GND 10| |11 /OE (Input)
---------
Da Register verwendet werden heißt das, daß sich das GAL im Betriebs-
modus 3 befindet. Dies bedeutet, daß die Pins 1 und 13 für Clock und
/OE reserviert sind. Wenn /OE auf HIGH liegt, gehen alle Register-
ausgä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
Counter
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
******************************************************
II.5 Fehlermeldungen
--------------------
In den folgenden Abschnitten werden alle möglichen Fehlermeldungen,
die "GALer" erzeugen kann aufgelistet und genau beschrieben.
II.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 Auf-
zä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 Auf-
zä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 nicht-
verwendeten 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.
II.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 * (GAL16V8) und QF2706 * (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.
II.5.3 Reassembler
------------------
"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.
Kapitel III: Die Hardware
=========================
III.1 Programmierung von 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
PinbelePinbelegung. Das GAL befindet sich dann im sogenannten Edit-Mode.
12.0 Volt bzw. 16.50 Volt an Pin 2 =>
GAL16V8
---- ----
VIL 1| |20 +5V
EDIT 2| |19 P,/V
RAG1 3| |18 RAG0
RAG2 4| |17 VIL
RAG3 5| |16 VIL
RAG4 6| |15 VIL
RAG5 7| |14 VIL
SCLK 8| |13 VIL
SDIN 9| |12 SDOUT
GND 10| |11 /STR
---------
GAL20V8
---- ----
VIL 1| |24 +5V
EDIT 2| |23 VIL
RAG1 3| |22 P,/V
RAG2 4| |21 RAG0
RAG3 5| |20 VIL
VIL 6| |19 VIL
VIL 7| |18 VIL
RAG4 8| |17 VIL
RAG5 9| |16 VIL
SCLK 10| |15 SDOUT
SDIN 11| |14 VIL
GND 12| |13 /STR
---------
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 gekennzeich-
neten 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 A- bzw. 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
Bit 5-8: 4 Bit AC1(n) für OLMC-Pins 19-16
Bit 9-72: 64 Bit Produkttermfreigabe PT0 - PT63
Bit 73-76: 4 Bit AC1(n) für OLMC-Pins 15-12
Bit 77: SYN
Bit 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
Bit 5-8: 4 Bit AC1(n) für OLMC-Pins 22-19
Bit 9-72: 64 Bit Produkttermfreigabe PT0 - PT63
Bit 73-76: 4 Bit AC1(n) für OLMC-Pins 18-15
Bit 77: SYN
Bit 78-81: 4 Bit XOR(n) für OLMC-Pins 18-15
III.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" Schiebe-
register. 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 ge-
schrieben (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 Ausgangs-
register 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 über-
nommen 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 Ver-
sorgungsspannung (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
III.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 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 Ohm 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 Ohm 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, durch-
kontaktierte Platine herzustellen, ist die beste Lösung die, daß man
die Schaltung mit Hilfe der Fädeltechnik auf eine einseitige Euro-Loch-
rasterplatine 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
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 ver-
langt, können Sie probeweise ein GAL brennen und mit dem GAL-Prüfer über-
prü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
======
Schlüsselwörter des Source-Files:
---------------------------------
GAL16V8, GAL20V8, bestimmt den GAL-Typ - ob dabei ein Standard-, ein
GAL16V8A, GAL20V8A A- oder ein B-Typ angegeben wird ist hier
GAL16V8B, GAL20V8B 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
Stückliste:
-----------
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 KOhm
R3-13, R19-26 : 19 x 10 KOhm
R28-32 : 5 x 1,8 KOhm
R14 : 1 x 1 Ohm
R15 : 1 x 47 KOhm
R34 : 1 x 220 Ohm
R18 : 1 x 4,7 Ohm
R27 : 1 x 47 Ohm
R33 : 1 x 22 KOhm
R40-44 : 5 x 1 KOhm Spindeltrimmer
(R16 bis R17 gibt es nicht)
Relais:
-------
K1, K2 : 2 x Siemens V23101A3A101 o. ä.
(1 x Wechselkontakt)
Spule:
------
L1 : 1 x 100 uH, 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 Textool-Fassung 24polig, schmal!
25polige Sub-D-Buchse (für Amiga 1000)
bzw. 25poligen Sub-D-Stecker (für alle anderen Amiga-Typen)
Legende: u = mikro
Literaturhinweise:
------------------
1) GALs - Programmierbare Logikbausteine in Theorie und Praxis
Bitterle
Franzis-Verlag
2) Das GAL Buch - Grundlagen, Entwurf, Selbstbau-Brenner
elektor
2) 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