GALs
Im Zuge der verschiedenen Basteleien hat es sich als hilfreich erwiesen, einen Teil der anfallenden
TTL-Logik durch GALs zu ersetzen. Um zügig bei der Entwicklung der GAL-Gleichungen voranzukommen,
stelle ich hier einige Gleichungen für grundlegende Schaltungsteile (Latches und Flipflops) vor,
aus denen man dann rasch komplexere Schaltungen aufbauen kann. (Natürlich kann man
die Flipflops viel einfacher durch die intern vorhandenen D-Flipflops synthetisieren,
aber die sind meist synchron, und häufig braucht man ein oder mehrere asynchron getaktete
Flipflops ...)
Für evt. in den
Gleichungen auftretende Fehler hafte ich natürlich nicht, wäre aber über eine Korrekturmitteilung
sehr erfreut.
Grundlegendes
In den folgenden Gleichungen wird hauptsächlich positive (high-aktive) Logik für die Kontrolleingänge
verwendet. Um negative (low-aktive) Logik zu erhalten, müssen lediglich die Kontrollsignale invertiert
verwendet werden, also z.B.
/* high-aktives RS-Latch */
Q = /R * Q + /R * S;
/* low-aktives RS-Latch */
Q = R * Q + R * /S;
Bei den taktflankengesteuerten Elementen wird hauptsächlich die steigende Flanke zur Auslösung der
Aktion verwendet. Um eine Reaktion bei fallender Flanke zu erhalten, muß lediglich das Taktsignal
invertiert verwendet werden, also z.B.
/* T-Flipflop steigende Flanke */
H = H * C + /Q * /C + H * /Q;
Q = Q * /C + H * C + H * Q;
/* T-Flipflop fallende Flanke */
H = H * /C + /Q * C + H * /Q;
Q = Q * C + H * /C + H * Q;
Invertierte Ausgänge werden einfach durch Negation eines Ausgangs erhalten:
Qq = /Q;
Latches
Die folgenden zustandsgesteuerten Latches erfordern jeweils 1 OLMC mit Feedback:
Flipflops
Die folgenden taktflankengesteuerten Flipflops erfordern jeweils 2 OLMCs mit Feedback. H ist jeweils
ein Hilfs-Signal (muß leider auf einen Ausgang geführt werden, es sei denn, das GAL erlaubt die Verwendung von
buried macrocells), C das Taktsignal, Q der eigentliche Ausgang:
- D-Flipflop:
H = H * C + D * /C + H * D;
Q = Q * /C + H * C + Q * H;
/* D-Flipflop mit asynchronen R- und S-Eingängen */
H = H * C * /R + D * /C * /R + S + H * D * /R;
Q = Q * /C * /R + H * C * /R + S + Q * H * /R;
- JK-Flipflop (J=L,K=H:reset, J=H,K=L:set, J=K=H:toggle,J=K=L:store):
H = H * C + /K * /C * Q + J * /C * /Q + J * /K * /C;
Q = Q * /C + H * C;
- T-Flipflop:
H = H * C + /Q * /C + H * /Q;
Q = Q * /C + H * C + H * Q;
/* T-Flipflop mit asynchronem R-Eingang*/
H = H * C * /R + /Q * /C * /R + H * /Q * /R;
Q = Q * C * /R + H * C * /R + Q * H * /R;
/* T-Flipflop mit Freigabeeingang Enable */
H = H * C + /Enable * /C * Q + Enable * /C * /Q;
Q = Q * /C + H * C;
|