Forum: FPGA, VHDL & Co. Standard Logic mit ATF750CL-15X realisieren..


von (C)PLD (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich muss eine Schaltung mit PLD /5V realisieren, Schaltplan angehängt.
Ich hab mir ein Baustein ausgesucht ATF750CL-15X (TSSOP24), denn kann 
ich mit Galep programmieren. Original Schaltung würde nicht auf die 
Platine passen, wäre zu groß deswegen diese PLD-Geschichte...

Ich hab noch nie PLDs programmiert, welchen Compiler kann ich da nehmen, 
am besten irgendwas mit Graphischer Oberfläche, in dem ich die Schaltung 
einfach zeichne, kompiliere und am ende ein FILe hab, denn ich mit Galep 
brennen kann ;-)

wäre meine Schaltung (siehe PDF) mit CPLD oder sogar mit PLD wie zB. 
ATF16V8BQL realisierbar ???

Bedanke mich im Voraus...

: Verschoben durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Gibts den wirklich noch zu kaufen? Das war doch ein 22V10 mit weiteren 
10 Schattenflipflops. Die Logikmatrix hatte man aber nicht verdoppelt, 
sodass nur noch halb soviele Minterme pro FF zur Verfügung stehen.

Ich hab damals (1995) darin eine State Machine untergebracht, mit 
DataIO-ABEL optimiert und anschliessend in WinCUPL übersetzt, weil es 
dazu einen Programmer gab. Beide Demosoftwareversionen auf Diskette 
installiert.

von Peter D. (peda)


Lesenswert?


von (C)PLD (Gast)


Lesenswert?

Christoph K. schrieb:
> Gibts den wirklich noch zu kaufen?

http://www.digikey.com/product-detail/en/atmel/ATF750CL-15XU/ATF750CL-15XU-ND/1914515

oder kann mir was neues vorschlagen, für 5V halt....

Ich bin jetzt weiter, brauch diesen atmel synario (mit Grapschen Editor)
denn finde ich aber nirgendwo...

von Peter D. (peda)


Lesenswert?

(C)PLD schrieb:
> (mit Grapschen Editor)

Ach komm, die 2 FFs und paar Gatter sind viel schneller als Text 
hingeschrieben.
Den U1B kann man in 2 NANDs umzeichnen.

von (C)PLD (Gast)


Lesenswert?

Peter D. schrieb:
> (C)PLD schrieb:
>> (mit Grapschen Editor)
>
> Ach komm, die 2 FFs und paar Gatter sind viel schneller als Text
> hingeschrieben.
> Den U1B kann man in 2 NANDs umzeichnen.

ja wenn man das nie gemacht hat ist es schwer, ich hab die Schaltung im 
einem uC dsPIC33EV laufen, die funktioniert, leider zulangsam
1
 while(1)
2
 {  
3
 
4
    temp = PORTA;
5
6
    if (temp != temp_alt)
7
     {
8
        richtung = ((temp & 1) ^ ((temp_alt>>1)&1));
9
        temp_alt = temp;
10
     }
11
12
   if (richtung == 0)
13
    {
14
15
    switch(temp) //
16
             {
17
             case 0:
18
                  anfang = 0;
19
             break;
20
21
             case 3:
22
                  if (anfang == 0) { temp2 = 0;}
23
             break;
24
25
             case 7:
26
                  temp2 = 4;
27
                  anfang = 1;
28
             break;
29
30
             default:
31
             break;
32
    }
33
34
   }
35
   else
36
   {
37
    switch(temp) //
38
             {
39
             case 0:
40
                  if (anfang == 1) {anfang = 0;}
41
             break;
42
43
             case 2:
44
                  if (anfang == 1) {temp2 = 4;} else {temp2 = 0;}
45
             break;
46
47
             case 7:
48
                  temp = 3;
49
                  anfang = 1;
50
             break;
51
52
             default:
53
             break;
54
           }
55
56
    }
57
58
    LATB = temp | temp2;
59
 }
60
}

Peter D. schrieb:
> http://www.atmel.com/tools/WINCUPL.aspx

Hab mir jetzt runter geladen...

von (C)PLD (Gast)


Lesenswert?

Also Header hab ich schon mal :-D
1
Name      Encoder;
2
Partno    ATF750;
3
Date      August 2016;
4
Revision  01;
5
Designer  ich;
6
Company   xx;
7
Assembly  Encoder;
8
Location  xxx;
9
Device    v750c;
10
11
/* *************** INPUT PINS *********************/
12
PIN  2  =  A          ; /*                                 */ 
13
PIN  3  =  B          ; /*                                 */ 
14
PIN  4 =   C          ; /*                                 */ 
15
16
/* *************** OUTPUT PINS *********************/
17
PIN  23   =   D                     ;

und wir verbinde ich das alles?!
Zb. PIN  2  =  A   und  PIN  3  =  B  mit U1A FlipFlop

von Peter D. (peda)


Lesenswert?

Ohne Gewähr:
1
pin 22 = u1a;
2
pin 21 = u1b;
3
pin 20 = u6b;
4
5
u1a.d = A;
6
u1a.ck = B;
7
u6b.d = D;
8
u6b.ck = B;
9
u7a = !(u6b & (u1a $ A));
10
u1b = u1b & u7a
11
    # !C;
12
D = u1b & (!C # !u1a);

von (C)PLD (Gast)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Ohne Gewähr:pin 22 = u1a;
> pin 21 = u1b;
> pin 20 = u6b;
>
> u1a.d = A;
> u1a.ck = B;
> u6b.d = D;
> u6b.ck = B;
> u7a = !(u6b & (u1a $ A));
> u1b = u1b & u7a
>     # !C;
> D = u1b & (!C # !u1a);

jo danke habe ich jetzt nicht getestet.


Hab jetzt was eigene geschrieben, läßt sich aber nicht kompilieren:
1
/* *************** INPUT PINS *********************/
2
pin [2,3,4] = [A,B,Z]; 
3
4
/* *************** OUTPUT PINS *********************/
5
pin [17,18,19,20,21,22,23] = [U3A,U7A,U5A,U1B,U6B,U1A,C]; 
6
/* pinnode [34,44,31] = [O23Q1,O23Q0,O20Q1];  */
7
8
9
U1A.d = A;
10
U1A.ck = !B;
11
12
U6B.d = C;
13
U6B.ck = !B;
14
15
U5A = A $ U1A;
16
U7A = !(U5A & U6B);
17
U3A = !Z # !A;
18
19
U1B.ap = Z;
20
U1B.ar = !U7A;
21
22
C = U3A & U1B;

Was mache ich falsch?!

von (C)PLD (Gast)


Lesenswert?

Peter D. schrieb:
> pin 22 = u1a;
> pin 21 = u1b;
> pin 20 = u6b;
>
> u1a.d = A;
> u1a.ck = B;
> u6b.d = D;
> u6b.ck = B;
> u7a = !(u6b & (u1a $ A));
> u1b = u1b & u7a
>     # !C;
> D = u1b & (!C # !u1a);

Hier habe ich aber auch die selben Fehler:
intermediate var not assigned an expression: "variable"

von Johann Klammer (Gast)


Lesenswert?

in Devhelp.pdf:
1
%V750
2
V750 Architecture
3
Mnemonic: V750
4
PLCC Mnemonic: YES (V750LCC)
5
DIP Pin Count: 24
6
Total Product Terms: 171
7
Extensions: D AR CK OE SP DFB IO

die koennen nur sync preset. ist es das was du willst?
dann muss U1B wenigstens noch eine clock haben...
sonst ein ATF1502 5v version. Die koennen beides...
Wird aber problematisch, wenn beide (AR,AS) gesetzt sind...
1
Name      Encoder;
2
Partno    ATF750;
3
Date      August 2016;
4
Revision  01;
5
Designer  ich;
6
Company   xx;
7
Assembly  Encoder;
8
Location  xxx;
9
Device    v750c;
10
11
/* *************** INPUT PINS *********************/
12
pin [2,3,4] = [A,B,Z]; 
13
14
/* *************** OUTPUT PINS *********************/
15
pin [17,18,19,20,21,22,23] = [U3A,U7A,U5A,U1B,U6B,U1A,C]; 
16
/* pinnode [34,44,31] = [O23Q1,O23Q0,O20Q1];  */
17
18
19
U1A.d = A;
20
U1A.ck = !B;
21
22
U6B.d = C;
23
U6B.ck = !B;
24
25
U5A = A $ U1A;
26
U7A = !(U5A & U6B);
27
U3A = !Z # !A;
28
29
U1B.d = U1B;
30
U1B.ck = !B;
31
U1B.sp = Z;
32
U1B.ar = !U7A;
33
34
C = U3A & U1B;
cupl -j asdf.pld
compiliert (mit warnung)

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

(C)PLD schrieb:
> Hier habe ich aber auch die selben Fehler:

Also bei mir compilierts. Die 2 Warnungen kann man ignorieren.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die zwei Flipflops, ein RS-FF und fünf Gatter sollten aber in einen 
22V10 noch reinpassen, dafür braucht es keinen Exoten.
In der Art gab es noch den GAL6001 und GAL6002, also DIL-24 schmal mit 
20 FF statt der üblichen 10.

von (C)PLD (Gast)


Lesenswert?

Peter D. schrieb:
> Also bei mir compilierts. Die 2 Warnungen kann man ignorieren.

ja dein Code kann ich jetzt auch kompilieren, jed File wird auch 
kompiliert...

Was ich aber nicht verstehen, warum bekomme ich hier eine Warnung, und 
kann kein jed-File erstellen:
intermediate var not assigned an expression: U1A_1Q
1
Device    v750c;
2
3
$include TTL.M
4
5
/* *************** INPUT PINS *********************/
6
pin 2 = A; 
7
pin 3 = B; 
8
pin 4 = Z; 
9
10
/* *************** OUTPUT PINS *********************/
11
pin 17 = C;
12
 
13
14
TTLSN7474( NC, A, B, NC, U1A_1Q, U1A_n1Q, GND, NC, U6B_1Q, B, C, NC, NC, VCC );
15
TTLSN7486( A, U1A_1Q, U5A_OUT, NC, NC, NC, GND, NC, NC, NC, NC, NC, NC, VCC );
16
TTLSN7474( NC, NC, NC, NC, NC, NC, GND, NC, NC, NC, NC, NC, NC, VCC );
17
18
19
TTL.M
20
$MACRO TTLSN7474 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14
21
P5.d = P2;
22
P5.ck = !P3;
23
P5.ar = !P1;
24
P5.ap = !P4;
25
P6 = !P2;
26
P9.d = P12;
27
P9.ck = !P11;
28
P9.ar = !P13;
29
P9.ap = !P10;
30
P8 = !P12;
31
$MEND
32
33
$MACRO TTLSN7486 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14
34
P3 = P2 $ P1;
35
P6 = P5 $ P4;
36
P8 = P9 $ P10;
37
P11 = P12 $ P13;
38
$MEND

von Johann Klammer (Gast)


Lesenswert?

Weil der U1A_1Q in der luft haengt?

von Peter D. (peda)


Lesenswert?

Du mußt einem D-FF einen Pin oder Pinnode zuweisen.
Ich glaub nicht, daß das mit ar und ap funktioniert.

von (C)PLD (Gast)


Lesenswert?

Peter D. schrieb:
> Ich glaub nicht, daß das mit ar und ap funktioniert.
Hab ich auch festgestellt...

ich habe jetzt RS-FF mit 2 Nands realisiert (wie du vorgeschlagenen 
hast), habe aber trotzdem was anderes raus:
1
/* *************** INPUT PINS *********************/
2
pin 2 = A; 
3
pin 3 = B; 
4
pin 4 = Z; 
5
6
/* *************** OUTPUT PINS *********************/
7
pin 17 = C;
8
pin 18 = U3A;
9
pin 19 = U7A;
10
pin 20 = U5A;
11
pin 21 = U8A;
12
pin 22 = U6B;
13
pin 23 = U1A; 
14
15
U1A.d = A;
16
U1A.ck = !B;
17
18
U6B.d = C;
19
U6B.ck = !B;
20
21
U5A = A $ U1A;
22
U7A = !(U5A & U6B);
23
U3A = !Z # !A;
24
25
U8A = U7A & U8A # !Z; 
26
27
C = U3A & U8A;

muß ich die CK nicht am Anfang Invertieren:
U1A.ck = !B;
U6B.ck = !B;

von Peter D. (peda)


Lesenswert?

(C)PLD schrieb:
> ich habe jetzt RS-FF mit 2 Nands realisiert

Da nimmt man besser einen Logikpin mit Rückführung:
1
RSFF_OUT = PRESET             /* set, if PRESET = 1 */
2
         # RSFF_OUT & !RESET; /* hold until RESET = 1 */

von (C)PLD (Gast)


Lesenswert?

Wollte nur kurz Feedback geben, es geht jetzt,hab jetzt noch ein wenig 
optimiert:
1
Device    v750c;
2
3
4
5
/* *************** INPUT PINS *********************/
6
pin 2 = A; 
7
pin 3 = B; 
8
pin 4 = Z; 
9
10
/* *************** OUTPUT PINS *********************/
11
pin 17 = C;
12
pin 20 = U8A;
13
pin 19 = U6B;
14
pin 18 = U1A; 
15
16
U1A.d = A;
17
U1A.ck = B;
18
19
U6B.d = C;
20
U6B.ck = B;
21
22
U8A = !(!Z & !(U8A.io & !((A $ U1A.io) & U6B.io))); 
23
24
C = (!Z # !U1A.io) & U8A.io;

Eine Frage hätte ich aber noch, kann ich damit noch 1-2 Counter 
realisieren?!
delay = ca 200ms und eine delay von ca 1ms?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Dazu müsste erst mal eine Taktfrequenz existieren, 2 oder 4 kHz wären 
für die 1ms richtig, die 200ms dann durch Teilung, Faktor 200 sind 8 
Teilerstufen, also 8 Flipflops

von Progger (Gast)


Lesenswert?


von (C)PLD (Gast)


Lesenswert?

Christoph K. schrieb:
> Dazu müsste erst mal eine Taktfrequenz existieren, 2 oder 4 kHz wären
> für die 1ms richtig, die 200ms dann durch Teilung, Faktor 200 sind 8
> Teilerstufen, also 8 Flipflops

okay Danke, dann mach ich das mit einem Mikrocontroller (eh vorhanden), 
bin dann flexibler ;-)
delay_ms(1);
delay_ms(200);

:-)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>uiuiui!
Samson aus der Sesamstrasse?

Funktioniert eigentlich der Texteditor in Wincupl? Ich habe noch in 
Erinnerung, dass der beim Speichern zuverlässig abstürzte. Man musste 
Wordpad oder ähnliche Bordmittel benutzen.

von (C)PLD (Gast)


Lesenswert?

Christoph K. schrieb:
>>uiuiui!
> Samson aus der Sesamstrasse?
>
> Funktioniert eigentlich der Texteditor in Wincupl? Ich habe noch in
> Erinnerung, dass der beim Speichern zuverlässig abstürzte. Man musste
> Wordpad oder ähnliche Bordmittel benutzen.

Ja gibt immer noch Probleme, hab WIN7 64Bit, passiert folgendes:
stürzt zwar nicht ab, aber kann ab und zu nicht gespeichert werden, 
kommt komische Meldung.

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.