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

GAL Programmierung der einstieg

<< < (11/11)

pakman:

--- Zitat von: FrankR am Sa 21.08.2021, 15:32:00 ---

--- Code: ---' 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!

--- Ende Code ---

Was mache ich falsch?

--- Ende Zitat ---

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:

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

--- Ende Code ---

Und DTACK sollte so aussehen:

--- Code: ---DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
/DTACK      = GND; 'falls unter %PINS  DTACK steht

--- Ende Code ---
Es geht auch:

--- Code: ---DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
DTACK       = VCC; 'dann muss unter %PINS  /DTACK stehen

--- Ende Code ---

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

artik-wroc:
Und wie ist eine solche Gleichung zu verstehen, bei der Pin 22 auf beiden Seiten der Gleichung steht?

--- Code: ---!P22      = !P22 * P5
          + !P22 * P4

--- Ende Code ---

FrankR:

--- Zitat von: pakman am Do 26.08.2021, 01:23:55 ---Und DTACK sollte so aussehen:

--- Code: ---DTACK.OE    = RW * A23 * A22 * A21 * !A20 * !A19 * !A18 * !AS;
/DTACK      = GND; 'falls unter %PINS  DTACK steht

--- Ende Code ---

--- Ende Zitat ---

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

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

--- Ende Code ---

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

FrankR:
Oh verflixt. Hätte ich wohl besser

--- Code: ---DTACK = GND;
--- Ende Code ---
Oder

--- Code: ---!DTACK = VCC;
--- Ende Code ---
schreiben sollen, damit ich ein low bekommen, wenn die OE Bedingung erfüllt ist?

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln