atari-home.de - Foren

Hardware => Hardware (Classic 16-/32-Bit) => Thema gestartet von: tuxie am Mi 09.06.2010, 21:51:25

Titel: GAL Programmierung der einstieg
Beitrag von: tuxie am Mi 09.06.2010, 21:51:25
Hallo alles zusammen,

ich will hier einmal ein kleines Tutorial für das erstellen einfacher GAL Gleichungen erstellen für ATARI GAL Assembler.

Der GAL ist ein Programmierbarer Logic Schaltkreis eigentlich der einstieg zum FPGA er besitzt eingänge und entsprechend auch die Ausgänge.

Das GAL Listing besteht aus mehreren bestandteilen die der Entsprechenden Syntax unterliegen (von Assembler zu Assembler unterschiedlich)

DIe bestandteile

1. %Identification, hier steht ein einfacher String zur Identifzierung, dieser kann auch nach dem Programmieren ausgelesen werden
2. TYP - Hier steht der GAL Typ der vorausgesetzt wird
3. PINS - Die definition der Variablen für die i/O Pins hier bei dem Atari Assembler steht oben die Eingänge und Unten die Ausgänge, wenn nix angeschlossen ist steht da NC.
4. Natürlich die Logic

Hier das Beispiel des IDE Buffer

%IDENTIFICATION

   IDEBuffer

%TYP
   GAL16V8
  

%PINS  

IOR IOW DMACKIN NC NC NC NC NC NC GND
NC EOUT DIROUT DMACKOUT NC NC NC NC NC VCC

        
%LOGIC

EOUT = IOR + /IOW
/DIROUT = IOR * /IOW
DMACKOUT = DMACKIN
  
%END
 

Ok zerlegen wir das ganze einmal

Die Operanten können ebenfalls bei verschiedenen Assemblern sich unterscheiden

= Zuweisung zu dem Pins

+ Oder
* UND
/ negierung bzw.  bei Pindefinition bedeutet es das das Signal LOW Aktiv ist, das heißt bei Low Pegel ist das Signal Gesetzt und wahr

Ich schreibe das einfach mal aus

EOUT ist gleich IOR und nicht IOW

Um das ganze zu verdeutlichen machen wir einmal eine Tabelle

Logische UND verknüpfung

IOR  /IOW  EOUT
1       0        1          (die Null wird durch / negiert und wird somit zur eins und Logisch verknüpft 1 und 1 ergibt 1)
0       1        0          (die eins wird durch / negiert und wird somit zur null, und null und null ergibt 0)


Hier in dem fall kann es kein 0 0 oder 1 1 geben da entweder Lesen oder Schreiben gesetzt ist.


Jetzt versuche ich das ganze mal anhand einer Dekodierung einer Adresse zu erklären

Bsp.: Ich möchte den Adressbereich D700-D7ff dekotieren.

Am besten nehme ich dazu den Windows Taschenrechner, stelle ihn auf Wissenschaftlich, wähle HEX aus und gebe D700 ein, danach stelle ich Ihn auf BIN und erhalte die Binäre Adresse.

D700 = 1101011100000000
D7FF = 1101011111111111

Wie wir sehen sind die ersten Ziffern gleich also der Bereich 11010111

Wenn wir dies jetzt auf 16 Adressleitungen übertragen bedeutet das

A16 = 1
A15 = 1
A14 = 0
A13 = 1
A12 = 0
A11 = 1
A10 = 1
A09 = 1

Würde man diese Adressleitungen jetzt an die Eingänge eines GALS anschliessen könnte man dann damit die Adresse D700-D7FF dekodieren

Das würde dann die Logic so aussehen


AUSGANG = A16 * A15 * /A14 * A13 * /A12 * A11 * A10 * A09

Trifft die Gleichung in allen Punkten zu, ist der entsprechende Ausgang dann Aktiv also High

Jetzt will ich das ganze einmal erweitern, ich möchte jetzt zusätzlich den Bereich
DF00 - DFFF ausdekodieren

DF00 = 1101111100000000
DFFF = 1101111111111111

Also auch hier wieder
11011111 gleich

A16 = 1
A15 = 1
A14 = 0
A13 = 1
A12 = 1
A11 = 1
A10 = 1
A09 = 1

Dies kann man natürlich vereinfachen, für die die wissen wovon geredet wird, aber ich nutze es jetzt zur Demo

AUSGANG = A16 * A15 * /A14 * A13 * /A12 * A11 * A10 * A09
                     + A16 * A15 * /A14 * A13 *  A12 * A11 * A10 * A09


Nächstes Beispiel zur Demo, wir haben nun zwei Ausgänge! Der eine nennt sich Ausgang1 und der zweite Ausgang2

An beiden hängt eine LED.

Die LED an Ausgang eins soll immer dann leuchten wenn auf die Adressen D700-D7FF und DF00-D7FF gelesen wird
Auf jeden Computersystem gibt es das Read/Write Signal das bei Lesen also R High ist und Schreiben W LOW deshalb wird es meist so in den unterlagen beschrieben R/W  das / ist hier kein Trennzeichen sondern die Negierung von W.

AUSGANG1 = A16 * A15 * /A14 * A13 * /A12 * A11 * A10 * A09 * RW
                       + A16 * A15 * /A14 * A13 *  A12 * A11 * A10 * A09 * RW

AUSGANG2 = A16 * A15 * /A14 * A13 * /A12 * A11 * A10 * A09 * /RW
                       + A16 * A15 * /A14 * A13 *  A12 * A11 * A10 * A09 * /RW



Das war eine kleine Einführung, wenn ihr die Möglichkeiten habt, dann baut doch eine Schaltung auf mit einem GAL und Testet doch mal aus. Wenn ihr nicht die Möglichkeit habt einen Computer dazu zu verwenden dann schließt an jeden Eingang des GALS einen 10K Wiederstand gegen Masse. Und zwischen Pin und Wiederstand geht ihr mit 5v die über einen Schalter geschaltet werden ran. An den Ausgängen jeweils eine LED.


Ich hoffe ihr könnt dem was ich hier geschrieben habe bisschen folgen!
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Mi 09.06.2010, 21:52:22
wäre auch gern bereit mit euch mal paar GAL Listings zu zerlegen wie die vom IDE Interface!

Hab nochwas gefunden

http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Arthur am Do 10.06.2010, 06:06:01
Hallo Ingo, sehr schöner und kompakter GAL-Guide. Ich kann mir kaum vorstellen das da noch viel fehlt. Einzig die  Laufzeiten der verschiedenen binären Gleichungen würde mich noch interessieren.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 10.06.2010, 08:02:25
Guten Morgen,

naja die sollten eigentlich den der Angaben auf dem GAL sein. Also 7ns, 10ns, 15ns, 25ns je nach TYP. Für meinen PowerUP hatte ich mir 7ns GALS besorgt.

Aber da fehlt noch ne ganze menge, es sind keine Register beschrieben. Dann kein open collector Schaltung. Und so einiges, aber ich denk das was ich jetzt beschrieben habe ist das wichtigste.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Do 10.06.2010, 16:01:13
Hallo,

dankeschön für die kleine Einführung! :)

Ich frage mich nur:

1. was passiert wenn ich widersprüche in die Logik einbringe, also z.b.:

/DIROUT   = IOR * /IOW
/DIROUT   = /IOR * IOW

oder auch:

/DIROUT   = IOR * /IOW
DIROUT   = IOR * /IOW

?

Dann noch eine Frage bezüglich der Adressdekodierung... Ich verstehe nicht genau was Du mit dekodieren meinst... ich meine, Du identifizierst zwar ob Adressen im bereich D700-D7ff  "eingegeben" wird, aber was genau soll das bringen? Und müsste man dann nicht noch was mit den D7XX (ich meine die XX en) machen? Ich meine, in deinem Beispiel lässt Du die XX ja einfach wegfallen... Sorry wenn ich mich unglücklich ausdrücke...

Unter Dekodierer habe ich immer verstanden das man z.b. eine 8 Bit zahl eingibt, und das wird dann auf 256 Leitungen gelegt...
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 10.06.2010, 16:13:24
Hallo,

dankeschön für die kleine Einführung! :)

Ich frage mich nur:

1. was passiert wenn ich widersprüche in die Logik einbringe, also z.b.:

/DIROUT   = IOR * /IOW
/DIROUT   = /IOR * IOW

oder auch:

/DIROUT   = IOR * /IOW
DIROUT   = IOR * /IOW

?

Dann noch eine Frage bezüglich der Adressdekodierung... Ich verstehe nicht genau was Du mit dekodieren meinst... ich meine, Du identifizierst zwar ob Adressen im bereich D700-D7ff  "eingegeben" wird, aber was genau soll das bringen? Und müsste man dann nicht noch was mit den D7XX (ich meine die XX en) machen? Ich meine, in deinem Beispiel lässt Du die XX ja einfach wegfallen... Sorry wenn ich mich unglücklich ausdrücke...

Unter Dekodierer habe ich immer verstanden das man z.b. eine 8 Bit zahl eingibt, und das wird dann auf 256 Leitungen gelegt...


Jaa also dann funktioniert die Logic natürlich nicht, muß natürlich eindeutig sein.

Oft ist es so das wenn man eine Hardware anschliesst um diese anzustuern, dann blendet man sie in einen bestimmten Speicherbereich ein. Diese angaben hast du dann oft auch in den Dokumentationan angegeben.  Den bereich 00-FF wird von der Hardware direkt decodiert.

Hmm ich muß ein beispiel raussuchen um das Darstellbar zu machen.


Titel: Re: GAL Programmierung der einstieg
Beitrag von: Arthur am Do 10.06.2010, 16:24:31
1. was passiert wenn ich widersprüche in die Logik einbringe, also z.b.:

/DIROUT   = IOR * /IOW
/DIROUT   = /IOR * IOW


Würde glaube ich, in diesem Fall sogar noch funktionieren, oder nicht? Aber davon mal abgesehen, wird das nicht von der Software getestet?
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 10.06.2010, 16:54:05
Nein die Plausibilität wird nicht getestet! Nur die Syntax muss stimmen.

Mir ist ein Beispiel für die Adressdecodierung eingefallen.

Ich möchte an meinen Computer einen Flash oder Eprom anschliessen. Dieser hat 16kb. Zur Adressierung von 16kb benötige ich 14 Adressleitungen.

Wenn ich diesen jetzt einfach so an den Bus des Rechner anschliessen würde, würde es einen Adresskonflikt geben weil in den ersten 16kb ja schon andere Hardwarekomponenten sich befinden. Also mache ich folgendes.

Ich suche mir einen Adressbereich der in meinem Computer frei ist raus. Da müßen 16kbyte rein passen.

Beim ST auf jedenfall von 10MB-14MB

(nur Beispiel die werte stimmen nicht)

10485760byte - 10502144byte

Hex
A00000 - A04000
Bin
1010 0000 0000 0000 0000 0000 -
1010 0000 0100 0000 0000 0000

An einem GAL wird nun die Leitungen

A15
A16
A17
A18
A19
A20
A21
A22
A23
A24
Angeschloßen

Mit dem GAL wird nun das Enable Signal für den Eprom generiert.

Enable = A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * /A15
              + A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * A15

Gut wenn wir es richtig machen, muß noch /AS mit angeschlossen werden, aber das lass ich jetzt mal weg.

Was passiert!

Die CPU legt eine Adresse auf den Bus

A00001
Bin
101000000000000000000001
Dez
10485761byte

Jetzt vergleicht der GAL, und stellt fest die gleichung ist war und schaltet den Enable Ausgang auf Aktiv.

Jetzt bekommt der Eprom das Enable Signal und fühlt sich angesprochen!  An seinen Pins liegt die Adresse

000 0000 0000 0001
A14                          A1

und führt die von ihm verlangte Operation aus.

Uff nun glüht mein Kopf, kann aber an der Wärme liegen.

Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Do 10.06.2010, 16:58:23
Hallo,

danke für die Erweiterte Erklärung, jetzt peile ich es auch. :) !

Nur das mit der Fehlenden Überprüfung von der Logik finde ich heftig - was passiert denn mit dem GAL dann? Interner Kurzschluss oder sowas ?

Noch was, wird das Enable signal sofort wieder auf Low gesetzt, wenn der angegebene Zustand nicht mehr zutrifft, oder müsste man das explizit programmieren?
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 10.06.2010, 16:59:04
Nein passiert nix, das tut ihm nicht weh!
Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Do 10.06.2010, 17:02:52
Sorry, habe ich gerade beim edit geschrieben:

Noch was, wird das Enable signal sofort wieder auf Low gesetzt, wenn der angegebene Zustand nicht mehr zutrifft, oder müsste man das explizit programmieren?

z.B. so:

/Enable =/(  A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * /A15
              + A24 * /A23 * A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16 * A15 )

... so in der art  ;D ;)
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 10.06.2010, 17:47:34
Nein wird sobald die Bedingung nichtmehr erfüllt ist natürlich wieder zurückgesetzt!.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Mo 14.06.2010, 10:50:13
Hmm, hätte eigentlich gedacht das sich mehr leute dafür Interessieren.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Ektus am Di 15.06.2010, 19:29:04
Hallo Ingo!

Hmm, hätte eigentlich gedacht das sich mehr leute dafür Interessieren.

Interessieren schon, aber derzeit habe ich keinen konkreten Bedarf dafür. Also lese ich nur mit und behalte das Ganze im Hinterkopf, falls doch mal was ansteht. Aber eigentlich bin ich eher der Fertiggeräte- oder höchstens Bausatzkäufer.


Mit freundlichen Grüßen
Ektus.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Di 15.06.2010, 20:19:10
Hehe ok, na war ja net böse gemeint oder so!  ::)

Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Di 15.06.2010, 22:49:47
Also ich finds auch interessant, und bei gelegenheit werde ich es auch mal ausprobieren - ich hab die GABI ja nicht umsonst gebaut ;)

Also ich finde Deinen Text sehr gut und finde es gut das Du das wichtigste zusammengefasst hast. So weiss man was wirklich zählt! :)
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Fr 18.06.2010, 11:37:23
So mal zur übung ne Aufgabe ;-)

Wann ist in diesem Beispiel DTACK gesetzt

DTACK = /AS*A23*A22*A21*/A20*/A19*/A18*RW
         +    A23*A22*A21*A20*/A19*/A18*/A17*/A16*/A15*/A14;

Zur Info AS (Acknowlege Strobe) ist Low Aktiv
Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Fr 18.06.2010, 12:18:27
Hallo tuxie!

1.)  im GAL ASM kann ich ja sowas wie hier machen
%PINS  
/AS RW

%LOGIC
RW = /AS

Das würde bedeuten AS ist ein Active Low pin und ich müsste /AS nutzen um den High Zustand abzufragen, oder? In dem Fall
würde RW dann High wenn AS auch high ist ( d.h. Inaktiv)


Ansonsten, darf ich's auflösen ^^ ? Ich geh mal davon aus das meine Annahme richtig ist. :)

DTACK ist eingeschaltet wenn...:

AS  = Eingeschaltet ( Low  )
A23 = Eingeschaltet ( High )
A22 = Eingeschaltet ( High )
A21 = Eingeschaltet ( High )
A20 = Ausgeschaltet ( Low  )
A19 = Ausgeschaltet ( Low  )
A18 = Ausgeschaltet ( Low  )
RW  = Eingeschaltet ( High )

Oder:

A23 = Eingeschaltet ( High )
A22 = Eingeschaltet ( High )
A21 = Eingeschaltet ( High )
A20 = Eingeschaltet ( High )
A19 = Ausgeschaltet ( Low  )
A18 = Ausgeschaltet ( Low  )
A17 = Ausgeschaltet ( Low  )
A16 = Ausgeschaltet ( Low  )
A15 = Ausgeschaltet ( Low  )
A14 = Ausgeschaltet ( Low  )

Gruß!
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Fr 18.06.2010, 15:49:24
Hi,
naja!!

Ich versuch mal zu erklären wozu das /AS da ist.
Die CPU legt eine Adresse auf den Bus und die Entsprechenden Daten, sie setzt die R/W Leitung hier in unserem Beispiel auf High daher Lesen!

Sind alle Adressen und Leitungen gesetzt, setzt die CPU /AS auf Aktiv daher LOW.

Nun liegt an dem GAL 
AS  = Eingeschaltet ( Low  )
A23 = Eingeschaltet ( High )
A22 = Eingeschaltet ( High )
A21 = Eingeschaltet ( High )
A20 = Ausgeschaltet ( Low  )
A19 = Ausgeschaltet ( Low  )
A18 = Ausgeschaltet ( Low  )
RW  = Eingeschaltet ( High )

Oder:

A23 = Eingeschaltet ( High )
A22 = Eingeschaltet ( High )
A21 = Eingeschaltet ( High )
A20 = Eingeschaltet ( High )
A19 = Ausgeschaltet ( Low  )
A18 = Ausgeschaltet ( Low  )
A17 = Ausgeschaltet ( Low  )
A16 = Ausgeschaltet ( Low  )
A15 = Ausgeschaltet ( Low  )
A14 = Ausgeschaltet ( Low  )

Ensprechend an. Und welcher Adressbereich wäre das?
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Fr 18.06.2010, 15:58:45
Hab hier was sehr interessantes gefunden

http://www.hs-weingarten.de/~georgi/mcpr/public_html/mikrop_4.pdf
Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Fr 18.06.2010, 18:07:55
Also, wie wäre es mit:

DTACK wird gesetzt wenn
Wenn AS aktiv (low), RW Aktiv (high) ist, und die Adresse im Bereich 0x0Exxxxx liegt,

oder

wenn die Adresse im Bereich 0x0Fxxxxx liegt wird DTACK ungeachtet von AS und RW gesetzt. ( Oder ist es so das alle nicht angebenen pins inaktiv sein müssen damit die Bedingung erfüllt ist? D.h. nicht angabe von Pins besagt das diese Inaktiv sein müssen?  ...aber dann könnte man sich ja auch das / vor dem Pin sparen, weil man den Pin in der Gleichung auch einfach weg lassen könnte )

... oder handelt es sich bei dem + um eine Boolsche Verknüpfung? So das die Ergebnisse der einzelnen Angaben mit Boolschem Oder Verknüpft werden, und je nach dem was bei dieser Boolschen Operation heraus kommt, wird DTACK gesetzt? Wenn das NICHT der fall sein sollte, dann könnte man Die Gleichung auch so in GAL asm definieren:

DTACK =  /AS*A23*A22*A21*/A20*/A19*/A18*RW;
DTACK =   A23*A22*A21*A20*/A19*/A18*/A17*/A16*/A15*/A14;

Ups, ich merke, ich bin noch weit weg von der Lösung ;) Ich habe die Negierten Pins in meiner Lösung garnicht beachtet. Aber ich muss jetzt Drachen steigen lassen - meine Fragen sind trotzdem noch offen :)
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Fr 18.06.2010, 19:23:31
Deine erste aussage ist richtig!! Habs jetzt nicht nachgerechnet aber sollte stimmen.

Das DTACK Signal ist das Signal was der CPU mitteilt das sie mit der Arbeit beginnen kann also alles richtig gesetzt ist.

In dem vorher gennanten PDF ist auf Seite V4-4 bzw. PDF Seite 4 der Lesezyklus der CPU abgebildet (68k).
Die CPU erwartet nach setzen von /AS das /DTACK Signal von der entsprechend Adressierten Baugruppe.
Auf deutsch die Baugruppe sagt !! Ich bin soweit kannst loslegen.
Das Listing aus dem Ich das Entnommen habe ist das IDE TOS2.06 Listing

Der eine teil ist für das lesen vom IDE zuständig und der andere für die Eproms.

Das + ist eine Logische ODER Verknüpfung !
Titel: Re: GAL Programmierung der einstieg
Beitrag von: m0n0 am Fr 18.06.2010, 21:46:46
Zitat
Das + ist eine Logische ODER Verknüpfung !

Das wirft natürlich ein ganz anderes Licht auf die Sache!

...wobei das ergebnis einer Logischen Verknüpfung und meinem Gehirn wirrwarr wohl das selbe ist ;) ... ich hatte aus irgend einem Grund eher sowas wie ein Grammatisches oder / und im kopf... aber da ist ein und ja fast das gleich wie ein auch...

DTACK ist Eingeschalltet wenn x = soundsoist und auch wenn y = soundso ist. Das wäre dann aber eigentlich ein Logisches Oder ;)

Ich lese nochmal von vorne...

Darf man Pins denn nur mit einer einzigen Zuweisung "versehen" - oder darf man auch mehrmals zuweisen??

also z.b. so:

DTACK = X * Y
DTACK = X * A
DTACK = X * Z

Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am So 20.06.2010, 10:28:37
Hi,

ich denke das kommt wohl auf den Assembler an, aber eigentlich gibt es nur eine zuweisung pro ausgang.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Di 17.08.2021, 11:40:22
Hi,
auch wenn dieser thread schon uralt ist, finde ich ihn gut und wüsste gerne wie man in einem GAL 16V8 eine oc Schaltung implementiert.

Beste Grüße
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Di 17.08.2021, 12:18:27
Es kommt ein wenig auf den Gal ASM an, das wird von ASM zu ASM unterschiedlich behandelt.

Welchen setzt du ein ? JEDI und GABI ?
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 19.08.2021, 08:53:32
Hallo Ingo,
bislang noch keinen. Ich habe mir mal schnell WinCUPL, GDSwin und einen PALasm in C heruntergeladen. Letzteren müsstd ich noch compilieren. Bin aber noch nicht dazu gekommen, die mal auszuprobieren. GABI und Jedi laufen unter TOS? Welchen empfiehlst du? Mit dem steige ich dann ein. Den Brenner (TL866II Plus) betreibe ich am PC, aber wo der Binärcode entsteht, dürfte ja egal sein.
Richtig?
Grüße
Frank

EDIT: Falls der GAL-Typ relevant sein sollte: ich habe hier einige Lattice 16V8D rumliegen.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 19.08.2021, 09:34:51
Wie schon geschrieben wird der Tristate mode in den ASM unterschiedlich behandelt!

Meist hat man eine Bedingung wann der Ausgang aktiv also als Ausgang geschalten werden soll.

bsp.

DTACK.E = /AS * A23 * A22;

Das bedeutet das wenn diese Bedingung erfüllt ist, wird der Ausgang eingeschaltet, ansonsten verbleibt er im Tristate mode! Dies ist die Bedingung wann der Ausgang eingeschaltet werden soll, die genaue Bedingung was der Ausgang machen soll, muß natürlich extra definiert werden.

Bsp.
DTACK.E = /AS * A23 * A22;
DTACK = /AS * A23 * A22 */A21
             + /AS * A23 * A22 * A21 * /A20;


(reines Beispiel)
Bei der Pindefinition muß der Ausgang natürlich noch auf tristate gesetzt werden.

DTACK.T hier das .T anhängen.


So würde ich es z.b. in Jedi machen. Und ja, Jedi läuft unter TOS, da viele Atari Projekte für Jedi geschrieben sind. Ob die Jed Datei dann so gebrannt werden kann, da muß ich passen. Hab nicht mal einen GAL Prommer für den PC. Daher nur am Atari. Aber ich denke das sollte gehen!

Titel: GAL Programmierung der einstieg
Beitrag von: Guus.Assmann am Do 19.08.2021, 12:08:04
Andere Programmer, da weiss Ich was dazu.
Ein Jedec Datei kann mit andere Programiergeräten benützt werden.
Ich hab ein Programmer am Atari und auch am PC.
Wenn Ich ein Jedec Datei nehme, bekomme Ich den gleichen Gal-function.
Also unabhängig vor Programmer und/oder Compiler-Programm.

Noch etwas wichtiges.
Ein Gal hat ein "Protection-Bit" (Oder mehrere)
Dies benütze Ich principiel nicht.
Wenn es aktief ist, kann man den Gal nicht mehr Lesen. (Nür verify, wenn original Jedec da ist)
Mag gut sein für comerciëlle hHersteller, ist aber ..... (Pain in the ....)
Manche Programmern setzen dieses per Default.  >:(

Auch noch, Ja, Gal-type ist wichtig.
Ein Gal 16V8 oder 18V10 haben gleichen Pin-zahlen. Aber 16 oder 18 Inputs, 8 oder 10 Outputs.
Gleich wie 20V8 und 22V10 mit 24 pins....
Je mehr Ausgänge, um so meht "Output-controll-blocks"

mfg/
Guus
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 19.08.2021, 20:16:16
Bsp.
DTACK.E = /AS * A23 * A22;
DTACK = /AS * A23 * A22 */A21
             + /AS * A23 * A22 * A21 * /A20;
Bei der Pindefinition muß der Ausgang natürlich noch auf tristate gesetzt werden.

DTACK.T hier das .T anhängen.


Mal sehen,ob ich das geschnallt habe. Gehen wir mal davon aus, ich wollte das /DTACK Signal für einen Adressdecoder für TOS 2.06 im alten Atari ST erzeugen. Dafür schreibe ich:
%IDENTIFICATION

   Adressdecoder blablabla

%TYP
   GAL16V8
 

%PINS   
A23 A22 A21 A20 A19 A18 RW AS ROM2 GND
NC CE DTACK.T NC NC NC NC NC NC VCC

%LOGIC
/CE = /(RW * A23 * A22 * A21 */A20 * /A19 * /A18 * /AS) * /ROM2
DTACK.E = /ROM2
/DTACK = RW * A23 * A22 * A21 * /A20 * /A19 * /A18 * /AS

%END
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 19.08.2021, 20:20:33
Andere Programmer, da weiss Ich was dazu.
Ein Jedec Datei kann mit andere Programiergeräten benützt werden.
Ich hab ein Programmer am Atari und auch am PC.
Wenn Ich ein Jedec Datei nehme, bekomme Ich den gleichen Gal-function.
Also unabhängig vor Programmer und/oder Compiler-Programm.

Das klingt ja schonmal sehr ermutigend :-)

Zitat
Noch etwas wichtiges.
Ein Gal hat ein "Protection-Bit" (Oder mehrere)
Dies benütze Ich principiel nicht.
Wenn es aktief ist, kann man den Gal nicht mehr Lesen. (Nür verify, wenn original Jedec da ist)
Mag gut sein für comerciëlle hHersteller, ist aber ..... (Pain in the ....)
Manche Programmern setzen dieses per Default.  >:(
Macht meiner leider auch. Genau die Einstellung habe ich im Programmer für meinen Brenner zum Glück schon aufgrund eines anderen Forums gefunden, in dem sich die Leute wunderten, dass sie das GAL zwar programmieren, aber nicht mehr auslesen konnte. Danke trotzdem!
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Megatari am Do 19.08.2021, 20:29:27
Kurze Zwischenfrage:
 
Kann man aus einem Jedec File die Funktionsgleichung erstellen oder gibt es ein Programm dazu?

Hintergrund:
Ich habe ein Jedec File eines PEEL und würde gerne wissen, wie die Funktionsgleichung dazu aussieht, damit ich nachvollziehen kann, wie das Gerät, wo der PEEL drin ist, arbeitet.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: czietz am Do 19.08.2021, 20:54:57
Kann man aus einem Jedec File die Funktionsgleichung erstellen oder gibt es ein Programm dazu?
Hintergrund:
Ich habe ein Jedec File eines PEEL und würde gerne wissen, wie die Funktionsgleichung dazu aussieht, damit ich nachvollziehen kann, wie das Gerät, wo der PEEL drin ist, arbeitet.

Bei PALs und GALs geht das, weil die Zuordnung von Fuses zu Funktionen bekannt ist - im Datenblatt dokumentiert. (Eine JEDEC-Datei ist ja im Wesentlichen nur ein Fuse-Map, d.h. welche Fuses sind gesetzt und welche nicht.) Entsprechend gibt es für PALs/GALs "Disassembler", z.B. im - hier im Thread bereits erwähnten - Programm JEDI.

Das hilft aber nicht bei einem PEEL. Ich weiß nicht einmal, ob dort die Fuse-Zuordnung überhaupt veröffentlicht wäre.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Do 19.08.2021, 21:19:06
Bsp.
DTACK.E = /AS * A23 * A22;
DTACK = /AS * A23 * A22 */A21
             + /AS * A23 * A22 * A21 * /A20;
Bei der Pindefinition muß der Ausgang natürlich noch auf tristate gesetzt werden.

DTACK.T hier das .T anhängen.


Mal sehen,ob ich das geschnallt habe. Gehen wir mal davon aus, ich wollte das /DTACK Signal für einen Adressdecoder für TOS 2.06 im alten Atari ST erzeugen. Dafür schreibe ich:
%IDENTIFICATION

   Adressdecoder blablabla

%TYP
   GAL16V8
 

%PINS   
A23 A22 A21 A20 A19 A18 RW AS ROM2 GND
NC CE DTACK.T NC NC NC NC NC NC VCC

%LOGIC
/CE = /(RW * A23 * A22 * A21 */A20 * /A19 * /A18 * /AS) * /ROM2
DTACK.E = /ROM2
/DTACK = RW * A23 * A22 * A21 * /A20 * /A19 * /A18 * /AS

%END

Nicht ganz!
DTACK.E muß immer dann aktiv sein wenn der Ausgang eingeschaltet werden soll. Also müsste die Gleichung identisch sein wie DTACK selbst.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 19.08.2021, 21:27:34
Besten Dank Ingo!

Dann werde ich mir mal den JEDI holen und eins der GALs brennen.

Viele Grüße
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Fr 20.08.2021, 09:58:39
Nicht ganz!
DTACK.E muß immer dann aktiv sein wenn der Ausgang eingeschaltet werden soll. Also müsste die Gleichung identisch sein wie DTACK selbst.
Dazu habe ich doch noch eine Frage. Da DTACK ja low aktiv ist, hatte ich oben formuliert „/DTACK = …“. Muss es dann auch „/DTACK.E = …“ heißen?
Gruß und Dank
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Fr 20.08.2021, 13:23:36
Nachdem ich nun den JEDI in Benutzung hatte, ist mir einiges aufgefallen, was weitere Fragen auslöst.
1. Anscheinend verträgt der JEDI keine Klammersetzung. In allen beigefügten Beispielen habe ich auch keine gefunden. Also werde ich wohl alles auflösen müssen. Oder muss ich anstelle der runden Klammern ein anderes Zeichen verwenden?
2. Das "!" scheint mir NOT zu bedeuten anstelle von "/". Richtig?
3. In diversen Beispielen werden Leitungen, die üblicherweise low aktiv sind, schon im Abschnitt %PINS mit einem "!" bezeichnet, z.B. "!AS" oder "!CE". Ist das "!" im %PINS Abschnitt nur einfach ein Character, der Teil des Pin Namens ist oder hat es dort bereits die Bedeutung von Logisch NOT? Welche Auswirkung hat das auf den Code? Gesetzt den Fall ich wollte den mit "!CE" Ausgangspin auf low setzen, wenn die Eingänge "A23" und "A22" high sind und "!AS" auf low geht. Schreibe ich dann im Code: "!CE = A23 * A22 * !AS"?

Gruß und Dank
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Lukas Frank am Fr 20.08.2021, 14:40:21
Hilfe ...

http://tho-otto.de/hypview/hypview.cgi?url=%2Fhyp%2Fjedi.hyp&charset=UTF-8&index=1
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Fr 20.08.2021, 16:14:53
Danke für den Hinweis. Ich hatte das Kapitel zur Syntax übersehen. Das beantwortet allerdings nicht meine Frage 3.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Lukas Frank am Fr 20.08.2021, 17:46:55
! oder / ist das gleiche. Steht also beides für Lowaktiv, negiert ...
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Fr 20.08.2021, 18:21:56
Schon klar, aber die Frage war, welche Bedeutung das "!" an einer Pin-Bezeichnung im Abschnitt %PINS hat. Ist es dort einfach nur ein Namensbestandteil oder hat es dort bereits die Bedeutung von NOT? In Letzterem Fall frage ich mich, welche Auswirkungen das auf den Code hat.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Lukas Frank am Fr 20.08.2021, 19:10:26
Die Bedeutung an den Pins und im Code ist der gleiche.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Fr 20.08.2021, 20:30:31
Bedeutung ist NOT
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Fr 20.08.2021, 22:35:29
Ok, Danke Euch beiden. Das hilft!

Gruß und Dank
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Sa 21.08.2021, 15:32:00
Leider muss ich nochmal nerven. Folgendes File bekomme ich einfach nicht assembliert.

%IDENTIFICATION
   Adressdecoder fuer TOS 2.06

%TYP
   GAL16V8
   
%PINS
   A23  A22  A21       A20  A19  A18  RW  AS  ROM2  GND
   NC   CE   DTACK.T  NC   NC   NC   NC  NC  NC    VCC

%LOGIC
   CE = !RW *  ROM2 +
        !A23 * ROM2 +
        !A22 * ROM2 +
        !A21 * ROM2 +
         A20 * ROM2 +
         A19 * ROM2 +
         A18 * ROM2 +
         AS *  ROM2;
   DTACK.E = !RW + !A23 + !A22 + !A21 + A20 + A19 + A18 + AS;
   DTACK =   !RW + !A23 + !A22 + !A21 + A20 + A19 + A18 + AS;
   
%END

Der JEDI V0.45 sagt im Logfile
Fehler: 'Oder' in einer OE-Zuweisung.
File NICHT erfolgreich gescannt!

Ich würde das ja in UND umformulieren, dann müsste ich den Ausdruck aber Klammern setzen und negieren. Klammern versteht der JEDI aber offenbar nicht. Oben hieß es, dass ich die DATCK.E Zuweisung wie die DTACK Zuweisung formulieren soll.
Daher habe ich außerdem folgendes probiert:
   !DTACK.E = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
   !DTACK =   RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;

Da kommt er beim Assemblieren deutlich weiter, schreibt aber einen anderen Fehler ins Logfile
' OLMC 6:
 !DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
 !DTACK       = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
' OLMC 7:
 CE           = !RW * ROM2
              + !A23 * ROM2
              + !A22 * ROM2
              + !A21 * ROM2
              + A20 * ROM2
              + A19 * ROM2
              + A18 * ROM2
              + AS * ROM2;

----------------------------------------------------------------------
Error: Es konnte kein GAL-Modus gefunden werden!
Mode 'combinational' nicht realisierbar, weil ein Ausgang den 'tristate'-Mode ben”tigt.
Mode 'registered' nicht realisierbar, Signal 'A23' wird nicht rckgekoppelt!
Mode 'tristate' nicht realisierbar, Ausgang 'CE' braucht mehr als 7 Zeilen!
GAL-Logik NICHT erfolgreich aufgearbeitet!

Was mache ich falsch?
Titel: Re: GAL Programmierung der einstieg
Beitrag von: Lukas Frank am Sa 21.08.2021, 18:39:54
Ich habe keine Ahnung aber muss es nicht so aussehen?

!DTACK.E = VCC;
   !DTACK =   RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Sa 21.08.2021, 21:55:43
Kann ich ja mal ausprobieren. Allerdings meinte Ingo in #33, dass DTACK.E dieselbe Gleichung bräuchte wie DTACK. Aber evtl. habe ich da auch etwas missverstanden…
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Mi 25.08.2021, 00:12:31
@tuxie : könntest du zu dem Vorschlag !DTACK.E = VCC etwas sagen. Es kommt mir nun doch so vor, dass der Ausgang dadurch immer aktiv ist, also entweder high oder low ist aber nie hochohmig. Ich kanns gerade nicht ausprobieren.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: tuxie am Mi 25.08.2021, 10:52:14
Damit ist der Ausgang immer Aktiv ! Man muss ja schon definieren wann der Ausgang eingeschaltet werden soll.
@Lukas Frank schau doch mal in das Gal listing was wir hin und her gesendet haben!

So sollte das Listing übrigens aussehen

/CE = /AS * A23 * A22 * A21 * /A20 * /A19 * /A18
       + /ROM2;

RW brauchst du nicht verknüpfen!!
Und wenn du in der Pindefinition schon /CE definierst anstatt CE dann kannst du das / auch weglassen bei der Gleichung.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Mi 25.08.2021, 20:42:41
Besten Dank Ingo! Wenn meine 4-Mbit Eproms für umschaltbares TOS angekommen sind, werd ich das austesten.

Bzgl. dem DTACK Signal hatte ich inzwischen daran gedacht, es mir einfach zu machen und eine Schottky Diode hinter das GAL zu setzen anstelle Verwendung des tristate. Müsste auch gehen.
Titel: Re: GAL Programmierung der einstieg
Beitrag von: pakman am Do 26.08.2021, 01:23:55

' OLMC 6:
 !DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
 !DTACK       = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
' OLMC 7:
 CE           = !RW * ROM2
              + !A23 * ROM2
              + !A22 * ROM2
              + !A21 * ROM2
              + A20 * ROM2
              + A19 * ROM2
              + A18 * ROM2
              + AS * ROM2;

----------------------------------------------------------------------
Error: Es konnte kein GAL-Modus gefunden werden!
Mode 'combinational' nicht realisierbar, weil ein Ausgang den 'tristate'-Mode ben”tigt.
Mode 'registered' nicht realisierbar, Signal 'A23' wird nicht rckgekoppelt!
Mode 'tristate' nicht realisierbar, Ausgang 'CE' braucht mehr als 7 Zeilen!
GAL-Logik NICHT erfolgreich aufgearbeitet!

Was mache ich falsch?

Ein GAL hat gewisse Beschränkungen..

Im Modus 'combinational' können die Gleichungen bis zu 8 Oder-Terme haben.
Dann sind aber alle Ausgänge immer aktiv.

Im Modus 'tristate' dürfen die Gleichungen max. 7 Oder-Terme haben.
Die achte Gleichung wird nämlich jeweils für den Enable-Term verwendet.

In o.g. Gleichungen hast Du definiert:
- DTACK ist ein Tristate-Ausgang -> GAL-Modus müsste dazu 'tristate' sein
- CE hat 8 Oder-Terme -> GAL-Modus müsste dazu 'combinational' sein
Beides gleichzeitig geht aber nicht, deshalb die Fehlermeldung!

Abhilfe: CE umschreiben, wie von Tuxie vorgeschlagen:
/CE = /AS * A23 * A22 * A21 * /A20 * /A19 * /A18
    + /ROM2;

Und DTACK sollte so aussehen:
DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
/DTACK      = GND; 'falls unter %PINS  DTACK steht
Es geht auch:
DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
DTACK       = VCC; 'dann muss unter %PINS  /DTACK stehen
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 26.08.2021, 11:13:35
Hey super, das muss ich ja nur noch abschreiben  :) ich berichte, wenn alles fertig ist. Vielen Dank auch für die Erläuterung der Begrenzungen des GALs!
Gruß und Dank
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: artik-wroc am Sa 28.08.2021, 19:29:03
Und wie ist eine solche Gleichung zu verstehen, bei der Pin 22 auf beiden Seiten der Gleichung steht?
!P22      = !P22 * P5
          + !P22 * P4
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 16.09.2021, 18:23:17
Und DTACK sollte so aussehen:
DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
/DTACK      = GND; 'falls unter %PINS  DTACK steht

Das hat nun leider nicht geklappt. Unter %PINS steht "DTACK" (an Pin 13) und die Logik habe ich ebenfalls einfach abgknipst.
Pin 13 geht offenbar unter gar keiner Bedingung auf low.
Gibt es noch irgendwelche speziellen Beschaltungen, die ich am GAL vornehmen muss um den tristate Modus nutzen zu können? Oder habe ich doch noch irgendetwas missverstanden?
Hier der Code
%IDENTIFICATION
   Adressdecoder fuer TOS 2.06

%TYP
   GAL16V8
   
%PINS
   ROM2 RW A18   A19 A20 AS A21 A22 A23 GND
   NC   NC DTACK CE  NC  NC NC  NC  NC  VCC

%LOGIC
   !CE = !AS * A23 * A22 * A21 * !A20 * !A19 * !A18 + !ROM2;
   DTACK.OE = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
   !DTACK = GND;
   
%END

Ich werde es jetzt erstmal so lösen, dass ich den combinational Mode nehme und hinter Pin 13 eine Schottky-Diode baue, aber interessieren würde es mich schon, warum das nicht funzt

Viele Grüße
Frank
Titel: Re: GAL Programmierung der einstieg
Beitrag von: FrankR am Do 16.09.2021, 18:39:43
Oh verflixt. Hätte ich wohl besser
DTACK = GND;Oder
!DTACK = VCC;schreiben sollen, damit ich ein low bekommen, wenn die OE Bedingung erfüllt ist?