Dekoder adresowy na EPROM

Dyskusje ogólne na temat "cyfrówki" czyli wszystko o TTL/CMOS, językach VHDL i VERILOG, bramkach, rejestrach, przerzutnikach... Dobre miejsce na pytania odnośnie uniwersalnych programatorów (np. Willem) a także podłączania własnych peryferiów do komputera PC.
ODPOWIEDZ
Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Dekoder adresowy na EPROM

Post autor: mr_x » 21 gru 2010, 3:21

Długo zastanawiałem się, jak w warunkach amatorskich, bez dostępu do programowalnych układów typu GAL, PAL i innych, wykonać pełny dekoder adresowy. Myślałem o podziale adresu na obszary (banki), ale nawet wielokrotny podział (np. na 8 części) powoduje, że i tak tę część trzeba dalej dekodować. Wykonanie dobrego dekodera, przede wszystkim o pełnym dekodowaniu, z użyciem tradycyjnych układów cyfrowych spowodowałoby, że dekoder zajmowałby wielokrotnie więcej części i miejsca od samego systemu mikroprocesorowego.
Z tego względu wymyśliłem, że najlepszy będzie odpowiednio zaprogramowany EPROM. Do pełnego dekodowania w systemie z 8051 należy użyć pamięci o pojemności 64kB (27C512), by uzyskać możliwe wszystkie kombinacje adresu. W podstawowej wersji mamy do dyspozycji 8 wyjść, więc tyle układów można podłączyć, ewentualnie można użyć dodatkowo dekodera 1 z n. Oczywiście pamiętam o sumie logicznej takiego wyjścia z sygnałami /WR i /RD.
Co myślicie o moim dekoderze? W zasadzie nie pytam, jak to zrobić, bo z grubsza mam już koncepcję, ciekawi mnie jedynie, czy ktoś budował już coś podobnego?

keruseykaryu

Post autor: keruseykaryu » 21 gru 2010, 10:29

Co myślicie o moim dekoderze? W zasadzie nie pytam, jak to zrobić, bo z grubsza mam już koncepcję, ciekawi mnie jedynie, czy ktoś budował już coś podobnego?
A tajmingi uwzględniłeś takiego EPROMA?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 21 gru 2010, 13:34

Można, to nawet najstarszy znany sposób, stosowany także w kartach do C64, aczkolwiek nie musisz mieć koniecznie pamięci 64KB, wystarczy mniejsza + 74138.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 21 gru 2010, 18:26

Wiem, ale chodzi o ogólną zasadę budowy tego.

[ Dodano: 2010-12-21, 18:27 ]
keruseykaryu pisze:
Co myślicie o moim dekoderze? W zasadzie nie pytam, jak to zrobić, bo z grubsza mam już koncepcję, ciekawi mnie jedynie, czy ktoś budował już coś podobnego?
A tajmingi uwzględniłeś takiego EPROMA?
Owszem, dla procka taktowanego zegarem 12MHz nie powinno być problemu, bo 8051 dzieli i tak ten sygnał wewnętrznie.

Zresztą w obecnym systemie z AVT-2250 już jest EPROM na program i jeżeli on daje radę, ten na dekoder również da radę, bo oba będą działać z taką samą częstotliwością i opóźnieniami.
Ostatnio zmieniony 21 gru 2010, 18:31 przez mr_x, łącznie zmieniany 2 razy.

keruseykaryu

Post autor: keruseykaryu » 21 gru 2010, 18:30

Zresztą w obecnym systemie z AVT-2250 już jest EPROM na program i jeżeli on daje radę, ten na dekoder również da radę, bo oba będą działać z taką samą częstotliwością i opóźnieniami.
Nie jest to do końca prawda, ale niech Ci będzie.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 21 gru 2010, 18:32

Dlaczego nie? Dekoder byłby podłączony równolegle do linii adresowej EPROMa z programem.

keruseykaryu

Post autor: keruseykaryu » 21 gru 2010, 21:09

Dekoder adresowy ma na tyle wyprzedzać odczyt, co by logika pamięci miała stany stabilne podczas operacji odczyt/zapis. Dlatego GALe mają po 15ns i mniej, a pamięci po kilkadziesiąt ns.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 13 lis 2011, 20:59

Muszę Was pozytywnie zaskoczyć :)
Przed chwilą zbudowałem dekoder adresowy na pamięci EEPROM AT28C256 i działa wyśmienicie, nie ma problemów z opóźnieniami. Podłączyłem go w następujący sposób: linie A0...A14 do szyny adresowej, A15 do linii /CE (dzięki temu "dekoder" jest aktywny tylko pod pierwszą połową przestrzeni adresowej, co jest wymagane, bo EEPROM ma 32kB), linię /OE do masy (ciągły odczyt), a linię /WE do plusa, bo zapis nie jest tutaj wymagany. Linie IO0...7 są wyjściami do aktywacji zewnętrznych układów (podłączonych do ich wejść /CS). Należy tylko pamiętać, że jeśli wejście /CS sterowanego układu nie ma wejścia podciągniętego wewnętrznie do plusa, trzeba dodać rezystor 10kΩ między wyjście EEPROM a plus zasilania (bo dla adresów 8000h...0FFFFh pamięć ma wyjścia w stanie wysokiej impedancji, co może "niechcący" aktywować układ w obszarze tych adresów). Nie muszę wspominać, że trzeba zaprogramować (wyzerować bity) pod takimi adresami, pod jakimi mają pracować nasze układy.

Rozwiązanie jest bardzo proste i skuteczne, bo dekoder adresowy (adresowanie całkowite, przestrzeń dla dekodowania 0h...7FFFh) składa się tylko z jednego układu scalonego. Nie trzeba bawić się w GAL'e ani układy tradycyjne TTL.

Dodam przy okazji, że podłączone to mam do AT89S8253 pracującego z kwarcem ~22MHz oraz z trybem X2 (brak podziału przez 2, co powoduje, że układ pracuje 2 razy szybciej od tak samo taktowanego 8051).

Nie wiem, czy to samo uda się ze zwykłym EPROM, ale podejrzewam, że też powinno działać. Dowód na to znalazłem kiedyś w sieci: http://ep.com.pl/files/6110.pdf

ODPOWIEDZ