Forum: FPGA, VHDL & Co. GAL22V10 Problem mit Signallaufzeit


von Flatus Silentius (Gast)


Lesenswert?

Ich will einen Encoder bauen, der mir 16 Eingangssignale (D0-D15, 
One-Hot, low-aktiv) in 4 bit (Q0-Q3) kodiert. Das klappt auch 
einwandfrei mit folgenden Gleichungen:

1
CHIP ENC16TO4 GAL22V10
2
3
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 GND
4
D11 D12 D13 D14 D15 Q0 Q1 Q2 Q3 LE NC VCC
5
6
EQUATIONS
7
8
/Q0 = D1 * D3 * D5 * D7 * D9 * D11 * D13 * D15
9
/Q1 = D2 * D3 * D6 * D7 * D10 * D11 * D14 * D15
10
/Q2 = D4 * D5 * D6 * D7 * D12 * D13 * D14 * D15
11
/Q3 = D8 * D9 * D10 * D11 * D12 * D13 * D14 * D15
12
13
LE = D0 * D1 * D2 * D3 * D4 * D5 * D6 * D7 * D8 * D9 * D10 * D11 * D12 * D13 * D14 * D15

Der Wert soll allerdings in einem Latch gespeichert werden. Dazu habe 
ich den LE Ausgang, der low geht falls ein Input anliegt. Das klappt 
sogar bei fast allen Pins, nur bei D11, D13 und D15 speichert das Latch 
nicht den korrekten Binärwert sonden 0 bzw. 2.

Ich vermute mal das liegt daran, dass bei diesen Pins das LE Signal 
intern langsamer läuft und somit zu spät high geht, wenn Q0-Q3 schon 
ungültige Werte haben.

Hat jemand einen Tipp?

von Helmut L. (helmi1)


Lesenswert?

Flatus Silentius schrieb:
> Der Wert soll allerdings in einem Latch gespeichert werden.

Latch oder Flankengesteuertes Register?

Was du da machst ist ohnehin vom Zufall abhängig wie du schon selber 
bemerkt hast. Da dürfte sich jeder Baustein anders verhalten. Wenn du 
schon sowas machst solltes du den Übernahmeimpuls dementsprechend 
verzögern.

von Lattice User (Gast)


Lesenswert?

1. Latch gegen flankengetriggertes FF ersetzen.
2. LE Signal nochmal verzögern, z.b nochmal durch den GAL schiecken.
3. Dafür Sorge tragen dass immer nur ein Dx aktiv ist.
4. Dafür Sorge tragen dass der Abstand zwischen 2 Dx Pulsen immer 
mindestens 2 mal die Durchlaufzeit des GALS plus die Haltezeit des FF 
ist.

von P. K. (pek)


Lesenswert?

Ist schon lange her mit den GAL's.

Würde aber behaupten, dass Du keine (internen) Timing-Probleme haben 
solltest, wenn Du die im Datenblatt angegebenen Timings (Setup, Hold, 
und Propagation-Delay) an den GAL-Pins einhältst.

von Flatus Silentius (Gast)


Lesenswert?

Das LE Signal geht an ein TIL311 Display:

LATCH STROBE INPUT (5) When low, the data in the latches follow the data 
on the latch data inputs. When high, the data in the latches will not 
change. If the display is blanked and then restored while the enable 
input is high, the previous character will again be displayed.

Lattice User schrieb:
> 1. Latch gegen flankengetriggertes FF ersetzen.

Geht nicht, da das Latch im Display ist, s.o.

> 2. LE Signal nochmal verzögern, z.b nochmal durch den GAL schiecken.

Wie macht man das? Einfach mit einer weiteren Gleichung, also so:

LE2 = LE

Oder die Gleichung für LE invertieren und dann

LE2 = /LE

?

Aber ist das Problem nicht, dass das LE Signal high geht NACHDEM die 
Daten ungültig sind? Solange die Taste gedrückt ist, wird ja der 
korrekte Wert angezeigt. Erst wenn ich sie loslasse zeigt das Display 
dann den falschen Wert.

> 3. Dafür Sorge tragen dass immer nur ein Dx aktiv ist.

Ist es immer, D0-15 sind an Tasten angeschlossen, es wird immer nur eine 
gedrückt.

> 4. Dafür Sorge tragen dass der Abstand zwischen 2 Dx Pulsen immer
> mindestens 2 mal die Durchlaufzeit des GALS plus die Haltezeit des FF
> ist.

Leider habe ich nur das Display-interne Latch ...

Peter K. schrieb:
> Würde aber behaupten, dass Du keine (internen) Timing-Probleme haben
> solltest, wenn Du die im Datenblatt angegebenen Timings (Setup, Hold,
> und Propagation-Delay) an den GAL-Pins einhältst.

Du meinst an D0-D15? Wie gesagt, es ist eine Tastatur angeschlossen ...

von Lattice User (Gast)


Lesenswert?

Flatus Silentius schrieb:
> Lattice User schrieb:
>> 1. Latch gegen flankengetriggertes FF ersetzen.
>
> Geht nicht, da das Latch im Display ist, s.o.

Schlecht.

Eventuell die FF im GAL dazwischen schalten.

Sind ja noch Logikterme frei, eine Flankenerkennung für LE, und nur ein 
kurzer Puls ans Display.

Allerdings Tasten prellen, muss also untersucht werden ob das stört.

von P. K. (pek)


Lesenswert?

Flatus Silentius schrieb:
> Du meinst an D0-D15? Wie gesagt, es ist eine Tastatur angeschlossen ...

Das hast Du soeben das erste Mal erwähnt. Macht aber die Sache auch 
nicht einfacher, zumal die Tastatur auch noch entprellt werden sollte.

Und wenn Du die Eingangs-Timing-Requirements nicht erfüllen kannst, 
darfst Du auch am Ausgang nichts perfektes erwarten.

von Flatus Silentius (Gast)


Lesenswert?

Lattice User schrieb:
> Eventuell die FF im GAL dazwischen schalten.
>
> Sind ja noch Logikterme frei, eine Flankenerkennung für LE, und nur ein
> kurzer Puls ans Display.

Welche Ausgänge soll ich dann zu FF machen? Sorry, ist mein erster 
Kontakt mit programmierbarer Logik. Wenn ich den registered Modus 
benutze, dann muss ja erstmal an Pin 1 ein Clocksignal, was nehme ich 
da?

Peter K. schrieb:
> Das hast Du soeben das erste Mal erwähnt. Macht aber die Sache auch
> nicht einfacher, zumal die Tastatur auch noch entprellt werden sollte.
>
> Und wenn Du die Eingangs-Timing-Requirements nicht erfüllen kannst,
> darfst Du auch am Ausgang nichts perfektes erwarten.

Welche Requirements meinst du konkret? Ich hab mal das Datenblatt 
angeschaut und konnte da nicht wirklich was finden was überhaupt die 
Eingangssignale beschreibt, ausser vielleicht minimum clock pulse, 2ns, 
aber so schnell ist kein Taster.

von Helmut L. (helmi1)


Lesenswert?

Flatus Silentius schrieb:
> Welche Ausgänge soll ich dann zu FF machen? Sorry, ist mein erster
> Kontakt mit programmierbarer Logik. Wenn ich den registered Modus
> benutze, dann muss ja erstmal an Pin 1 ein Clocksignal, was nehme ich
> da?

Dein Zeitverzögertes LE Signal. Das darf erst dann das Register setzen 
wenn alle Übergänge beendet sind.

von Flatus Silentius (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Dein Zeitverzögertes LE Signal. Das darf erst dann das Register setzen
> wenn alle Übergänge beendet sind.

Hmm. Aber wo soll dann das verzögerte LE Signal herkommen?

Ich hatte folgende Idee:
1
CHIP ENC16TO4 GAL22V10
2
3
CLK D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 GND
4
D10 D11 D12 D13 D14 D15 Q0 Q1 Q2 Q3 LE VCC
5
6
EQUATIONS
7
8
/Q0 := D1 * D3 * D5 * D7 * D9 * D11 * D13 * D15
9
/Q1 := D2 * D3 * D6 * D7 * D10 * D11 * D14 * D15
10
/Q2 := D4 * D5 * D6 * D7 * D12 * D13 * D14 * D15
11
/Q3 := D8 * D9 * D10 * D11 * D12 * D13 * D14 * D15
12
13
/LE = D0 * D1 * D2 * D3 * D4 * D5 * D6 * D7 * D8 * D9 * D10 * D11 * D12 * D13 * D14 * D15

Damit wird die Latchfunktion vom GAL übernommen und ich kann den LE Pin 
am TIL311 einfach auf GND legen. Pin 1 und 23 am GAL werden verbunden. 
Damit müsste doch das kombinatorische LE Signal genügend verzögert am 
CLK Pin ankommen, oder? Dann werden Q0-Q3 gelatcht und die Daten bleiben 
erhalten bis das nächste mal einer der Eingänge low wird. Was meint ihr?

von Lattice User (Gast)


Lesenswert?

Flatus Silentius schrieb:
> Damit wird die Latchfunktion vom GAL übernommen und ich kann den LE Pin
> am TIL311 einfach auf GND legen. Pin 1 und 23 am GAL werden verbunden.
> Damit müsste doch das kombinatorische LE Signal genügend verzögert am
> CLK Pin ankommen, oder? Dann werden Q0-Q3 gelatcht und die Daten bleiben
> erhalten bis das nächste mal einer der Eingänge low wird. Was meint ihr?

Soweit OK,


Ich habe mir das Datenblatt angeschaut, du kannst beim GAL22V10 eine der 
Makrozellen die zu einem deiner Inputs gehöhrt als internes Signal 
zurpckfüheren.
D.h. Dein LE intern, und LE1 = LE auf den Pin legen.

Frag mich aber nicht, wie du das deinem Tool (PALASM?) beibringst. Ist 
zu lange her.

von Lattice User (Gast)


Lesenswert?

Kleiner Nachtrag

Im Prinzip hast du einen kleinen Delay da dein LE->CLK über einen 
Ausgangsbuffer get, während die Dn -> FF Input das nicht tun. Ob das 
ausreicht muss man mit Hilfe des Datenblattes klären.

von Flatus Silentius (Gast)


Lesenswert?

Ok, Danke, dann werd ich das mal so testen (hab leider inzwischen schon 
wieder das Breadboard umgebaut). Ich benutze übrigens EQN2JED von 
National aus dem OPALjr. Paket (unter DOSBox).

Das mit dem internen Rückführen auf den Clock Pin scheint nicht zu 
gehen. Ich kann zwar Q0.C = LE etc. definieren, und LE wird dann unter 
"Feedback Pins" aufgelistet, allerdings kommt dann "LE: Pin 23 is not a 
dedicated clock pin."

Desweiteren hab ich gerade festgestellt, dass man für Signale noch ".PIN 
(Post-buffer Feedback)" und ".FB (Pre-buffer Feedback)" benutzen kann. 
Evtl. kann ich damit sogar die ursprüngliche kombinatorische Version zum 
Laufen bringen.

von Lattice User (Gast)


Lesenswert?

Flatus Silentius schrieb:
> Das mit dem internen Rückführen auf den Clock Pin scheint nicht zu
> gehen. Ich kann zwar Q0.C = LE etc. definieren, und LE wird dann unter
> "Feedback Pins" aufgelistet, allerdings kommt dann "LE: Pin 23 is not a
> dedicated clock pin."

Das steht auch im Datenblatt, d.h. man muss extern zurückführen, was 
aber in deinem Fall kein Nachteil ist, bringt ja etwas Delay, was auch 
erwünscht ist in diesem Fall.

Flatus Silentius schrieb:
> Desweiteren hab ich gerade festgestellt, dass man für Signale noch ".PIN
> (Post-buffer Feedback)" und ".FB (Pre-buffer Feedback)" benutzen kann.
> Evtl. kann ich damit sogar die ursprüngliche kombinatorische Version zum
> Laufen bringen.

Würde ich nicht, eine Lösung mit FF ist leichter in den Griff zu 
bekommen.

von Steffen H. (avrsteffen)


Lesenswert?

Hallo,

Ich hab hier auch noch ein paar GAL22V10 rumliegen und eventuell irgend 
etwas sinvolles damit anstellen.

Frage: Mit welcher Software (WINDOWS) kann man das Programm 
schreiben/übersetzen und wie und mit was wird dann das .jed in den GAL 
gebrannt?

Hat da LATTICE Diamond was enthalten für GAL's?


Gruß Steffen

von Flatus Silentius (Gast)


Lesenswert?

Als Compiler benutze ich Opal Jr.:

http://www.ee.ryerson.ca:8080/%7Ejkoch/mppv2/zip_files/o.zip

Braucht aber DOSBox, falls du auf nem 64bit Windows bist.

Als Programmer benutze ich den Genius G540 aus China ... so 35 Euro auf 
eBay. Programmiert aber auch EPROMs, EEPROMS, Flash, PICs, AVRs und 
8051er.

Selbstbau wäre wohl möglich, allerdings nur Parallelport und lohnt sich 
für den Preis kaum:

http://elm-chan.org/works/pgal/report_e.html

von Lattice User (Gast)


Lesenswert?

Steffen H. schrieb:
> Hat da LATTICE Diamond was enthalten für GAL's?

Nein.

ISP Lever Classic
http://www.latticesemi.com/products/designsoftware/ispleverclassic/index.cfm

von Flatus Silentius (Gast)


Lesenswert?

Flatus Silentius schrieb:
> CHIP ENC16TO4 GAL22V10
>
> CLK D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 GND
> D10 D11 D12 D13 D14 D15 Q0 Q1 Q2 Q3 LE VCC
>
> EQUATIONS
>
> /Q0 := D1  D3  D5  D7  D9  D11  D13 * D15
> /Q1 := D2  D3  D6  D7  D10  D11  D14 * D15
> /Q2 := D4  D5  D6  D7  D12  D13  D14 * D15
> /Q3 := D8  D9  D10  D11  D12  D13  D14 * D15
>
> /LE = D0  D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  
D14 * D15

So, gerade noch das GAL gebrannt und getestet, und siehe da, dieser Code 
funktioniert perfekt.

Prellen ist übrigens kein Problem, weil ja immer nur der gleiche Zustand 
mit sich selbst überschrieben wird. Optisch sieht man nix.

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.