Hardware > Hardware (Classic 16-/32-Bit)

Wer kennts sich mit GAL-Programmierung aus?

(1/3) > >>

SolderGirl:
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.

tfhh:
Moin,


--- Zitat von: SolderGirl am Sa 25.08.2018, 19:13:00 ---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?

--- Ende Zitat ---

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

SolderGirl:
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:


--- Code: ---// 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


--- Ende Code ---

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.

czietz:

--- Zitat von: SolderGirl am Sa 25.08.2018, 23:10:52 ---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?

--- Ende Zitat ---

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.

SolderGirl:

--- Zitat von: czietz am So 26.08.2018, 08:46:01 ---
--- Zitat von: SolderGirl am Sa 25.08.2018, 23:10:52 ---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?

--- Ende Zitat ---

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.

--- Ende Zitat ---

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.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln