Główny procesor Nintendo 64 wywodzi się z układu MIPS R4000, nowego awangardowego procesora MIPS. Wypuszczone w 1991, największą nowością serii R4000 było dodanie obsługi 64-bitowych instrukcji , będących wynikiem poszerzenia szerokości szyn, rejestrów i jednostek obliczeniowych, by efektywnie manipulować wartościami 64-bitowymi. Deweloperzy z drugiej strony uzyskali wyżej rzeczone możliwości poprzez nowy zestaw instrukcji MIPS III. Ogólnie rzecz biorąc, R4000 umożliwił nowym aplikacjom manipulowanie większymi blokami danych bez wykorzystywania dodatkowych cykli.
W przypadku konsoli nowej generacji Nintendo rozważało wprowadzenie sprzętu przemysłowego na konsole domowe. W przeciwieństwie do firmy Sony, która posiadała wiele własnych komponentów i potrzebowała jedynie drugiego źródła MIPS, Nintendo bezpośrednio współpracowało z właścicielami MIPS (i wieloma graficznymi stacjami roboczymi), aby zaprojektować cały ich ekosystem. Tą firmą było Silicon Graphics (SGI).
Wracając do siedziby SGI, R4000 był drogim produktem (około $400 ), co czyniło go niepraktycznym w użyciu w konsoli do gier. Jednak Nintendo nie chciało poddawać się, więc użyli niskobudżetowego wariantu zwanego R4300i, którego drugim źródłem stał się NEC.
Ostatecznie, wyborem Nintendo i SGI stał się procesor NEC VR4300 działający z prędkością 93.75 MHz . Jest to binarnie kompatybilna wersja układu MIPS R4300i, który zawiera :
- Posiada dwa tryby działania:
- Tryb 32-bitowy: Tradycyjny tryb, w którym procesor zachowuje się jak procesor z zestawem instrukcji MIPS-II. Nie ma niczego specjalnego w tym trybie z wyjątkiem tego, że wszelkie nowe funkcje są wyłączone.
- Tryb 64-bitowy: Tryb 'natywny' gdzie wszelkie 64-bitowe rozszerzenia są dostępne. Jest też binarnie kompatybilny z 32-bitowymi aplikacjami.
- 32 rejestry ogólnego przeznaczenia: są 32-bitowe w 'trybie 32-bitowym' i 64-bitowe w 'trybie 64-bitowym'.
- Zbiór instrukcji MIPS III: Zestaw instrukcji będący następcą poprzedniego zestawu instrukcji MIPS II. Zawiera nowe kody operacyjne obliczające 64-bitowe słowa zwane 'podwójnymi słowami. Wreszcie, instrukcje są zawsze 32-bitowe, niezależnie od trybu działania.
- Warto wspomnieć, że od czasu MIPS II, miejsca na opóźnienia ładowania są przestarzałe, choć nadal występują opóźnienia gałęzi.
- Wewnętrznie 64-bitowa szyna jest podłączona do zewnętrznej 32-bitowej magistrali transmisji danych: chociaż podwójne słowa nie pogorszają wydajności, gdy są obsługiwane wewnętrznie, Procesor nadal będzie musiał zużywać dodatkowe cykle, aby przenieść 64-bitowe dane przez resztę systemu.
- To jest jedno z cięć wariantu R4300i (R4000 posiada pełną 64-bitową szynę danych).
- 32-bitowa linia adresowa: Może zaadresować do 4 GB fizycznej pamięci.
- Potok 5-stopniowy: Do pięciu instrukcji może być przetwarzanych jednocześnie (szczegółowe objaśnienie można znaleźć w poprzednim artykule).
- 24 KB pamięci cache L1: podzielone na 16 KB dla instrukcji i 8 KB dla danych.
Wewnętrzna Jednostka zmiennoprzecinkowa (FPU) jest również zawarta w tym pakiecie. VR4300 określa ją jako koprocesor (CP1), jednakże jednostka jest zainstalowana obok ALU i jest dostępna tylko za pośrednictwem wewnętrznego potoku procesora ALU, co oznacza, że nie ma wspólnego przetwarzania per se. Z drugiej strony FPU nadal posiada dedykowany rejestr przyspieszający operacje oparte 32 i 64-bitowych liczbach zmiennoprzecinkowych. Ponadto jednostka ta przestrzega standardu liczb zmiennoprzecinkowych IEEE754.
Uproszczony dostęp do pamięci
Sposób wykorzystania pamięci RAM jest zgodny z jednolitą architekturą pamięci lub 'UMA', gdzie całą dostępna pamięć jest zlokalizowana wyłącznie w jednym miejscu, a każdy komponent, który wymaga pamięci RAM, ma dostęp do tej wspólnej lokalizacji. Komponentem arbitrażowym jest w tym przypadku GPU.
Powodem wybrania tego projektu jest fakt, że pozwala on znaczne zaoszczędzić na kosztach produkcji, ale z drugiej strony zwiększa szanse konfliktu w dostępie do pamięci, gdy nie jest zarządzany właściwie.
Brak kontrolera DMA?
Ze względu na ujednoliconą architekturę pamięci, CPU nie posiada już bezpośredniego dostępu do pamięci RAM, więc GPU będzie również zapewniać funkcjonalność DMA.
Projekt pamięci
Oprócz UMA organizacja pamięci RAM jest nieco skomplikowana, więc postaram się utrzymać to prostym do zrozumienia. Oto przedstawiam...
System zawiera 4,5 MB RAM która jest połączona za pomocą 9-bitowej linii danych, gdzie dziewiąty bit jest zarezerwowany dla GPU (więcej szczegółów w sekcji "Grafika"). W rezultacie każdy komponent z wyjątkiem GPU może zobaczyć do 4 MB.

Układ pamięci tego systemu. Zakładam, że prędkość magistrali CPU-RCP jest albo prędkością zegara RCP, albo prędkością CPU, ale jeszcze nie mogłem tego potwierdzić.
Typ pamięci RAM zamontowanej w płytce nazywa się Rambus DRAM (RDRAM) , był to kolejny projekt, który konkurował z SDRAM, aby stać się nowym standardem. RDRAM jest połączony szeregowo (gdzie transfery są wykonywane bit po bicie), podczas gdy SDRAM używa równoległego połączenia (transfer wielu bitów jednocześnie).
Opóźnienie RDRAM jest wprost proporcjonalne do liczby zainstalowanych banków , więc w tym przypadku, z ilością zainstalowanej pamięci RAM w tym systemie, wynikiem są znaczące opóźnienia (post na forum beyond3d donosi że opóźnienie wynosi około 640 ns ). Chociaż jest to kompensowane wysoką prędkością zegara pamięci wynoszącą 250 MHz (~2,6 razy szybciej niż CPU). Nintendo twierdzi, że RDRAM może zapewnić szybki transfer danych do 500 MB/s zapisu i odczytu.
Ponadto toczy się kolejna dyskusja na forum beyond3d, która twierdzi, że Nintendo wybrało moduły pamięci NEC uPD488170L dla swojej konsoli . Te chipy wdrażają technologię o nazwie "Rambus Signaling Logic", która podwaja szybkość transferu . Co może wyjaśniać, dlaczego w niektórych źródłach 'efektywna' prędkość wynosi 500 MHz.
Wreszcie, ilość dostępnego RAM na tej konsoli może zostać rozszerzona poprzez zainstalowanie akcesorium Expansion Pak: małe ładne pudełko zawierające dodatkowe 4 MB pamięci RAM. Co ciekawe, wolne banki pamięci RAM muszą być obsadzone terminatorami, w efekcie konsola była dostarczana wraz z zainstalowanym terminatorem (zwanym Jumper Pak) zainstalowanym w miejsce slotu Expansion Pak. Teraz możesz zapytać, co by się stało, jeśli włączysz konsolę bez zainstalowanego rozszerzenia? Dosłownie nic, uzyskasz pusty ekran!
Zarządzanie pamięcią
VR4300 zawiera kolejny koprocesor o nazwie System Control Coprocessor (CP0), który składa się z Jednostki Zarządzania Pamięcią (MMU) i Buforu Translacji Stron (TLB), która decyduje, jak pamięć jest zorganizowana i buforowana. VR4300 może uzyskać dostęp do 32-bitowych adresów pamięci o rozmiarze do 4 GB, ale jak widzieliśmy, nie mamy 4 GB pamięci RAM w tej konsoli (nawet po uwzględnieniu pamięci mapowanej I/O). Tak więc MMU przejmuje adres pamięci i dostarcza użyteczną mapę pamięci, w której pamięć fizyczna jest wielokrotnie duplikowana. W konsekwencji adresy pamięci traktowane są jako 'adresy wirtualne' (w przeciwieństwie do 'adresów fizycznych'). Ponadto TLB umożliwia programistom zdefiniowanie własnej mapy pamięci w niektórych przypadkach bez (znaczących) kar za wydajności.
Początkowo może to wydawać się zbędne, ale każde lusterko (zwane 'segmentem') jest podłączone do innych obwodów (tj. Pamięć podręczna L1, nie cachowana, adres TLB), więc programiści mogą zoptymalizować wykorzystanie poprzez wybór najodpowiedniejszego segmentu w zależności od potrzeb.
Niektóre segmenty mają na celu odseparowanie lokalizacji 'jądra' od lokalizacji 'użytkownika' dla celów bezpieczeństwa. N64 zawsze działa w trybie 'jądra', w związku z czym segment 'jądra spoza TLB' (zwany 'KSEG0') jest najczęstszym segmentem dla gier.
MMU może również działać w trybie 64-bitowym, gdzie adresy pamięci są 40-bitowe. Oznacza to, że wirtualna przestrzeń adresowa obejmuje adresy o wielkości 1 TB... ale myślę, że Nintendo 64 nie wykorzysta tego!