Forum: FPGA, VHDL & Co. JK-FlipFlop in GAL


von Heiko Prinz (Gast)


Lesenswert?

Hallo.

Ich möchte mit einem GAL einen Auf-/Abwärtszähler programmieren.
Diesen habe ich schon IC (74er) aufgebaut.
Nur fehlt mir jetzt der Ansatz, wie ich die JK-FF in dem GAL 
unterbringe, mittels der Ersatzschaltung???

Außerdem möchte ich den Zähler über einen Dreh-Encoder steuern.
Also CW-Drehung = Vorwärts, CCW = Rückwärts.

Laut Datenblatt (Panasonic EVEP) wären ja für die Richtung die Ausgänge 
A und B ausschlaggebend.

also wenn auf 00 10 folgt, dann vorwärts, wenn auf 00 01 folgt, dann 
rückwärts, hab ich das richtig interpretiert?

Außerdem brauche ich ja noch einen Takt, da nehme ich denke ich mal den 
Drehimpuls oder?
Also sobald ein Wechsel bei AB auftaucht = 1 Takt???


Vielen dank für die Hilfe

: Verschoben durch Moderator
von Falk B. (falk)


Lesenswert?

Siehe Drehgeber.

von holger (Gast)


Lesenswert?

Was willst du denn mit den alten Stromfressern?

>Nur fehlt mir jetzt der Ansatz, wie ich die JK-FF in dem GAL
>unterbringe, mittels der Ersatzschaltung???

GALs haben D-Flipflops in den OLMC. Mehr brauchst du auch nicht.
Deine Schaltung ergibt sich über die Syntax deines GAL Compilers.
Sprich: du gibts die Logikgleichungen ein. Für FF gibt es dann
eine entsprechende Syntax.

>Außerdem brauche ich ja noch einen Takt, da nehme ich denke ich mal den
>Drehimpuls oder?

GALs haben einen Takteingang für die FF in den OLMC. Da legst du
deinen Takt an. Wenn der schön langsam ist kannst du damit gleich
auch noch entprellen;) Der Takt kommt NICHT vom Drehgeber. Zur Not
tut es bei dir wohl ein NE555.

von Heiko Prinz (Gast)


Lesenswert?

Erstmal danke für die Antworten.

>> Was will ich mit den alten Stromfressern?

Ganz einfach, lernen. Sicherlich werde ich für spätere Projekte andere 
Bausteine einsatzen, aber ich möchte das hier mit dem GAL verwirklichen.

>> FF in GAL

Das mit den D-FlipFlops ist gut, das hab ich garnicht bedacht, dass man 
die ja mitbenutzen kann. Somit wäre dieses Kapitel erledigt.

>> Takt

Also nochmal zum Verständnis: Ich möchte über einen HANDBETRIEBENEN 
Drehencoder den Zähler bedienen. Je nach Drehrichtung auf oder abwärts 
zählen lassen.

Somit brauche ich doch den Drehimpils des Drehencoders als Takt oder 
verstehe ich da was falsch?

von Falk B. (falk)


Lesenswert?

@  Heiko Prinz (Gast)

>Also nochmal zum Verständnis: Ich möchte über einen HANDBETRIEBENEN
>Drehencoder den Zähler bedienen. Je nach Drehrichtung auf oder abwärts
>zählen lassen.

Schon klar.

>Somit brauche ich doch den Drehimpils des Drehencoders als Takt oder
>verstehe ich da was falsch?

Ja, das verstehst du falsch. Lies den Artikel Drehgeber, odrt ist 
ein Beispiel für deinen GAL in VHDL drin. Man braucht einen 
zusätzlichen, normalen Takt, bei dir so 1 kHz ode so.

Zum Lernen würde ich dir auch vom GAL abraten. Kauf dir lieber bei 
Pollin das CPLD Evalbaord.

http://www.pollin.de/shop/dt/MTM5OTgxOTk-/Bausaetze/Diverse/Bausatz_CPLD_Evaluation_Board.html

MFG
Falk

von Heiko Prinz (Gast)


Lesenswert?

Okay.

Aber ich möchte das gern mit dem GAL lösen. Habe ja schon zwei 
einfachere Schaltungen mit dem GAL erstellt.
Jetzt halt mal ne Etage komplizierter.

Ich werd mich mal jetzt nochmal der Lektüre widmen.

Vielen Dank nochmal.

von Heiko Prinz (Gast)


Lesenswert?

Eine Frage noch:

Ich habe bereits einen Zähler (74LS93) und dazu einen Taktgeber (der 
bringt momentan so ca. 7kHz.

Könnte ich den Drehencoder dort anschließen und damit zählen, also quasi 
durch drehen?

von Martin (Gast)


Lesenswert?

... Was willst du denn mit den alten Stromfressern? ...

Es gibt auch 'zero power' GAL - z. B. PALCE22V10Z.

von Heiko Prinz (Gast)


Lesenswert?

Danke für die Hinweise, da ich aber nur diesen zur Verfügung habe, will 
ich ihn auch benutzen.

Vielen Dank

von Heiko Prinz (Gast)


Lesenswert?

So also die Schaltung in WinCUPL für den GAL hab ich soweit. War ja doch 
ganz einfach mit den D-FlipFlps.

Aber mein Problem ist immer noch der Takt.

Das was am Dateneingang anliegt, wird doch mit jedem 0 am Takt am 
Ausgang gespeichert.

Also muss ich ja prüfen, ob nach links oder rechts gedreht wurde, und 
wenn das der Fall ist, den Takt zum Flipflop durchlassen, oder?

Der VHDL-Code aus dem Tutorial ist verständlich, wie jedoch setze ich 
das mit WinCUPL um?

Vielen Dank

von Stephan H. (stephan-)


Lesenswert?

+---+
 A -----|D Q|---+
      +-|T  | +-(---------- Clock
      | +---+ | |   +---+
      +-------+ +---|   |
      | +---+   |   |XOR|-- Forward Direction
 B ---(-|D Q|-+ | +-|   |
      +-|T  | | | | +---+
      | +---+ | | |
  +---(-------+ | | +---+
  | +-(-------(-+-(-|   |
  | | | +---+ |   | |XOR|-+ +---+
  | +-(-|D Q|-(---(-|   | +-|   |
  |   +-|T  | |   | +---+   |XOR|-- Clock Enable
  |   | +---+ |   | +---+ +-|   |
  |   |       +---(-|   | | +---+
  |   | +---+     | |XOR|-+
  +---(-|D Q|-----+-|   |
 T ---+-|T  |       +---+
        +---+


stammt aus: http://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

von Heiko Prinz (Gast)


Lesenswert?

Okay, das hilft schon mal sehr weiter. Danke

CLK und CLK-EN muss ich ja verknüpfen mit UND und das dann an den CLK 
des Zählers, oder?

von Falk B. (falk)


Lesenswert?

@  Heiko Prinz (Gast)

>CLK und CLK-EN muss ich ja verknüpfen mit UND und das dann an den CLK
>des Zählers, oder?

NEIN! Clock Enable muss an das Clock Enable des Zählers. Die 
Und-Verknüpfung geht zu 99% schief! Siehe Taktung FPGA/CPLD.

MFg
Falk

von Heiko Prinz (Gast)


Lesenswert?

Aber den Zähler realisiere ich ja auch mit dem GAL, wie mache ich das 
dort mit dem CLK_EN.

von Falk B. (falk)


Lesenswert?

@  Heiko Prinz (Gast)

>Aber den Zähler realisiere ich ja auch mit dem GAL, wie mache ich das
>dort mit dem CLK_EN.

Einfach ein Zählersymbol mit CE-Eingang nutzen?

von Heiko Prinz (Gast)


Lesenswert?

Also ich bin jetzt mal auf den GAL22V10 gewechselt, sonst haut es nicht 
hin mit den FF.
Ich will jetzt also den Decoder für den Drehgeber und den Zähler in den 
einen GAL, jedoch finde ich nirgends im Datenblatt einen CE-Eingang bei 
den FF.

von Falk B. (falk)


Lesenswert?

@  Heiko Prinz (Gast)

>einen GAL, jedoch finde ich nirgends im Datenblatt einen CE-Eingang bei
>den FF.

Den gibt es bei diesen ICs nicht direkt, der wird über die Produktterme 
nachgebildet. Im Abel erreicht man den über die Endung .CE

MFG
Falk

von Heiko Prinz (Gast)


Lesenswert?

Okay, danke für die Info. Wie kann ich das in dem GAL 22v10 realisieren? 
Was sind Produktterme? Sind doch disjunktive, also UND-Verknüpfungen, 
oder?
Was muss ich dann mit dem CE des Decoders UND-verknüpfen? Doch 
eigentlich den Takt, weil der steuert ja die Ausgabe der FF, also wenn 
CE = 1 und Takt = 1 dann sollen der Zähler zählen.

von Falk B. (falk)


Lesenswert?

@  Heiko Prinz (Gast)

>Okay, danke für die Info. Wie kann ich das in dem GAL 22v10 realisieren?

Einfach die Logikgleichungen hinschreiben, den Rest macht die Software.

>Was sind Produktterme? Sind doch disjunktive, also UND-Verknüpfungen,
>oder?

Ja.

>Was muss ich dann mit dem CE des Decoders UND-verknüpfen?

Gar nichts! Aber das CE muss das Zählen des Zählers steuern.

>CE = 1 und Takt = 1 dann sollen der Zähler zählen.

Ja, aber richtig. Siehe Taktung FPGA/CPLD.

MfG
Falk

von Heiko Prinz (Gast)


Lesenswert?

Okay, also ich habe folgende Eingänge:

A und B vom Drehgeber
und clk von meinem externen Taktgeber

Die gehen zum Decoder.

Dort bekomme ich CE und Richtung.

Die gehen weiter zum Zähler,
Mit was muss ich das CE UND-verknüpfen? In dem Tutorial (Taktung FPGA) 
ist ja noch nen Zähler zwischen geschaltet.
Das verstehe ich in meinem Beispiel nicht, da ich ja nur möchte, dass 
gezählt wird, wenn der Drehgeber gedreht wird.

von Heiko Prinz (Gast)


Lesenswert?

So also hier mal meine Schaltung:
                 _ _ _ 
CLK (ext) -----|1      24|------- VCC
A --------+----|         |------- OUT0
B ----+---)----|         |------- OUT1
RES---)---)----|         |------- OUT2
      |   |   -|         |------- OUT3
 10k |R| |R|  -|         |-
     |_| |_|  -|         |-
      |   |   -|         |-
       VCC    -|         |-
              -|         |-
              -|         |-
GND       -----|_  _  _|-

RES ist D/E vom Drehgeber

intern habe ich es wie folgt gelöst:
WINCUPL
1
Name     GAL_Counter ;
2
PartNo   00 ;
3
Date     28.05.2010 ;
4
Revision 01 ;
5
Designer Heiko Prinz ;
6
Company  privat ;
7
Assembly None ;
8
Location  ;
9
Device   g22v10 ;
10
11
/* *************** INPUT PINS *********************/
12
PIN 1     =      clk;
13
PIN 2     =      A_in;
14
PIN 3     =      B_in;
15
PIN 4     =      res;
16
17
/* *************** OUTPUT PINS *********************/
18
PIN 20    =      out3;
19
PIN 21    =      out2;
20
PIN 22    =      out1;
21
PIN 23    =      out0;
22
23
/* *************** INTERNAL SIGNALS ****************/ 
24
PIN 14    =      up_do; 
25
PIN 15    =      CE; 
26
PIN 16    =      A;
27
PIN 17    =      B;
28
PIN 18    =      A_del;
29
PIN 19    =      B_del;
30
31
A.D       = A_in;
32
B.D       = B_in;
33
A_del.D   = A;
34
B_del.D   = B;
35
up_do     = (A $ B_del);
36
CE        = (A $ A_del) $ (B $ B_del);
37
38
/* Definition */
39
40
FIELD count   = [out3..0];       /* Index = Bitposition! */
41
42
/* Logic Equations */
43
44
Sequenced count {
45
$Repeat i = [0..15]
46
47
Present 'd'{i}
48
49
if !res & up_do Next 'd'{(i+1)%16};
50
51
if !res & !up_do Next 'd'{(i-1)%16};
52
53
if res Next 'd'{0};
54
55
$Repend
56
}

von Heiko Prinz (Gast)


Lesenswert?

Das einzige womit ich nicht klar komme, ist der CE.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.