Autor Thema: Wer kennts sich mit GAL-Programmierung aus?  (Gelesen 17879 mal)

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Wer kennts sich mit GAL-Programmierung aus?
« am: Sa 25.08.2018, 19:13:00 »
Ich wusste nicht genau wo ich das am besten reinpacke.

Es geht um folgendes:
Schon seit einiger Zeit bastle ich an meinem eigenen IDE/FTOS interface, was eine Frankenstein-Version vom c't und ppera Interface ist. Ich bin jetzt an einem Punkt, wo ich es eventuell hinkriegen kann die IDE und die 4x FlashTOS Funktion mit nur einem einzigen GAL20V8 zu machen, ohne zusätzliche Chips.

Aber dafür muß ich die Gleichungen umschreiben. Bisher hab ich da hin- und her kopiert, was auch einigermaßen funktioniert. Aber eine Sache verstehe ich nicht.

In den meisten GAL-Files die ich bis jetzt gesehen habe sind die Pins einfach mit Namen benannt. In dem c't-GAL gibt es aber nicht nur "INT" oder "DTACK", sondern auch noch "INT.T" und DTACK.E".
Kann mir jemand erklären was es mit den Suffixen ".T" und ".E" auf sich hat?

Ich hab schon gegoogelt, aber ich finde keine vernünftige Erklärung dazu.

Offline tfhh

  • Benutzer
  • Beiträge: 190
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #1 am: Sa 25.08.2018, 22:56:55 »
Moin,

In den meisten GAL-Files die ich bis jetzt gesehen habe sind die Pins einfach mit Namen benannt. In dem c't-GAL gibt es aber nicht nur "INT" oder "DTACK", sondern auch noch "INT.T" und DTACK.E".
Kann mir jemand erklären was es mit den Suffixen ".T" und ".E" auf sich hat?

Das Problem ist, daß es bei einfachen PLDs dieser Art keinen wirklichen Standard gibt, jedenfalls nicht bei Verwendung der Gleichungen - dies kam erst später durch ABEL und VHDL für CPLD (komplexere PLD).

Hinzu kommt, daß jeder GAL Assembler so seine Eigenarten hat. Man kann z.B. die Sourcen, die früher auf dem Atari ST mit "GABI" gemacht wurden, selten auf dem PC mit PALASM oder GDS-Win (den nehme ich heute noch) 1:1 übersetzen, es sind immer kleinere Anpassungen nötig.

.T steht im Allgemeinen für TriState. Es gibt eigentlich nur eine Sonderform, das GAL20RA10, wo man dies explizit beschreiben kann (und muß). Das 20RA10 kann registered und combinatorisch frei verknüpft werden, mit den bekannten 20V8 oder 22V10 geht das nur eingeschränkt. Viele GAL Assembler sind so getrimmt, daß man sie mit einem "T" in den Registered Mode zwingt.

Das 16V8 oder 20V8 hat im Registered Mode einen OE Pin, wird hier Low angelegt, sind die Ausgänge aktiv (low oder high, je nach Gleichung), wenn OE high ist, sind die Ausgänge entsprechend tristate, also hochohmig. Das schränkt aber andere Funktionalitäten ein - das kannst Du lösen, in dem Du entweder ein 22V10 nimmst (viel flexibler) oder anstelle eines Tristate-Ausgangs einfach eine Shottky-Diode hinter den Ausgang packst, z.B. für DTACK (68000er Bus). Das ist GALanter :-) - funktioniert aber natürlich so nur bei Low-aktiven Ausgängen.

.E habe ich bisher nicht gesehen, aber wie erwähnt, es gibt unendlich viele PAL/GAL Assembler mit Eigenarten. Ich würde vermuten, daß .E hier genau der kombinatorische Ausgang ist, der OE steuert.

Grüße, Jürgen
« Letzte Änderung: Sa 25.08.2018, 23:10:29 von tfhh »

Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #2 am: Sa 25.08.2018, 23:10:52 »
Ich will die Funktionen des c't-IDE-Adapters mit dem 4x FlashTOS von ppera kombinieren.

Bzw. das hab ich schon. Aus dem IDE/FTOS-GAL nach ppera (16V8) hab ich einfach sämtliche IDE-bezogenen Funktionen rausgestrichen. Jetzt macht der nurnoch 2 Signale: DTACK und /CE für die ROMs.

Aber auf dem c't GAL hab ich jetzt unbenutze Funktionen, nämlich einmal für die TOS-2.06-Funktion des c't Adapters, und für die Steuerung der 245er Treiber. Die benutze ich nicht. Und DTACK hab ich da sowieso schon.
Ich bin mir nur nicht ganz sicher wie ich es schreiben muss. Das mit dem .t. und .e hat mich verwirrt.

Hier ist mal das betreffende File:

// 16.04.93 Kai Scheffer
// 20.06.93 Kai Scheffer Pinbelegung gem?? c't Layout abgeändert

GAL-Listing für IDE-Platten-Adapter am ATARI ST (c't 9/93)

IDE-Register $F00000 bis $F1FFFF
ROM-Breich   $E00000 bis $EFFFFF und ROM2-Select

Erzeugung von:
/DTACK  zum Atari
/CS0            geht zur IDE-Platte Pin 37
/CS1            geht zur IDE-Platte Pin 36
/IORD   geht zur IDE-Platte Pin 25
/IOWR           geht zur IDE-Platte Pin 23
/G                      Enable-Signal für die Datenbustreiber (2x74HCT245)
/INT    Interrupt-Signal zum Atari (DMA-Port Pin 10)

*IDENTIFICATION
 IDE_ST;
 
*TYPE
 GAL20V8;
 
*PINS
 /AS = 3,
 RW = 5,
 A5 = 1,
 /ROM2 = 2,
 A17 = 6,
 A18 = 7,
 A19 = 9,
 A20 = 8,
 A21 = 10,
 A22 = 11,
 A23 = 13,
 /LDS = 4,
 /IOCHRDY = 14,
 IRQ14 = 23,

 /INT.T = 19,
 /TOS.T = 20,
 /IOWR.T = 22,
 /IORD.T = 21,
 /G.T = 16,
 /CS1.T = 18,
 /CS0.T = 17,
 /DTACK.T = 15;
 
*BOOLEAN-EQUATIONS

TOS.E    = VCC;
IOWR.E   = VCC;
IORD.E   = VCC;
G.E      = VCC;
CS1.E    = VCC;
CS0.E    = VCC;

  INT.E    = IRQ14;
  INT      = IRQ14;

DTACK    = /A17 & /A18 & /A19 & A20 & A21 & A22 & A23
   + TOS;

  DTACK.E  = /IOCHRDY & AS & /A19 & A21 & A22 & A23;
     
CS0      = /A5 & /A17 & /A18 & /A19 & A20 & A21 & A22 & A23;

CS1      =  A5 & /A17 & /A18 & /A19 & A20 & A21 & A22 & A23;

G        = LDS & RW & /A17 & /A18 & /A19 & A20 & A21 & A22 & A23
+      /RW & /A17 & /A18 & /A19 & A20 & A21 & A22 & A23;
 
IORD     = LDS &  RW & CS0 + LDS &  RW & CS1;
     
IOWR     = LDS & /RW & CS0 + LDS & /RW & CS1 + LDS & /RW & TOS; % Signal TOS wegen EEPROMs %

TOS      = ROM2
   + AS & A23 & A22 & A21 & /A20 & /A19;

*END


Da ist DTACK mit .T definiert, also Tristate. Soweit komme ich noch mit. Die separate Gleichung für DTACK.E sieht für mich so aus, als könnte man für jeden Pin eine eigene Enable-Funktion angeben. Kann das sein?

PS: Ich benutze Jedi zum kompilieren.
« Letzte Änderung: Sa 25.08.2018, 23:12:43 von SolderGirl »

Offline czietz

  • Benutzer
  • Beiträge: 3.686
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #3 am: So 26.08.2018, 08:46:01 »
Da ist DTACK mit .T definiert, also Tristate. Soweit komme ich noch mit. Die separate Gleichung für DTACK.E sieht für mich so aus, als könnte man für jeden Pin eine eigene Enable-Funktion angeben. Kann das sein?

An der Stelle hilft ein Blick ins Datenblatt des verwendeten GALs weiter: https://www.latticesemi.com/-/media/LatticeSemi/Documents/DataSheets/GAL/GAL20V8DataSheet.ashx?la=en. GALs haben verschiedene Modi. Im sogenannten "Complex Mode" kannst Du tatsächlich je Ausgang einen Produktterm (d.h. im Wesentlichen eine Und-Verknüpfung zwischen Signalen) für Output-Enable definieren.

Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #4 am: So 26.08.2018, 09:13:11 »
Da ist DTACK mit .T definiert, also Tristate. Soweit komme ich noch mit. Die separate Gleichung für DTACK.E sieht für mich so aus, als könnte man für jeden Pin eine eigene Enable-Funktion angeben. Kann das sein?

An der Stelle hilft ein Blick ins Datenblatt des verwendeten GALs weiter: https://www.latticesemi.com/-/media/LatticeSemi/Documents/DataSheets/GAL/GAL20V8DataSheet.ashx?la=en. GALs haben verschiedene Modi. Im sogenannten "Complex Mode" kannst Du tatsächlich je Ausgang einen Produktterm (d.h. im Wesentlichen eine Und-Verknüpfung zwischen Signalen) für Output-Enable definieren.

Danke für den Hinweis. Aber wenn ich das richtig sehe, ist nur *ein* OE-Term zulässig, also keine ODER-Funktion dafür. Das ist blöd, dann brauche ich doch noch den zusätzlichen Open Collector Chip. Oder ich müsste einen Pin benutzen um quasi einen Zwischenwert zu bilden.

Offline Lukas Frank

  • Benutzer
  • Beiträge: 13.424
  • fancy Atari Musik anDA Dance "Agare Hinu Harukana"
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #5 am: So 26.08.2018, 09:33:51 »
Im ST Guide aus dem JEDI 045 Paket gibt es auch einige Hinweise.

Offline pakman

  • Benutzer
  • Beiträge: 97
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #6 am: So 26.08.2018, 10:55:58 »
Danke für den Hinweis. Aber wenn ich das richtig sehe, ist nur *ein* OE-Term zulässig, also keine ODER-Funktion dafür.
Korrekt.
Zitat
Das ist blöd, dann brauche ich doch noch den zusätzlichen Open Collector Chip. Oder ich müsste einen Pin benutzen um quasi einen Zwischenwert zu bilden.
Eine dritte Möglichkeit, die bereits weiter oben erwähnt wurde: Den GAL-Ausgang als ganz normalen Push/Pull-Ausgang betreiben (dann hast Du bis zu 8 ODER-Terme), und eine Schottky-Diode dahinter schalten.
PAK68/3 54MHz mit Flash-ROMs, FRAK/1 16 MByte, Panther/2 mit ATI Mach32
CompactFlash Adapter (modifizierter Panther/1)

Offline tfhh

  • Benutzer
  • Beiträge: 190
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #7 am: So 26.08.2018, 11:05:37 »
Moin,

... wurde ja alles bereits ergänzt :-)

Anbei nur zur Sicherheit ein praktisches Beispiel, wie Du die Diode schaltest. Unten im Bild wäre "REF" Dein Ausgang für DTACK.

Bei den Gleichungen läßt Du dann das "INT.E = IRQ14" weg, ebenso "DTACK.E  = /IOCHRDY & AS & /A19 & A21 & A22 & A23;" - einfach auskommentieren.

Grüße, Jürgen



Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #8 am: So 26.08.2018, 11:09:21 »
Danke für den Hinweis. Aber wenn ich das richtig sehe, ist nur *ein* OE-Term zulässig, also keine ODER-Funktion dafür.
Korrekt.
Zitat
Das ist blöd, dann brauche ich doch noch den zusätzlichen Open Collector Chip. Oder ich müsste einen Pin benutzen um quasi einen Zwischenwert zu bilden.
Eine dritte Möglichkeit, die bereits weiter oben erwähnt wurde: Den GAL-Ausgang als ganz normalen Push/Pull-Ausgang betreiben (dann hast Du bis zu 8 ODER-Terme), und eine Schottky-Diode dahinter schalten.

Ich hab mir das ganze nochmal angeschaut, und ich werde wohl doch mindestens 3 Chips brauchen. Neben dem GAL kommt sowieso noch ein 244er Treiber, und ich brauche auch das RW-Signal invertiert für die Flash Chips. Also brauche ich auch den 7403 als Inverter. Und ich denke da hab ich noch ein Gatter frei, dann kann ich es darüber führen und hab es dann als Open Collector. Und damit erledigt sich das mit Tristate an dem Pin sowieso.

Trotzdem sollte es vom Platz her eigentlich passen, das ich die drei ICs zwischen die Stiftleisten zu CPU quetschen kann. Nur die Verdrahtung wird dann natürlich sehr fummelig.

Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #9 am: So 26.08.2018, 11:10:18 »
Moin,

... wurde ja alles bereits ergänzt :-)

Anbei nur zur Sicherheit ein praktisches Beispiel, wie Du die Diode schaltest. Unten im Bild wäre "REF" Dein Ausgang für DTACK.

Bei den Gleichungen läßt Du dann das "INT.E = IRQ14" weg, ebenso "DTACK.E  = /IOCHRDY & AS & /A19 & A21 & A22 & A23;" - einfach auskommentieren.

Grüße, Jürgen

Da geht auch eine einfache 1N4148?

Offline tfhh

  • Benutzer
  • Beiträge: 190
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #10 am: So 26.08.2018, 11:17:43 »
Da geht auch eine einfache 1N4148?

Na klar. Gemäß TTL Spezifikation sind die verbleibenden 0,7 Volt (max.) immer noch eindeutig "low" und die gute, alte 1N4148 ist sauschnell. Man KANN natürlich auch noch edlere Dioden mit Goldrand nehmen, aber wozu... nicht bei den paar MHz der alten Kisten  :)

Offline tfhh

  • Benutzer
  • Beiträge: 190
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #11 am: So 26.08.2018, 11:23:48 »
Moin,

...  und ich brauche auch das RW-Signal invertiert für die Flash Chips.

Eigentlich nicht. Die Gleichung hat dafür doch bereits ein Term mit drin - siehe hier:

IOWR     = LDS & /RW & CS0
         + LDS & /RW & CS1
         + LDS & /RW & TOS; % Signal TOS wegen EEPROMs %

Ich habe es mal auseinander gezogen zur besseren Lesbarkeit. IOWR ist das low-Aktive "Write Enable" für IDE Platte 0 und 1 UND für ein EEPROM - genauso gut kann es für ein Flash-ROM genutzt werden. Das heißt, Du führst IOWR an den /WE Eingang des Flashes, fertig.




Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #12 am: So 26.08.2018, 11:39:47 »
Leider ist das bei der FTOS-Schaltung nicht so ganz einfach.
Da geht nämlich RW nicht an WE.

Das RW wird in dem Fall als OE-Signal genutzt, und das WE-Signal der Flash Chips kommt von einem kleinen ATtiny. Das ist sozusagen der Schreibschutz, weil man das WE-Signal von Hand per Taster aktivieren muß.

Offline SolderGirl

  • Benutzer
  • Beiträge: 446
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #13 am: So 26.08.2018, 13:47:03 »
So, ich hab jetzt mal was gebastelt:

' IDE / 4x FlashTOS
'
' IDE-Register $F00000 bis $F0FFFF
' ROM-Area     $E00000 bis $E3FFFF for TOS 2.06
' ROM-Area     $FC0000 bis $FEFFFF for TOS 1.x
'
' Generates:
' /DTACK  zum Atari
' /CS0  -> IDE Pin 37
' /CS1    -> IDE Pin 36
' /IORD    -> IDE Pin 25
' /IOWR    -> IDE Pin 23
' /INT    Interrupt-Signal to Atari (DMA-Port Pin 10)
' /TOS Chip Enable for Flash ROM
' /WE Write Enable for Flash ROM

*IDENTIFICATION
 IDE_FTOS;
 
*TYPE
 GAL20V8;
 
*PINS

' Inputs
 /AS = 3,
 RW = 5,
 A5 = 1,
 A16    = 2, ' Was ROM2 on ct-IDE
 A17 = 6,
 A18 = 7,
 A19 = 9,
 A20 = 8,
 A21 = 10,
 A22 = 11,
 A23 = 13,
 /LDS = 4,
 /IOCHRDY = 14,
 IRQ14 = 23,
 
' Output
 /INT.T = 19,
 /TOS = 20, ' Chip Enable for Flash
 /IOWR.T = 22,
 /IORD.T = 21,
 /WE = 16, ' Was G (DIR for Drivers) on ct IDE
 /CS1.T = 18,
 /CS0.T = 17,
 /DTACK = 15; ' via 1N4148
 
*BOOLEAN-EQUATIONS

IOWR.E  = VCC;
IORD.E  = VCC;
CS1.E   = VCC;
CS0.E   = VCC;

' Common Signals
DTACK   =      A23 & A22 & A21 &  A20 & /A19 & /A18 & /A17 & /A16 ' F00000 - F0FFFF For IDE
+ AS & A23 & A22 & A21 & /A20 & /A19 & /A18;     ' E00000 - E3FFFF TOS 2
' DTACK for FC0000-FEFFFF should be gegerated by GLUE

' IDE Signals 

' Interrupt     
INT.E  = IRQ14;
  INT     = IRQ14;

  ' Master/Slave
CS0     = A23 & A22 & A21 &  A20 & /A19 & /A18 & /A17 & /A16 & /A5;
CS1     = A23 & A22 & A21 &  A20 & /A19 & /A18 & /A17 & /A16 &  A5;

' Read / Write
IORD    = LDS &  RW & CS0
+ LDS &  RW & CS1;      
IOWR    = LDS & /RW & CS0
+ LDS & /RW & CS1;

' FlashTOS Signal (Chip Enable)

' Chip Enable ROM
TOS     = AS & A23 & A22 & A21 & /A20 & /A19 & /A18                                  ' E00000 - E3FFFF
    + AS & A23 & A22 & A21 &  A20 &  A19 &  A18 & /A17 & /A16 & RW ' FC0000 - FCFFFF
                    + AS & A23 & A22 & A21 &  A20 &  A19 &  A18 & /A17 &  A16 & RW ' FD0000 - FDFFFF 
                    + AS & A23 & A22 & A21 &  A20 &  A19 &  A18 &  A17 & /A16 & RW; ' FE0000 - FEFFFF

' Write Enable
WE = RW; ' Is inverted on Output.      

*END

Hab ich da irgendwo einen Denkfehler ?

Offline tfhh

  • Benutzer
  • Beiträge: 190
Re: Wer kennts sich mit GAL-Programmierung aus?
« Antwort #14 am: Di 28.08.2018, 09:02:48 »
Moin,
da ich die Ursprungsschaltungen etc. nicht kenne, würde ich mal kommentieren:TOS-Gleichungen:
    TOS     = AS & A23 & A22 & A21 & /A20 & /A19 & /A18                                      ' E00000 - E3FFFF
                + AS & A23 & A22 & A21 &  A20 &  A19 &  A18 & /A17 & RW                 ' FC0000 - FDFFFF
                + AS & A23 & A22 & A21 &  A20 &  A19 &  A18 &  A17 & /A16 & RW;     ' FE0000 - FEFFFF

Das kann man so zusammenfassen. Was mich irritiert... ist das mit RW..Warum hast Du im Addressbereich für TOS 1.0x die RW Leitung mit im Term? Aktuell, da RW oben in der Definition nicht negiert ist, würde "TOS" nur low-aktiv werden bei einem _Lesezugriff_ auf FC0000-FEFFFF. Soll die von Dir erzielte Lösung ein Flashen (Schreiben) auch im TOS 1.0x Bereich ermöglichen, muß "RW" aus der Gleichung verschwinden, denn das Flashen erfordert Lese- und Schreibzugriff. Von daher vermute ich mal, Du möchtest bei Schreibvorgängen das Chipselect erzeugen... das langt aber so nicht. DTACK muß entsprechend gesetzt werden, sonst gibt es einen Bus Error..
Ergänze daher:    DTACK   =  AS & A23 & A22 & A21 &  A20 & /A19 & /A18 & /A17 & /A16       ' F00000 - F0FFFF For IDE
            +  AS & A23 & A22 & A21 & /A20 & /A19 & /A18;                    ' E00000 - E3FFFF TOS 2.0x
            +  AS & A23 & A22 & A21 &  A20 &  A19 &  A18 & /A17              ' FC0000 - FDFFFF TOS 1.0x
            +  AS & A23 & A22 & A21 &  A20 &  A19 &  A18 &  A17 & /A16       ' FE0000 - FEFFFF TOS 1.0x
.
Und das mit WE macht so auch kein Sinn (schrieb ich schon mal). Das Signal RW der CPU ist low-aktiv bei Schreibzugriffen, genauso braucht es WE bei einem Flash-ROM auch, d.h. Du kannst RW vom 68000er Bus direkt an WE der Flash-ROMs anschließen, fertig..
Für OE brauchst Du invertiertes RW Signal...  :) .
Komplettes Listing gibt es u.A. auch hier bei Pera Putnuk: Flash-TOS mit und ohne IDE.
Gruß, Jürgen---PS: Irgendwie verschluckt der Editor Leerzeilen... Formatierung sieht mies aus. Sorry.