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:
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?
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.
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.
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.
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 ...
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.
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.
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.
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.
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:
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?
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.
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.
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.
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.
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