Zamknięte . To pytanie jest
oparte na opiniach . Obecnie nie przyjmuje odpowiedzi.
Komentarze
Odpowiedź
Zaletą, którą emulatory FPGA zwykle dzielą ze starszym sprzętem, jest możliwość korzystania z urządzeń, które współdziałają ze sprzętem w sposób bardzo zależny od czasu. Na przykład, jeśli ma się kartridż z grą dla NES która wyzwala przerwanie za każdym razem, gdy pobierana jest pierwsza linia danych dla konkretnego duszka, konsola odczytująca zawartość kartridża, a następnie emulująca ją, byłaby w stanie poprawnie zagrać w grę tylko wtedy, gdyby była w stanie rozpoznać, jaki jest wkład robił z linią przerwań.
Sprzęt oparty na FPGA generalnie działałby równie dobrze, jeśli nie więcej niezawodnie niż w przypadku sprzętu vintage, ale jest kilka dziwnych dziwactw, o których należy pamiętać. Na przykład niektóre prototypowe wkładki rozszerzeń dla Atari 2600 opierały się na fakcie, że nawet gdy NMOS 6502 próbuje podciągnąć szynę danych wysoko, nie jest w stanie wystarczająco mocno próbować obezwładnić urządzenia zewnętrznego, które próbuje naciągnąć linkę nisko, ani nie uszkodzić się podczas próby. Zauważ, że sytuacja odwrotna nie jest prawdą: urządzenie NMOS, które próbuje obniżyć linię, podczas gdy urządzenie zewnętrzne ciągnie ją wysoko, może uszkodzić się podczas próby (RIP 2600jr). Gdyby ktoś podłączył do nowoczesnego systemu rekreacyjnego urządzenie NMOS, które opierało się na możliwości przesterowania przewodów magistrali, a system nie ograniczałby prądu sterującego strony wysokiego napięcia na tych przewodach, mogłoby to spowodować uszkodzenie urządzenia zewnętrznego. nie wiem, do jakiego stopnia to rzeczywiście byłby problem, ale ponieważ wszelkie urządzenia, które opierają się na takich technikach, są prawdopodobnie rzadkie, byłoby bardzo niefortunne, gdyby zostały uszkodzone.
Innym potencjalnym problemem jest to, że stare urządzenia elektroniczne były często raczej wolno reaguje na sygnały, co oznacza, że jeśli urządzenie ma wyprowadzać sygnał przez bardzo krótki czas, prawdopodobnie zostanie zignorowane. Niektóre stare elektroniki czasami generowały krótkie impulsy usterki, jeśli jakaś kombinacja wejść zmieniała się między jednym stanem, w którym poziom wyjściowy powinien być niski, a innym stanem, w którym poziom wyjściowy powinien być niski. Jeśli odtworzenie FPGA nie jest zaprojektowane do ignorowania takich impulsów, mogą one powodować błędne działanie na odtworzonym sprzęcie, nawet jeśli nie spowodowałyby problemów w oryginale.
Osobiście uważam, że FPGA to najlepszy sposób odtwarzania systemów. Stary sprzęt jest fajny, ale niezawodność jest często problematyczna. Emulacja oprogramowania może działać całkiem nieźle, ale będzie ograniczona do współpracy ze sprzętem, o którym wie projektant emulatora. Dobre odtwarzanie oparte na FPGA może współpracować z prawie każdym rodzajem starego sprzętu, w tym urządzeń, o których projektant FPGA nic nie wie , oferując jednocześnie lepszą niezawodność niż sprzęt vintage.
Odpowiedź
Przedmowa: Pytanie wydaje się prosić o opinie, ponieważ jest to opinia, jeśli ktoś zaakceptuje emulację, bez względu na to, czy oprogramowanie na procesorze czy na FPGA, jest takie samo jak prawdziwe, czy nie.
Zadaj sobie pytanie, czy kierowanie nowoczesnym samochodem technologicznym jest dopracowane, jak SSK, tak samo jak prowadzenie prawdziwego pojazdu? Czy chcesz jeździć BMW z lat 50. z wszystkimi jego dźwiękami, zapachami i wibracjami (i wszystkimi czynnościami niezbędnymi do jego utrzymania), czy też rowerem elektrycznym z 2020 roku, który wygląda jak taki, który daje Ci klasyczny dźwięk z iPoda ?
Wędruję, jakie są różnice między używaniem prawdziwych sprzętowych emulatorów sprzętowych opartych na FPGA, takich jak MiSTer, a dużą ilością oprogramowania emulatory dla różnych systemów działających na nowoczesnych komputerach z systemem Windows, MacOS i Linux.
Jeśli jesteś zwykłym użytkownikiem, przekonanym do używania nowoczesnej klawiatury i nowoczesnej myszy obsługując obraz, który wygląda jak 640 x 400, na ekranie 4k, wtedy potrzebujesz tylko oprogramowania. Już wersja FPGA będzie przesada, ponieważ wykorzystuje te same nowoczesne urządzenia.
Z drugiej strony Jeśli obrazowanie to za mało, ale chcesz poczuć nieporęczną mysz Atari, kręcącą się klawiaturę Amigi lub nieporęczny joystick C64, wszystkie przedstawione z prawdziwym blaskiem CRT, nie ma innego wyjścia uzyskanie prawdziwej rzeczy.
Jedna rzecz, która przyszła mi do głowy, to to, że zarówno programowe, jak i sprzętowe emulatory mogą nie być wystarczająco precyzyjne.
Teraz są. w każdym szczególe. Nowoczesny sprzęt jest wystarczająco szybki, aby umożliwić użycie oprogramowania HLL w celu uzyskania dokładnego czasu cyklu. Zwłaszcza, gdy wszystkie wejścia i wyjścia są i tak emulowane, mapowane na nowoczesne urządzenia.
Ale wydaje mi się, że jest to coś w zależności od jakości implementacji, różnią się między różnymi emulatorami i poprawiają się z czasem z powodu naprawiania błędów, ale nie jako podstawowy problem.
Leniwe programowanie i konserwacja nie unieważniają tego podejścia. W każdym przypadku, z wyjątkiem prawdziwych rąk do obsługi sprzętu, nie ma różnicy.
Słyszę też o problemie z opóźnieniem w emulatorach programowych, ale ja „Nie dziwi mnie trochę, że coś takiego można naprawdę poczuć na komputerze, który jest prawdopodobnie miliony razy szybszy niż maszyna emulowana.
Może sto razy, jeśli w ogóle. Pamiętaj, że większość głównych komponentów nie działa tak dużo szybciej – a większość z nich została pochłonięta przez urządzenia o większych rozmiarach i zapotrzebowanie na dane.
Problem z opóźnieniem istnieje od zawsze. Zawsze będzie ktoś stwierdzający, że widzą / czują różnicę. Chociaż może to być prawdą w kilku bardzo oddanych sytuacjach, przez większość czasu jest to bzdura. Odczuwanie kilku mikrosekund, gdy testowanie joysticka może kosztować więcej, jest po prostu fantazją.
Czy naprawdę istnieje techniczny powód, aby preferować emulację opartą na prawdziwym sprzęcie lub FPGA od emulacji programowej?
Co stanowi powód techniczny dla Ciebie? Samo w sobie określenie to nie jest jasne, gdy porównujesz kompletne różne implementacje.
lub jest to po prostu nostalgia, spowodowana chęcią wypełnienia tak jak ty naprawdę jesteś w latach 80-tych czy 90-tych?
Czy kiedykolwiek siedziałeś przed jedną ze starych maszyn? To zaskakujące, jak różne klawiatury czują się opuszczając dzisiejszy standardowy sprzęt.
I oczywiście jest też majsterkowanie sprzętowe – nie jest to prawdziwa zabawa z emulatorami, ponieważ tutaj dodanie interfejsu polega po prostu na dodaniu kilku wierszy kod – lub po prostu configureati w niektórych przypadkach. Bez układu, bez wytrawiania, bez lutowania, a zwłaszcza bez przeklinania i łatania, dopóki nie zadziała.
Odpowiedź
Chciałbym wyjaśnij termin „emulacja FPGA” wspomniany w pytaniu.
Po pierwsze, oczywiście istnieje coś takiego jak emulacja oprogramowania. Weźmy jako przykład (mniej lub bardziej) dokładne emulatory programowe procesora 6502 . Próbują emulować wszystkie zewnętrzne artefakty rzeczywistego procesora, takie jak liczba cykli na każde polecenie, adresy dostępów do pamięci, a nawet „stan wewnętrzny” (raczej tylko stan rejestrów widocznych dla oprogramowania). Jednak nie ma nic podobnego do prawdziwego procesora, począwszy od punktu, w którym jest to kwestia czystego oprogramowania, a nie urządzenia sprzętowego.
Kiedy odkryta zostanie jakakolwiek nowa funkcja prawdziwego 6502 (jak nowe nieudokumentowane kody operacyjne, flagi lub szczegóły wykonania ), jest wstawiany do emulatora oprogramowania jako „kolejna funkcja do zaimplementowania”. Żadne rzeczywiste cechy nie pojawiłyby się w emulatorze oprogramowania, gdyby były nieznane osobie wdrażającej.
Następnie spójrzmy na rdzenie HDL kompatybilne z 6502.Obecnie reprezentują one rzeczywiste cyfrowe urządzenie logiczne – lub jego model (w przypadku, gdy HDL jest symulowany, a nie zaimplementowany w rzeczywistym sprzęcie, takim jak FPGA lub ASIC). Mają teraz rzeczywistą pamięć typu flipflop (lub zatrzask) dla rejestrów procesora, mogą implementować rzeczywiste sygnały magistrali procesora, a nawet mogą być wstawiane do komputera retro zamiast oryginalnego 6502. Jednak są one wykonane (mniej więcej) „od zera”, specyfikacjami procesora, które mają zastąpić, a nie jego wewnętrzną strukturą. A jednak brakowałoby im funkcji nieopisanych w tych specyfikacjach, które istnieją w prawdziwym procesorze retro, ale są jeszcze nieznane realizatorowi.
Innym poziomem rekonstrukcji mógłby być projekt HDL zbudowany w następujący sposób:
- prawdziwy retro procesor jest dekapowany i fotografowany
- następnie odtwarzana jest lista sieci i schematy na poziomie tranzystora (ręcznie lub za pomocą mniej lub bardziej zautomatyzowanych narzędzi)
- lista sieci jest konwertowana na schematy poziomu bramki, a następnie na opis HDL, co z kolei jest implementowane w FPGA lub ASIC.
W przeciwieństwie do poprzednich przypadków, teraz prawie wszystkie funkcje prawdziwego procesora zostać zaimplementowane „natywnie”, ponieważ struktura powstałego HDL jest mniej więcej równoważna strukturze rzeczywistej rzeczy (na poziomie bramek logicznych i przerzutników).
Nadal mogą wystąpić problemy, na przykład 6502 ma pewne instrukcje, które zachowują się nieregularnie i wydaje mi się, że takie zachowanie nie pojawi się naturalnie w HDL.
Ogólnie rzecz biorąc, uważam, wszystko powyżej „inżynierii wstecznej, a następnie odtworzenia HDL” jest w rzeczywistości emulacją , zarówno programową, jak i sprzętową, podczas gdy druga metoda jest nie .
Innymi słowy, rozważmy możliwość zachowania starego oprogramowania. Moglibyśmy go uruchomić na współczesnym sprzęcie, ale jeśli nie jest dostępny, do gry wchodzą emulatory oprogramowania, ale stary element oprogramowania, do którego są używane, jest nadal dokładnie taki sam.
Teraz chcielibyśmy zachowujemy stary sprzęt (procesor), ale jego autentyczna implementacja jest niedostępna, więc odtwarzamy ją przy użyciu nowszej technologii, ale struktura logiczna procesora pozostaje dokładnie taka sama.
Odpowiedź
Aby udzielić odpowiedzi tylko na pytanie dotyczące opóźnienia, jako autor emulatora:
Istnieje wiele wyjątków, ale ogólna zasada dotycząca oryginalnego sprzętu z lat 80. wczesne lata 90. to to, że zmiany wejścia w joypadzie i klawiaturze mogą być wykrywane przez sprzęt niemal natychmiast po ich wystąpieniu, a gdy obraz i dźwięk są wysyłane z maszyny, docierają do użytkownika niemal natychmiast – np. dla klasycznego telewizora CRT poziom obraz, który teraz maluje, jest prawie wyjściowym obrazem maszyny.
W przypadku sprzętu, dane wejściowe generalnie przechodzą es stos Bluetooth lub USB, który może być sprawdzany tylko w określonych odstępach czasu przez system operacyjny hosta, a jeśli cokolwiek się wydarzyło, przekazuje to dalej zainteresowanemu procesowi, który może nastąpić natychmiast, lub nie, w zależności od konkretnego harmonogramu.
Wiele emulatorów implementuje również główną pętlę, która wygląda tak, jak można zaprojektować grę:
- zebrać wszystkie najnowsze dane wejściowe i przesłać je do emulowanej maszyny;
- uruchom maszynę dla ramki;
- zamaluj następną klatkę wyjścia do niewidocznego bufora;
- ustaw kolejkę do wyświetlenia przy następnej synchronizacji i bloku;
- powtórz.
Dla dobra kłótni, wyobraź sobie, że twoja nowoczesna maszyna jest bardzo szybka i że kroki 2 i 3 są natychmiastowe. Następnie:
- występuje średnio pół ramki opóźnienia wejściowego plus niezależnie od sygnalizacji Bluetooth / USB i dodanego systemu operacyjnego – żadne dane wejściowe, które pojawiają się tuż po górnej części ramki, nie zostaną przekazane aż do początku następnego, wszystko, co nastąpi zaraz na końcu, zostanie przekazane niemal we właściwym czasie, a zakres opóźnień pomiędzy nimi jest liniowy, więc średnia jest w połowie między; i
- jest ustalona dodatkowa klatka opóźnienia wyjściowego, ponieważ wysyłasz ramkę do prezentacji przy następnej synchronizacji vs synchronizacji, a następnie czekasz, aż nadejdzie czas na wyświetlenie.
Tak więc przy tej prostej pętli, na idealnym sprzęcie, w przeciętnym przypadku opóźnienie między naciśnięciem czegoś a reakcją ekranu jest o około 1,5 klatki większe niż w przypadku prawdziwego sprzętu. I to tylko wtedy, gdy host i emulowane maszyny działają z tą samą liczbą klatek .
Puryści twierdzą, że niektóre oryginalne gry są tak precyzyjnie dostrojone, po odpowiedniej liczbie godzin testów i poprawek w ciągu dnia, że 1,5 klatki stawia je w niekorzystnej sytuacji, którą mogą wykryć.
FPGA są zwykle * emulacjami, bez względu na to, w jaki sposób są sprzedawane, ponieważ zazwyczaj są to osoby ponownie wdrażające specyfikację w języku opisu sprzętu wysokiego poziomu. Ale starają się pominąć jak najwięcej tego opóźnienia – dobry jakościowo całkowicie pominie buforowanie wideo, uruchomi resztę systemu w czasie rzeczywistym i wprowadzi dane wejściowe z minimalnym opóźnieniem.
* kwalifikacja dodane zgodnie z poprawką podaną przez @lvd poniżej. Zobacz jego odpowiedź, aby uzyskać więcej kolorów.
Oczywiście nie jest trudno naprawić większość problemów programowych w oprogramowaniu:
- częściej wprowadzanie do przodu;
- nie użyj vsync, aby wyzwolić nowe wyjście do vsync; i
- nie używaj podwójnego bufora.
W skrajnych przypadkach możesz nawet ścigać raster o podobne opóźnienie wyjściowe do FPGA – jeśli masz już wysokie -frequency loop dla częstego wprowadzania danych, a jeśli podstawowy sprzęt obsługuje jakiekolwiek dane wyjściowe, które mogą powodować zrywanie ekranu, to masz narzędzia.
Niestety, takie podejście nie było zwykle stosowane przez emulatory w w przeszłości, zwłaszcza zanim opóźnienie stało się tak szeroko dyskutowanym tematem, i coś w rodzaju negatywnego obrazu utknęło.
Komentarze
Odpowiedź
Wiele aspektów HW vs SW zostało omówionych w innych postach, więc będę nie dotykaj ich. Zamiast tego chciałbym wyjaśnić problem LATENCY z mojego punktu widzenia, wraz z doświadczeniem zdobytym podczas kodowania emulatorów dla różnych platform …
Stworzenie emulatora SW na nowoczesnych maszynach jest o wiele trudniejsze z punktu widzenia opóźnienia, niż było to w czasach bezpośredniego dostępu do I / O. W przypadku komputerów domowych i konsol do gier musimy symulować / emulować dźwięk, wyjście wizualne i dane wejściowe użytkownika tak precyzyjnie, jak to tylko możliwe. Największym problemem jest dźwięk. Dzieje się tak, ponieważ nasz słuch jest znacznie lepszy niż jakikolwiek inny zmysł i możemy poczuć / usłyszeć różnicę, jeśli dźwięk jest wyłączony nawet o kilka ms
lub Hz
. Jeśli ekran jest wyłączony o 1 lub 2 klatki, nie widzimy różnicy. Również jeśli wejście jest trochę opóźnione, jest ok (dla większości ludzi).
W nowoczesnej architekturze maszyn wszystko jest buforowane (szczególnie dźwięk). Aby więc wyprowadzić dźwięk, musimy utworzyć dane PCM , które są przesyłane do układu dźwiękowego i odtwarzane przez DMA + DAC . W tym celu stosuje się zwykle 2 okrągłe lub wiele małych buforów liniowych. Teraz, aby generować dźwięki bez zakłóceń, bufory muszą być wystarczająco duże. Na przykład w systemie Windows ostatnim razem, gdy sprawdzałem, WAVEOUT potrzebuje co najmniej 20-80
ms. DirectSound potrzeba >400 ms
Teraz, jeśli emulowany program się dostosuje wyjście dźwięku, które zostanie wyprowadzone dopiero po odtworzeniu już wybranego dźwięku.
To samo dotyczy wejścia I / O na niektórych platformach, więc opóźnienia sumują się.
Kiedy używasz FPGA to masz bezpośredni dostęp do wyjścia dźwięku bez buforowania. To samo dotyczy wejścia.
Jednak opóźnienie wejścia gry (klawiatura, joystick) zwykle nie ma nic wspólnego z opóźnieniem systemu hosta . Typową przyczyną jest to, że większość emulatorów używa tików zegara do utrzymania emulowanych prędkości. Tak więc symulują procesor lub cokolwiek innego i po osiągnięciu pożądanej liczby symulowanych zegarów na czas uśpienia do następnego timera lub cokolwiek innego. Im szybszy komputer hosta, tym mniej czasu potrzebuje na emulację, stąd symulacja nie będzie reagować przez większość czasu rzeczywistego.
Załóżmy na przykład, że nasza symulacja może działać 100 razy szybciej niż oryginalna prędkość emulowanego komputera. Oznacza to, że tylko 1% czasu symulacja coś robi, a reszta to tylko Sleep()
. Podczas snu emulacja nie może na nic odpowiedzieć. Może więc przegapić naciśnięcia klawiszy, kliknięcia odpalane itp … Aby zaradzić temu, że niektóre emulatory mogą ponownie używać buforowania, co prowadzi do opóźnienia zamiast ignorowania danych wejściowych. Istnieją również inne style kontrolowania czasu, które całkowicie eliminują ten problem. Aby uzyskać więcej informacji na ten temat, zobacz:
Odpowiedź
Stare komputery NTSC (i komputery Mac CRT itp.) mogą zmienić swoje wyjście graficzne w trakcie odświeżania wyświetlacza CRT (częściowo w dół pionowego rastra), co powoduje rozerwanie obrazu w odpowiedzi na dane wejściowe w czasie rzeczywistym.
Emulatory korzystające z monitorów innych niż CRT nie mogą tego robić w czasie rzeczywistym i mogą sfałszować rozdarty raster dopiero w następnym ramka lub pole.
I jedyny sposób, aby sprawdzić, czy emulacja jest dokładna w porównaniu z rzeczywistym (gruntownie) starym sprzętem. Sprawdź, czy są jakieś nieudokumentowane ukryte pułapki logiczne (rozbrajanie itp.) Lub błędy układu analogowego w różnych warstwach układu ASIC.
Komentarze