Homepage von Ingo Klöckl
 Home
 Elektronik
 - Mikrocontroller
 - GAL/CPLD
 - Links
Ingo Klöckl
i.kloeckl@2k-software.de

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:

  • RS-Latches mit einem und mehreren S- und R-Eingängen:
    Q	= /R * Q + /R * S;
    Q	= /R * Q + /R * S1 + /R * S2;	
    Q	= /R1 * /R2 * Q + /R1 * /R2 * S;	
    
  • D-Latch:
    Q	= Q * /C + D * C + Q * D;
    

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;