1 Ostatnio edytowany przez krzysiobal (2023-08-22 16:23:44)

Mam w naprawie Atari 65XE. Po przeanalizowaiu każdego scalaka doszedłem do wniosku, że:
* Dekoder PAL jest uszkodzony  - wymieniłem na GALa zaprogramowanego odpowiednim wsadem (swoją drogą ciekawe, bo już raz trafiłem na taką usterkę)
* Układ FREDDIe jest uszkodzony - tutaj też ciekawe, że tylko ten jeden układ jest w podstawce (przewidzieli na etapie produkcji, że często padają?)

Reszta sprawna, zamieniając na sprawnego FREDDYego z innej konsoli - atari ożyło. Jednak tego scalaka widzę nie da się dostać, więc postanowiłem go czymś zastąpić.
Widzę są rożne projekty wymiany go albo na wersję opartą o CPLD:
https://obrazki.elektroda.pl/1024781500_1692716466_thumb.jpg https://obrazki.elektroda.pl/8718322500_1692716472_thumb.jpg

Albo na rekonstrukcję na układach 74XX:
https://obrazki.elektroda.pl/5530355000_1692716499_thumb.jpg

Jako że mam trochę doświaczenia z CPLD to postanowiłęm wykorzystać układ EPM3064 których mam na pęczki. Trafiłem na strone opisującą zachowanie tego scalaka:
https://hardware.atari8.info/freddie.php

Więc zaprojektowałem sobie dedykowaną plytkę drukowaną, wytrafiłem, polutowałem i wbudowałem go do konsoli (ponieważ EPM3064 nie ma wystarczająco dużo pinów, aby wszystko obsłużyć, do multipleksacji A0..A7 i A8..A15 użyłem dwóch buforów 74LVC245
https://obrazki.elektroda.pl/8056203400_1692716684_thumb.jpg https://obrazki.elektroda.pl/6884275200_1692716686_thumb.jpg
https://obrazki.elektroda.pl/7372519900_1692716793_thumb.jpg

Oprogramowałem wsadem z powyższej strony. Jakież było moje zdziwienie, gdy konsola nie dała żadnych oznak życia, nie pojawil się nawet sygnał OSC ani PHI2.

Szczerze mowiąc, troche nie rozumiem czemu ten licznik liczy w kolejności:
0,1,3,2,6,7,5,4
oraz dlaczego korzysta z sygnału PHI2 w funkcji przejścia. Widać winowajcą okazała się część z PHI2 w tym kodzie:

fcount(0) <=
    (not fcount(2) and not fcount(1) and not phi2)
    or     (fcount(2) and     fcount(1) and     phi2);

fcount(1) <=
    (not fcount(2) and  fcount(0) and not phi2)
    or (not fcount(2) and  fcount(1) and not fcount(0) and not phi2)
    or     (fcount(2) and  fcount(1) and not fcount(0) and     phi2);

fcount(2) <=
    (not fcount(2) and  fcount(1) and not fcount(0) and not phi2)
    or     (fcount(2) and  fcount(1) and not fcount(0) and     phi2)
    or     (fcount(2) and  fcount(0) and phi2);

Po wywaleniu "phi2" z funkcji logicznej, wreszcie pojawiło się i OSC i PHI2:
https://obrazki.elektroda.pl/6120029800_1692717045_thumb.jpg

Niestety konsola nadal nie działa prawidłowo - albo na ekranie pojawiają sie jakieś śmieci, albo ekran jest czarny, raz na kilkanaście uruchomień pojawia sie niebieski ekran z READY jak w działającej konsoli, jednak kolory wyraźnie nie były stabilne.

Z tego co widzę wg schematu tego atari, CLK_IN oraz CLK_OUT we freddy-m to po prostu negator, który służy do wprowadzenia kwarcu 14 MHZ w drgania. Ponieważ sygnał zegarowy byl mocno koślawy, pomyślałem że negator w CPLD słabo sobie radzi w tej roli. Podłączyłem więc zamiast tego układ 74HCU04 (dedykowany negator do zatosowań zegarowych) i teraz faktycznie, raz na te kilkanaście uruchomień jak pojawi sie ekran z READY to kolory są stabilne, zegar ma ładne zbocza (nie licząc tych overshootów), jednak dlaczego konsola w wiekszości razy po uruchomieniu nie działa?

Czemu w ogóle według tej strony przebiegi powinny być takie (np PHI2 rośnie i opada na rosnącym zboczu OSC)
https://obrazki.elektroda.pl/3968291400_1692717262.gif

a na działającym freddym są takie (rośnie i opada na opadającym zboczu OSC)
https://obrazki.elektroda.pl/5109288500_1692717303.png

czyli takie same jak na mojej CPLDowej protezie.

Ma ktoś DZIAŁAJĄCY model VHDL tego układu bo już mnie krew zalewa. Przeszukałem pól sieci i nic nie znalazłem, jakby to był jakiś top-secret układ.

2 Ostatnio edytowany przez x_angel (2023-08-23 07:34:05)

Hej
Piszesz, że wymieniłeś dekoder PAL - rozumiem, że chodzi o układ MMU zbudowany na układzie PAL16L8 czy coś takiego? Nie o dekoder wizji PAL? :) Ale skoro wymieniłeś i działa, to wiesz o co biega :)
Co do zamiennika Frediego - Simius robi zamienniki na CPLD ale czy podzieli się kodem? Ale tak jak widzisz na fotkach, które wstawiłeś - na tym zielonym oprócz CPLD i czegoś tam jest jeszcze taki mały układzik w okolicy pinów 1 i 2 - pewnie jest to pojedyncza bramka HCU04 czyli Twój trop był słuszny.
A co do liczenia licznika w dziwny sposób - być może to było podyktowane chęcią uproszczenia ścieżek z multiplekserów adresów dla pamięci DRAM.
Podejrzyj sobie jeszcze schemat Atari 800XL bez układu Freddie - tam jest wszystko zrobione na TTL-ach "na piechotę" - może Ci się coś nasunie.

3 Ostatnio edytowany przez _tzok_ (2023-08-24 20:28:39)

Sygnał 14,1875 MHz z oscylatora (lub generatora) kwarcowego wchodzi na pin 2 układu FREDDIE, z pinu 1 wychodzi ten sam, tylko zanegowany przebieg (na potrzeby wariantu z oscylatorem), ponadto z pinu 37 wychodzi przebieg OSC o częstotliwości podzielonej przez 4 (3,55 MHz) - w XL to jest bazowy zegar. Tylko te dwa zegary wychodzą z FREDDIEgo. Na pin 5 FREDDIEgo wchodzi sygnał PHI2 (1,77 MHz), który jest generowany w SALLY z sygnału PHI0, który z kolei powstaje w ANTICu z FPHI0 podzielonego przez 2. Ten z kolei powstaje w GTIA z sygnału OSC z FREDDIEgo.

Z tego co mi wiadomo FREDDIE nie potrzebuje "dla siebie" ani 14,1875 MHz ani 3,55 MHz, potrzebny mu jest jedynie PHI2 (1,77 MHz) z SALLY.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

4 Ostatnio edytowany przez krzysiobal (2023-08-23 12:19:25)

_tzok_ napisał/a:

Z tego co mi wiadomo FREDDIE nie potrzebuje "dla siebie" ani 14,1875 MHz ani 3,55 MHz, potrzebny mu jest jedynie PHI2 (1,77 MHz) z SALLY.

Tego sie właśnie już domyśliłem. Jednak opisy pojawiające sie w sieci są sprzeczne

wg: http://krzysiobal.com/arts/atari65xe/info.htm
(musiałem skopiowac tą stronę na swoj serwer bo oryginalna jak na złość dziś przestała działać)
"wnętrze Freddie'ego to czysty synchroniczny układ, w którym nie ma celowego opóźniania (poprzez zestaw bramek) sygnałów RAS i CAS"

Z kolei: http://krzysiobal.com/arts/atari65xe/freddiei.gif
wyraźnie pokazuje, że na drodze sygnału /RAS  jest zestaw opóźniający.

Ponieważ opóźnień w CPLD nie da się wygenerować, jedynym sposobem jest zliczanie zboczy wejściowego zegara 14.1875MHz,  a cały "cykl" rozpoczyna sie od opadającego zbocza phi2 (bo rosnące jest zbyt pochylone).


Niestety nigdzie dokłądnie nie znalazłem jak te przebiegi maja wyglądać. Jest co prawda ich zrzut w nocie katalogowej freddiego, ale jest on dla mnie niezbyt zrozumiały:
https://obrazki.elektroda.pl/8454728500_1692789290_thumb.jpg

No i odtworzyłem schemat freddyego w wersji na scalakach 74xx:
https://obrazki.elektroda.pl/3562301800_1692789362_thumb.jpg

5

Jesteś pewien tego sprzężenia z PHI2 w generowaniu OSC? Bez OSC nie ma PHI2. OSC jest bazowym zegarem systemu, nie widzę powodu, aby miał być od czegokolwiek zależny. On jest w fazie z zegarem 14M (który nie jest nigdzie wykorzystywany i w XL go w ogóle nie było).

FREDDIE zapewne jest w pełni synchroniczny, ale w XL sygnały RAS i CAS szły przez linię opóźniającą, więc tak też się da odtworzyć tę funkcjonalność FREDDIEgo.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

6 Ostatnio edytowany przez Simius (2023-08-24 20:09:16)

To sprzężenie nie służy generacji przebiegu, tylko synchronizacji licznika. Licznik bez sprzężenia będzie pracował, tylko w fazie zupełnie przypadkowej w stosunku do PHI2.

Ceterum censeo Germaniam esse delendam.

7

Ale PHI2 powstaje z OSC i zależności fazowe między OSC i PHI2 wynikają z tego co się dzieje poza FREDDIEm. Rozumiem, że chodzi tu o okład opóźniający dla CAS, ale zależność fazowa między OSC i PHI2 jest stała, choćby "nie wiem co"... ale możliwe że czegoś nie rozumiem.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

8

Podłączyłęm dziś freddy-ego do testera, którym mogę sterować każdym z pinów z osobna i badać stany. Spędziłem kilka godzin, aby rozgryźć działanie tego scalaka i doszedłem do wielu ciekawych wniosków.

Jak wszystko ogarnę to opiszę, na razie kilka ciekawostek z grubsza:

- OSC to po prostu CLK_IN podzielony przez cztery (zmiana na rosnącym zboczu CLK_IN). Nie ma żadnego sprzężenia z PHI2, nie jest zależny od resetu

- Wewnątrz freddyego nie ma żadnych linii opóźniających, jest to układ sekwencyjny. Każde rosnące (oraz opadające też, co ciekawe) zbocze CLK_IN taktuje ten układ i to własnie ten zegar jest podstawą do opisu jego zachowania (RAS/CAS,MUX, WR).

- Reset jest synchroniczny (badany na zboczu CLK_IN)

- Wszystkie strony podają piny jako:
24=A15, 23=A14, 22=A13, 21=A12, 19=A11, 18=A10, 17=A9, A16=A8

a tak naprawdę, działanie układu pokazuje, żę powinno się je nazwać tak:
24=A15, 23=A8, 22=A14, 21=A13, 19=A12, 18=A11, 17=A10, A16=A9

Dla pamięci RAM nie ma to znaczenia, bo linie adresowe można dowolnie miesząć, ale aby być w zgodzie z tym, że że BA0=A0/A8, BA1=A1/A9, ... itd, należy przyjąć moje oznaczenia jak wyżej.

9

_tzok_ napisał/a:

Ale PHI2 powstaje z OSC i zależności fazowe między OSC i PHI2 wynikają z tego co się dzieje poza FREDDIEm. Rozumiem, że chodzi tu o okład opóźniający dla CAS, ale zależność fazowa między OSC i PHI2 jest stała, choćby "nie wiem co"... ale możliwe że czegoś nie rozumiem.

To ja zadam pytanie pomocnicze - jak uzyskać sygnał zgodny w fazie z PHI2, ale bez zakłóceń i z gwarantowanym wypełnieniem 50/50, a przy okazji podzielić sygnał kwarcu przez cztery?

Ceterum censeo Germaniam esse delendam.

10 Ostatnio edytowany przez _tzok_ (2023-08-25 10:01:49)

Jak uzyskać sygnał OSC z wypełnieniem 50%? Wziąć sygnał CLK, podać go na licznik synchroniczny i pobrać sygnał 3-go bitu (CLK/4). Nic więcej nie potrzeba. Wypełnienie sygnału CLK nie ma tu znaczenia (tak uzyskany OSC zawsze będzie miał wypełnienie 50%), a przesunięcie fazowe między tak uzyskanym OSC i PHI2 będzie stałe (i absolutnie w niczym nie przeszkadza, że będzie).

PHI2 jest pochodną OSC, nie ma sensu próbować uzależniać OSC od PHI2. Wszelkie próby uzależnienia OSC od PHI2 mające na celu zmianę opóźnienia między nimi, skończą się na "pływaniu" obu zegarów. PHI2 jest generowane z OSC i opóźnione względem niego i choćby "nie wiem co" tego opóźnienia nie da się zlikwidować. Synchronizując OSC do PHI2 pojawi się rezonans i modulacja FM wszystkich zegarów.

https://obrazki.elektroda.pl/2272686300_1692953849_bigthumb.jpg

https://tinyurl.com/2xseb2bo

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

11

Moja wina, wyraziłem się nieprezycyjnie. Jak uzyskać sygnał o częstotliwości i fazie zgodnej z PHI2?

Ceterum censeo Germaniam esse delendam.

12 Ostatnio edytowany przez _tzok_ (2023-08-25 10:09:35)

Oryginalny sygnał PHI2 jest dostępny w układzie FREDDIE, nie trzeba go tam generować. Jak ktoś bardzo chce może go zregenerować z CLK, ale musi zostać "samodzielnym" sygnałem, wyłącznie na potrzeby generowania RAS i CAS. Wszelkie próby uzależnienia OSC od PHI2 skończą się źle, bo pojawi się sprzężenie i rezonans.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

13

No, ludzie. Czyta, a nie rozumie. Oryginalny sygnał, dostępny w układzie FREDDIE nie ma wypełnienia 50/50 i jest mocno zakłócony. Głownie z powodu bardzo długiego czasu narastania u źródła, czyli na wyjściu CPU. A przecież wyraźnie i wprost napisałem, co chcę uzyskać.

Ceterum censeo Germaniam esse delendam.

14

_tzok_ napisał/a:

Wszelkie próby uzależnienia OSC od PHI2 skończą się źle, bo pojawi się sprzężenie i rezonans.

Pomijając fakt, że powyższe zdanie to, co do zasady, nieprawda, do tego przypadku w ogóle nie ma żadnego odniesienia. Bo w tym układzie w ogóle nie ma uzależnienia OSC od PHI2. A dlaczego zacytowane zdanie jest nieprawdziwe co do zasady? Bo układy PLL istnieją i nic sobie z niego nie robią.

Ceterum censeo Germaniam esse delendam.

15 Ostatnio edytowany przez _tzok_ (2023-08-25 10:44:08)

Ja rozumiem co piszesz, ale Ty nie rozumiesz, że nie możesz w ten sposób generować OSC. Jeśli koniecznie chcesz generować "swój" PHI2 to możesz robić jak jest na schemacie, ale OSC musi być generowany w osobnym liczniku, bezpośrednio z CLK i powiązania z PHI2.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

16

Kiedyś dwóch Żydów w ZOO przystanęło przy klatce z żyrafą i po dłuższym przyglądaniu się, w końcu jeden odezwał się do drugiego - Icek, ty nie wierz własnym oczom. To nie może być.

Masz przed sobą działający układ. Można, bez szczegółowej analizy, nie do końca rozumieć, jak działa, ale kwestionowanie jego działania, skoro wiadomo, że działa, jest nierozsądne.

Ceterum censeo Germaniam esse delendam.

17 Ostatnio edytowany przez _tzok_ (2023-08-25 11:41:42)

Kwestionowanie wszystkiego jest zasadne. To, że coś "jakoś" działa, nie znaczy, że jest prawidłowo zaprojektowane. Oczywiście, że Twój układ działa, ale pomyśl - PHI2 jest "na sztywno" opóźniony względem OSC o ok 40 ns, a układ sprzężenia próbuje dosynchronizować OSC do PHI. Jak OSC "zwalnia" to w kolejnym cyklu "zwalnia" i PHI2. W rezultacie sprzężenie nieustannie próbuje opóźnić OSC, by PHI2 go "dogonił", ale każde spowolnienie OSC, spowalnia również PHI2. W rezultacie PHI2 nigdy nie "dogoni" OSC, a pętla sprzężenia będzie ustawicznie próbowała opóźniać OSC. Układ będzie niestabilny, a sprzężenie nigdy się nie "zepnie". Układ działać będzie, ale OSC będzie miał jitter na poziomie 20-30 ns, co przeniesie się na wszystkie zegary w systemie. Negatywne efekty zapewne zostaną stłumione przez wolne układy 74LS, ale to nie znaczy, że tak jest dobrze. Skutkiem ubocznym będzie też nierówne wypełnienie tak generowanego OSC.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

18

Mylisz się. Układ NIE PRÓBUJE dosynchronizować OSC do PHI2. Poświęć trochę czasu na analizę jego działania, to zrozumiesz, co robi. Nie potrzeba dużo.

Ceterum censeo Germaniam esse delendam.

19

Matko. Czytam z zainteresowaniem, bo zastanawiałem się jak sobie poprawić PHI2 na złączu carta, bo tak na oko oscyloskopu to on jest w fazie nijakiej z wypełnieniem dziwacznym. Kiedyś PLLem poprawiłem fazę (na minus) CLK dla HDMI (pixelclock74MHz) lecącego drutem przez slipringa. PLLka robi to w trybie basic przy minimalnej wiedzy operatora.

No ale tutaj jakaś masakra jest, przecież te zegary latają po wszystkich układach i każdy coś w nich grzebie. To jak na końcu cart ma się dobrze wystawić na magistrali i dla CPU i ANITCa i GTIA to bez szans jest gmeranie przy tym. To cud, że to w ogóle działa :/

20 Ostatnio edytowany przez _tzok_ (2023-08-25 13:06:23)

Simius napisał/a:

Mylisz się. Układ NIE PRÓBUJE dosynchronizować OSC do PHI2.

Jak zwał tak zwał, ale okresowo, po przepełnieniu, przeładowuje zawartość licznika wartością inną niż 0, co skutkuje tym, że co któryś takt OSC jest nieco krótszy od pozostałych.

Gienek napisał/a:

No ale tutaj jakaś masakra jest, przecież te zegary latają po wszystkich układach i każdy coś w nich grzebie. To jak na końcu cart ma się dobrze wystawić na magistrali i dla CPU i ANITCa i GTIA to bez szans jest gmeranie przy tym. To cud, że to w ogóle działa :/

To prawda, do tego stromość tych zboczy i opóźnienia zależą od temperatury otoczenia i układów (różnych producentów) użytych w konkretnym egzemplarzu komputera.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

21 Ostatnio edytowany przez Simius (2023-08-25 13:41:20)

_tzok_ napisał/a:
Simius napisał/a:

Mylisz się. Układ NIE PRÓBUJE dosynchronizować OSC do PHI2.

Jak zwał tak zwał, ale okresowo, po przepełnieniu, przeładowuje zawartość licznika wartością inną niż 0, co skutkuje tym, że co któryś takt OSC jest nieco krótszy od pozostałych.

Skoro nie da się inaczej, wyłuszczę ideę. Ze względu na opóźnienia na drodze OSC --> GTIA --> ANTIC --> CPU --> PHI2, sygnał PHI2 jest w praktyce skorelowany z opadającym zboczem OSC. Można więc, dla analizy, zastąpić to prostym dzielnikiem przez 2 zmieniającym stan na opadającym zboczu OSC. Licznik synchroniczny ze schematu także generuje sygnał o częstotliwości OSC/2, którego stan zmienia się równocześnie z opadającym zboczem OSC. Ponieważ jednak nie znamy stanu początkowego dzielnika znajdującego się w ANTIC, mamy dwie możliwości - albo sygnał z wyjścia Q2 licznika synchronicznego ma fazę zgodną z PHI2, albo ma fazę przeciwną. Jeśli ma fazę zgodną, wówczas nie potrzebujemy w ogóle nic robić. Jeśli ma fazę przeciwną, musimy w jednym, jedynym cyklu zmienić stan licznika w taki sposób, żeby fazy Q2 i PHI2 się ze sobą zgodziły. A jak już się zgodziły, to idziemy sobie spokojnie na piwo, bo więcej nic nie potrzebujmy robić. Na obrazkach są przebiegi z symulacji - pierwszy z fazą zgodną, a drugi z przeciwną.

Post's attachments

faza1.png 16.62 kb, liczba pobrań: 1 (od 2023-08-25) 

faza2.png 16.71 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
Ceterum censeo Germaniam esse delendam.

22

Tak podejrzewałem, że zakładasz za pewnik, że licznik przeładuje się tylko raz. Ja nie odważyłbym się robić takiego założenia. Na symulacji "trafiasz" idealnie w punkt (albo 0° albo 180°) ale w praktyce nie będzie tak różowo i nie będzie to przesunięcie dokładnie o 180°. Poza tym nachylenie zboczy i punkt przełączania zmieniają się z temperaturą i przesunięcie fazowe między tymi sygnałami trochę "płynie" z upływem czasu. Obawiałbym się, że przeładowanie licznika będzie występowało okresowo, a nie tylko raz, na początku.

"sygnał PHI2 jest w praktyce skorelowany z opadającym zboczem OSC", no nie jest, tak wychodzi z opóźnień ale one nie są 100% stałe ani takie same w każdym egzemplarzu. To mniej więcej przypadkowa zależność.

Moja kolekcja: Atari 1040STe (4MB), Atari 1040STfm (4MB, BLiTTER, AT-ONCE+), Atari 800XE (SIMM EXP 1MB), Atari 800XL (RAMBO XL 256kB), Atari 600XL (64kB), Sinclair ZX SPECTRUM+ (48kB), TIMEX Computer 2048 (48kB), Commodore A600 (2MB+4MB, HDD CF 4GB), Commodore C64C.

23

Poniżej mój opis:

Freddie - jak DOKŁADNIE działa:

Składa się z trzech komponentów:

I) negator CLK_IN - CLK_OUT, używany do wprowadzenia kwarcu 14.XXX MHZ w drgania.
Nie wiem, czy ma jakieś specjalne właściwości, do podobnych zastosowań służy np. układ
74HCU04 (U-Unbuffered), który jest zalecany, zamiast zwykłęgo 74HC04

II) generator OSC generator: zmienia stan co każde 4 narastające zbocze na CLK_IN. NIE wpływają na niego żadne inne sygnały jak RST czy PHI2.

III) Logika generowania RAS/CAS/MUX/WR
* Ta część ukłądu jest taktowana zarówno narastającym jak i opadającym zboczem na CLK_IN (nie spotkałem sie nigdy wcześniej z czymś takim, ale sygnały RAS/CAS zmieniają się zawsze dokładnie w tym samym czasie po odpowiednim z kolei zboczu narastającym/opadajacym na CLK_IN, nie ma żadego jitteru. Gdyby wewnątz freddiego był jakiś zegar o większej częstotliwości niż CLK_IN, Freddie mogłby próbkowac CLK_IN w wykrywaniu jego zboczy, ale wtedy sygnały RAS/CAS pływałyby troszkę.

Do rzeczy:

* Zaczynamy w stanie S1
* W stanie S1: jeśli /RST='1' i podczas dwóch kolejnych zboczy CLK_IN, sygnał PHI2='1', zmiana stanu do S2
* W stanie S2: jeśli podczas dwóch kolejnych zboczy CLK_IN sygnał PHI2='0', zmiana stanu do S3
* W stanie S3:

state                S1  |  S2  |   S3                           | S1
CK_IN             _.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._
                               2   4   6   8  10  12  14  16  18    
                             1   3   5   7   9  11  13  15  17 |19  
                                         |     |     |       | | |
PHI2             -----------.______________________________________
nRAS             ------------------------.___________________.-----
nCAS dla odczytu ------------------------------(_______________)---
nCAS dla zapisu  -----------------------------------(____________)- 


#nr zbocz| Co wtedy sie dzieje
CLK_IN   |
---------+---------------------------------------------------------------------------------
7        | - nRAS opada w dol
         | - RnW jest probkowany i zapamięany wewnątrz jako latch_RnW
---------+---------------------------------------------------------------------------------
8        | - wewnętrzny multiplekser przestawia się do:
         |   BA0<=A9, BA1<=A10, BA2<=A11, BA3<=A12, BA4<=A13, BA5<=A14, BA6<=A8, BA7<=A15
---------+---------------------------------------------------------------------------------
9        | - nCASINH jest próbkowany i zapamięatany wewnątrz jako latch_nCASINH
---------+---------------------------------------------------------------------------------
10   (R) | - if latch_RnW='1' and latch_nCASINH='1', wewnętrzny sygnał sig_nCAS idzie w dół
---------+---------------------------------------------------------------------------------
13   (W) | - if latch_RnW='0' and latch_nCASINH='1', wewnętrzny sygnał signal sig_nCAS idzie w dół
---------+---------------------------------------------------------------------------------
17       | - nRAS idzie w górę
---------+---------------------------------------------------------------------------------
18   (R) | - if latch_RnW='1' and latch_nCASINH='1', wewnętrzny sygnał sig_nCAS idzie w górę
         | - wewnętrzny multiplekser przestawia się do:
         |   BA0<=A0, BA1<=A1, BA2<=A2, BA3<=A3, BA4<=A4, BA5<=A5, BA6<=A6, BA7<=A7
---------+---------------------------------------------------------------------------------
19   (W) | - if latch_RnW='0' and latch_nCASINH='1', wewnętrzny sygnał sig_nCAS idzie w górę
         | - zmiana stanu do S1
---------+---------------------------------------------------------------------------------

- pin: nCAS <= sig_nCAS OR (not nEXTSEL)
- pin: WR  <= latch_RnW when nRAS = '0' or sig_nCAS = '0' else RnW;

Pierwszy problem jest taki, że nie da się w FPGA reagować zarówno na jedno jak i drugie zbocze zegarowe. No chyba, że mamy szybszy zegar i próbkujemy. Czyżby? Wczoraj wpadłem na genialny pomysł, który opisałem tu:
https://www.elektroda.pl/rtvforum/viewt … highlight=

Drugi problem jest taki, że powyższy opis w 100% zgadzałał się z krokową symulacją, jaką przeprowadziłem na żywym układzie.
Problem jest jednak taki, że sam stan S3 skłąda się z 19 zboczy, podczas gdy zegar PHI2 ma przecież okres 16 zboczy.
Gdyby więc zastosować powyzsze rozumowanie, to zanim skończy się S3, zacząłby się nowy cykl PHI2 w którym nic by się nie działo (bo nie zostałby wykryty) więc wszystkie sygnały wyjściowe byłyby generowane co dwa cykle PHI2.
Wsadzając Freddiego do Atari i patrząc na przebiegi faktycznie chyba między dwoma CASami musi być minimum jeden cykl PHI2 pusty:
https://obrazki.elektroda.pl/8409426600_1692978536_thumb.jpg

No ale już sygnał RAS generowany jest co kazdy cykl:
https://obrazki.elektroda.pl/2423937400_1692978629_thumb.jpg

Trochę się zastanawiałem jak tego dokonać. Zrobiłem mały eksperyment - chwilę po 7 cyklu, gdy RAS poszedłw w dół (pionowe żółte linie oznaczają proces który trwa w układzie) sprawdziłem co by sie stało, gdyby zasymulować rozpoczęcie nowego cyklu PHI2, czyli PHI2 idzie w górę na dwa cykle CKL_IN, potem w dól na dwa cykle.
Ku mojemu zdziwieniu, po 17 cyklu RAS nie poszedł w górę tylko został w stanie niskim, który trwał łącznie 20 cykli (normalnie RAS jest niski przez 10 cylki).

To dało mi do zrozumienia, że wewnątrz Freddiego działają tak naprawde dwa identyczne procesy, opisane jak wyżej, z których drugi startuje w następnym cylku PHI2 po pierwszym.
Pierwszy proces wygenerował swój RAS który trwał 10 cykli i drugi wygenerował swój ras , który tez trwł 10 cykli.
Wynikowy RAS to więc logiczny AND pierwszego i drugiego RASa.
https://obrazki.elektroda.pl/6364107900_1692979379_thumb.jpg


Po zaimplementowaniu tego wszystkiego w VHDL, układ zadziałał od pierwszego razu, witając mnie radosnym niebieskim ekranem READY.
Odpalilem kilka gier i wszystkie działały bez problemu na mojej protezie Freddyego.

W opisywanej protezie moim początkowy marzeniem było zastosowanie jedynie scalaka EPM3064. Niestety ma on o jeden pin IO a mało. Postanowiłem więc początkowo zastosowac jeden bufor 74LVC245, ale poprowazenie wsystkich ścieżek na tak małej płytce wiązałoby się z koniecznośćią użycia przelotek pod scalakiem, których w domu zrobić się nie da.
Potem jednak dodalem wspomniany 74HCU04 jako bufor zegara, bo EPM nie radził sobie w roli negatora, dzięki temu EPM nie musi generować CLK_OUT i zwalania mu sie jeden pin.
Finalnie więc całe rozwiązanie będize można zmieścić w EPM3064+74HCU04.

24 Ostatnio edytowany przez Simius (2023-08-25 17:32:29)

_tzok_ napisał/a:

Tak podejrzewałem, że zakładasz za pewnik, że licznik przeładuje się tylko raz. Ja nie odważyłbym się robić takiego założenia. Na symulacji "trafiasz" idealnie w punkt (albo 0° albo 180°) ale w praktyce nie będzie tak różowo i nie będzie to przesunięcie dokładnie o 180°. Poza tym nachylenie zboczy i punkt przełączania zmieniają się z temperaturą i przesunięcie fazowe między tymi sygnałami trochę "płynie" z upływem czasu. Obawiałbym się, że przeładowanie licznika będzie występowało okresowo, a nie tylko raz, na początku.

"sygnał PHI2 jest w praktyce skorelowany z opadającym zboczem OSC", no nie jest, tak wychodzi z opóźnień ale one nie są 100% stałe ani takie same w każdym egzemplarzu. To mniej więcej przypadkowa zależność.

Wytłumaczyłem Ci ideę. Oczywiście, realizacja niekoniecznie jest ścisłym odzwierciedleniem idei, ponieważ czasem trzeba uwzględnić dodatkowe okoliczności, o których wspomniałeś. Temu właśnie służy bramka odwracająca między licznikiem 74163 a wyjściem OSC. Dzięki niej, kontrola fazy PHI2 następuje nie w pobliżu zbocza, a w samym środku stanu wysokiego. Rzecz jasna wyjście Q2 licznika w tej sytuacji nie jest dokładną kopią PHI2, ale przesunięcie fazowe jest ustalone a resztę robi rejestr 74164. I niech tam sobie system pływa, ile mu się podoba. Ma na to +/- 140ns w każdą stronę.
OK?

Ceterum censeo Germaniam esse delendam.

25

krzysiobal napisał/a:

Finalnie więc całe rozwiązanie będize można zmieścić w EPM3064+74HCU04.

ja się piszę na ewentualny egzemplarz gdyby trafiło na produkcje... jeśli to "naprawi" 1mbsimm by pasiu oraz avgcart i zwiechy po pbi