Nintendo 64的主处理器的起源是 MIPS R4000, MIPS的新型前卫CPU。 于1991年发布,R4000最明显的新颖之处是包含了 64位能力,这导致了总线、寄存器和计算单元的规模增加,以便有效地操纵64位数据。 另一方面,开发者通过新的 MIPS III 指令来访问这些能力。 总之,R4000使新的应用程序可以操纵更大的数据块,而不需要消耗额外的周期。
对于下一代主机,任天堂考虑将工业硬件引入家用主机。 与拥有大量内部组件且只需第二来源的MIPS的Sony不同,任天堂直接与MIPS(及许多图形工作站)的所有者合作,设计了他们的整个生态系统。 那家公司是Silicon Graphics (SGI)。
不管怎样,R4000是昂贵的产品(大约400美元 ),这使得游戏主机不能使用它。 然而,任天堂不想放弃它最先进的产品, 这样他们就选择了一个来自NEC的叫做 R4300i的低端变体。
最终,任天堂和SGI选择的CPU变成了运行在93.75 MHz 的NEC VR4300。 这是MIPS R4300i的二进制兼容版本,具有以下特性:
- 两种工作模式:
- 32位模式: CPU 表现得是一个MIPS II兼容处理器的传统模式。 这种模式没有什么特殊,只是所有新功能都被锁定。
- 64位模式: 所有64位扩展都可用的"原生"模式。 它也兼容32位应用程序。
- 32 个通用寄存器: 它们在"32位模式"中位宽是32, "64位模式"中位宽是64。
- MIPS III ISA: 一个作为MIPS II 继承者的RISC 指令集。 它提供了名为 'doublewords'的新的opcode,可以计算64位数据。 最后,指令总是 32位宽, 独立于模式。
- 值得一提的是,自从MIPS II以来, 负载延迟槽 已经表现很好,但分支延迟仍然存在。
- 内部 64 位总线 连接到一个 外部32 位数据总线:尽管内部运行时,双词不会降低性能,CPU 仍然需要额外花费周期来从外部系统中处理64位的数据。
- 这是R4300i的一处阉割(R4000有完整的64位数据总线)。
- 32位地址总线: 最多可以寻址4GB的物理内存。
- 5级流水线: 最多可以分配五个指令用于执行 (详细解释可见于 前一篇文章 )。
- 24 KB L1 缓存: 分为 16 KB 指令缓存与 8 KB 数据缓存。
在芯片内也有一个内置的 浮点处理单元 (FPU) 。 VR4300将其确定为一个协处理器(CP1)。然而, 它安装在ALU旁,并且只能通过CPU的内部ALU流水线进行访问,这意味实际并不是作为协处理器使用的。 另一方面,FPU仍然有一个专用的寄存器并将加速操作64位和32位浮点数的指令执行速度。 最后,这个单元遵循IEEE754标准。
简化的内存访问
RAM 的组成方式依循 统一内存架构 或 'UMA' ,其中所有可用的 RAM 只集中在一个地方,任何需要RAM 的组件都会访问这个共享位置。 在这种情况下,决定其访问权限的组件是GPU。
之所以选择这种设计,是因为它节省了大量的生产成本。另一方面,如果不加以适当管理,将会导致内存访问冲突。
没有 DMA 控制器?
由于统一内存架构,CPU不再能直接访问内存,因此GPU也将提供DMA 功能。
内存设计
除了UMA以外,RAM 的结构有点复杂,因此我会试图保持简单。 让我们开始...
系统实际包含4.5 MB 的内存,但它使用了9 位数据总线连接,这个数据总线中为 GPU 保留了第 9 位(我将在"图形"部分中详细解释)。 因此,除GPU外,每个组件都只能寻址 4 MB。

此系统的内存布局。 我假设CPU-RCP总线速度是RCP的时钟速度或CPU的时钟速度,但我还无法确认这一点。
安装在主板上的内存类型是Rambus DRAM (RDRAM) ,这只是与SDRAM竞争成为下一标准的另一种设计。 RDRAM使用 串行连接 (一次传输一位) ,而SDRAM 则使用 并行连接 (一次传输多个位)。
延迟与速度
RDRAM 延迟与安装的内存芯片数量成正比 。 考虑到这个系统的内存容量,由此产生的延迟是很重要的(据报道大约是640 纳秒 )。 内存使用了250 MHz的高频率来补偿这个问题(比 CPU 快大约 2.6 倍)。 任天堂宣称RDRAM能够提供高达500MB每秒的连续读写速度。
此外,beyond3d论坛上的一些讨论声称任天堂选择在主板上使用NEC的uPD488170L内存芯片。 这些芯片实现了一种叫做"Rambus Signaling Logic"的技术,这种技术使传输速率翻倍。 这可能解释了为什么一些信息源声明"有效"频率是500 MHz。
改进空间
有趣的是,这台主机上可用的 RAM 大小可以通过安装扩展包来增加:一个外观奇特的小盒子,增加了另一个4.5 MB。 虽然这个配件对于一些游戏是可选的(大多数游戏没有使用它),但某些标题如《Donkey Kong 64》或《The Legend of Zelda: Majora's Mask》设计时要求使用扩展包,没有它会显示错误屏幕。

扩展包 ,一个单独出售的可选配件(有时随要求使用它的游戏一起提供)。

跳线包。 在没有扩展包的情况下,必须安装它来终结RDRAM总线。
奇怪的是,内存总线必须被终结,所以控制台总是配备一个终端器(称为跳线包)安装在扩展包的位置。 现在,您可能会问,如果您在没有安装任何包的情况下打开主机,会发生什么情况? 实际上什么都没有,你得到了一个空白屏幕!
内存管理
VR4300 包括另一个被称为 系统控制协处理器 (CP0) 的协处理器,它包含一个 内存管理模块 (MMU) 和一个 转换查找缓存器 (TLB), 前者处理如何组织和缓存内存。 VR4300可以寻址32位内存地址,最高4GB的内存,但我们已经看到, 我们在这个主机中没有 4 GB 的 RAM (即使在考虑了映射到内存的 I/O)。 因此,MMU接管内存寻址,并提供一个有用的内存映射,使得物理内存多次镜像。 因此,内存地址被视为"虚拟地址"(而不是"物理地址")。 此外,TLB可以让开发者在某些镜像中定义他们自己的内存映射,而不会导致(重大的) 性能下降。
起初,这似乎是多余的,但每个镜像(称为"片段")都连接到不同的电路(例如: L1 缓存、未缓存数据 、TLB 地址)这样开发人员可以根据需要选择最合适的部分以优化内存使用。
为了安全目的,有些区段区分了"内核"地址和"用户"地址。 N64总是以"内核"模式运行,因此"非TLB内核缓存"(称为"KSEG0") 是游戏中最常见的部分。
MMU也可以在64位模式中工作,其中内存地址长度为40位。 这意味着虚拟地址空间包含 1 TB 值的地址... 但我认为Nintendo 64 不会利用这个特性!
