Forum: FPGA, VHDL & Co. GAL16V8D Würfel Programmieren


von Weble (Gast)


Lesenswert?

Hallo,

ich wurde vor einiger Zeit mal gefragt, ob ich einen GAL16V8D 
progammieren kann.

Und zwar einen art Zähler der von 1-6 zählt und auf knopfdruck dann die 
aktuelle zahl anhand von 7 LED's ausspuckt.
Und zwar in form eines Würfels.

Naja hab gsacht ich kanns mal probieren, aber ich bekomms einfach nicht 
hin.

Meine Fragen an euch:

Wie programmiere ich diesen GAL?
Ist so ein zähler überhaupt möglich?

Hat jemand vllt. einige Codebeispiele, oder sogar genau so eine 
schaltung? ;)
Was ich zur verfügng hab währe ein Taster, 7 LED's und den µC. mehr soll 
auch angeblich nicht benötigt werden.

MfG
Weble

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Für Würfel ist ein 3Bit-Johnson-Zähler  mit anschließendem Decoder 
geeignet, der hat 6 erlaubte Zustände. Für die LEDs sind 4 Ausgänge 
nötig, also gesamt 7 Register.
Vielleicht läßt es sich noch auf 6 oder 5 reduzieren, wenn man die 
state-machine passend austüftelt, dass ein Zählerbit gleichzeitig eine 
LED ansteuern kann.

Anordnung der vier LED-Gruppen:
3   1
2 0 2
1   3

Augen/Led-Gruppe 3/2/1/0:
1: 0001
2: 0010
3: 0011
4: 1010
5: 1101
6: 1110
die restlichen zehn sind verbotene Zustände.
Gruppe 3 und 0 sind jeweils halbe/halbe verteilt, die könnte man in der 
Statemachine direkt zählen. Die Zählreihenfolge ist ja egal.

von Weble (Gast)


Lesenswert?

Danke!

Jetzt nur noch die frage, wie programmiere ich ein 3Bit-Johnson-Zähler, 
wie kann ich z.B. pin 2 als eingang und pin 12 13 14 15 als ausgänge 
definieren?

Ich hatte bisher nur etwas mit dem ATtiny2313 zu tun, und das is wieder 
was ganz anderes ;(

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ein 3Bit-Johnson-Zähler hat dieses Schema:
000
001
011
111
110
100
und wieder 000

das ist ein 3Bit-Schieberegister, das den letzten Ausgang zum seriellen 
Eingang invertiert rückführt.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

aber das Schema für die 4 LED-Gruppen kann man auch direkt als 
statemachine formulieren, vier Register-Ausgänge nehmen nacheinander die 
genannten 6 Zählerstände ein, wenn der Stop-Befehl kommt, muß der Takt 
anhalten oder ein 5.Register repräsentiert den Zustand "angehalten".

von Stephan H. (stephan-)


Lesenswert?

kommt auf Deine Programmierumgebung an.
Du kannst "wenn Du kannst" HDL,VHDL o.ä benutzen.( etwas übertrieben )
Sonst gibt es dafür so genannte "GAL Assembler".
Ich habe früher einen Gal Assembler von MAXON auf dem Amiga benutzt.
Da konnte ich die komplette Logiktabelle eingeben.
Google bringt da einiges. Such mal danach.

von Weble (Gast)


Lesenswert?

Danke!

Nächste fragen ;)

Wie heißen die register ;)
Wie kann ich diese am besten ansprechen?
Gibts sowas wie Interrupts?
Wie mach ich am besten Schleifen ? g

WIe ich das ganze nun verwickliche stelle ich mir so vor:

Ne endlosschleife die den 3Bit-Johnson-Zähler zählt und jeweils imemr 
die 3 register verändert g
und auf knopfdruck wird ein interrupt ausgelöst, der dann den aktuellen 
stand des zählers an die dioden weitergibt

von Dirk (Gast)


Lesenswert?

Ein GAL ist kein Mikroprozessor sondern ein Logikkbaustein.
Da gibt es keine Interrupts und Schleifen sind auch so ohne weiters 
nicht möglich.
Für Dein Vorhaben solltest Du Dir besser einen kleinen Mikrocontroller
besorgen und den so programmieren wie Du das kennst.

Gruß

Dirk

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich hab mal nachgeschaut, Würfel mit TTL-Logik waren ein großes Thema 
(mehrere Seiten) in Elektor 1972, im Sonderheft "platine72", später 
nochmal 1975 mit den dann aufgekommenen CD40xx. Meistens mit Zählern 
7490, 7492 oder CD4022, aber auch eine Schaltung mit 2*2 JK_Flipflops 
7473 und vier Germaniumdioden, die direkt die Bitmuster für die vier 
LED-Gruppen erzeugen. Ich habe das damals nachgebaut, müßte noch 
irgendwo rumliegen.

von Nitram L. (nitram)


Lesenswert?

bin auf der Seite: http://www.harald-sattler.de/ über das gleiche 
Problem gestolpert....


*IDENTIFICATION
 Wuerfel im PAL                                       Version 2.0
 H.Sattler


*COMMENT
 Kombination von STATEMACHINE und COMBINATORIAL.

 Im Block STATE laeuft (mit CLK auf Pin 1) eine Statemachine, die
 einen synchronen Zaehler bis 6 bildet.

 Im Block COM ist durch Rueckkopplung ein Oszillator realisiert
 der sich mit dem Eingang RUN^ starten laesst.

 Ist RUN^ low, laeuft der Oszillator, sein Ausgangssignal wird
 auf Pin 1 gefuehrt und taktet so die Statemachine im Block STATE.


Letzte Aenderungen:
-------------------
-> 05.05.89, Sattler
   Blockstruktur eingearbeitet

*X-Names
 RUN^         ,          ! Enable fuer Oszillator
 OSZI         ;          ! Rueckkopplung fuer Oszillator

*Y-NAMES
 OSZI         ;          ! Oszillator-Ausgang

*Z-NAMES
 LED[4..1]    ;          ! States fuer FSM und Ausgaenge

*LINK
RUN^      = OSZI:RUN^                    ; Eingaenge
OSZI      = OSZI:OSZI     , CNT:OSZI     ;

LED[4..1] =                 CNT:LED[4..1]; Ausgaenge


;===============================================================
@BLOCK = CNT

*X-NAMES
 OSZI;

*Z-NAMES
 LED[4..1]    ;          ! States fuer FSM und Ausgaenge

*Z-VALUES
 S1 = 1110;    Zaehlerstand 1
 S2 = 1101;    Zaehlerstand 2
 S3 = 1100;    Zaehlerstand 3
 S4 = 1001;    Zaehlerstand 4
 S5 = 1000;    Zaehlerstand 5
 S6 = 0001;    Zaehlerstand 6
 S7 = 0000;    nach Power On Reset


*FLOW-TABLE
 RELEVANT = OSZI;

 S[1..5] , X - , F[2..6];
 S6      , X - , F1;

 S7      , X - , F1; nach Power On Reset

*STATE-ASSIGNMENT
 Z-VALUES

@ENDBLOCK = CNT
;===============================================================
;===============================================================
@BLOCK = OSZI

*X-NAMES
 RUN^,OSZI;
*Y-NAMES
 OSZI;

*BOOLEAN-EQUATIONS

 OSZI = /OSZI & /RUN^;    Funktion "GATED OSZILLATOR"

@ENDBLOCK = OSZI
;===============================================================

*RUN-CONTROL
 LISTING = EQUATIONS, PINOUT;
 PROGFORMAT = JEDEC;

*PAL-TYPE
 TYPE = GAL16V8_R;

*PINS
 CLK         =  1,
 RUN^        =  2,
                      OSZI       = 18,


                      LED1       = 15,
                      LED2       = 14,
                      LED3       = 13,
                      LED4       = 12;


*END
_


von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die PAL-Beschreibungssprache LOGIC kannte ich nicht, die Beschreibung 
der Statemachine ist nicht gerade selbsterklärend.
Für ein ordentliches Design fehlen mir noch die unzulässigen Zustände, 
immerhin sind von 16 möglichen nur 6 benutzt, ein Resetzustand "alle 
Null" ist noch berücksichtigt, aber die restlichen 9 fehlen.

von bastian (Gast)


Lesenswert?

ach is doch alles kacke

von bastian (Gast)


Lesenswert?

wenn:

Z-VALUES
 S1 = 1110;    Zaehlerstand 1
 S2 = 1101;    Zaehlerstand 2
 S3 = 1100;    Zaehlerstand 3
 S4 = 1001;    Zaehlerstand 4
 S5 = 1000;    Zaehlerstand 5
 S6 = 0001;    Zaehlerstand 6

kann der würfel nicht funktionieren, weil:

S[1..5] , X - , F[2..6]; = ungleich S6      , X - Z, F1;

Du musst

Z-VALUES
 S1 = 1110;    Zaehlerstand 1
 S2 = 1101;    Zaehlerstand 2
 S3 = 1100;    Zaehlerstand 3
 S4 = 1001;    Zaehlerstand 4
 S5 = 0020;    Zaehlerstand 5
 S6 = 0001;    Zaehlerstand 6


Viele Grüße

der Phil

von Unbekannt (Gast)


Lesenswert?

Hi ich hab auch ma paar fragen zu einem GAL16V8D
ich mache gerade eine Ausbildung und wir sollen etwas über dieses GAL 
Element herausfinden ich hab aber keinen plan davon T.T kann mir jemand 
helfen???

von Gast (Gast)


Lesenswert?

a) wozu die Leichenfledderei an dem alten Thread?
b) google bzw. Datenblatt dürfte hilfreich sein

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.