« Nintendo 64 架构 (index)

Nintendo 64 架构

Chapter 3: 中央处理器 (CPU)


目录

  1. 简化的内存访问
  2. 没有 DMA 控制器?
  3. 内存设计
    1. 延迟与速度
    2. 改进空间
  4. 内存管理

Nintendo 64的主处理器的起源是 MIPS R4000, MIPS的新型前卫CPU。 于1991年发布,R4000最明显的新颖之处是包含了 64位能力,这导致了总线、寄存器和计算单元的规模增加,以便有效地操纵64位数据。 另一方面,开发者通过新的 MIPS III 指令来访问这些能力。 总之,R4000使新的应用程序可以操纵更大的数据块,而不需要消耗额外的周期。

对于下一代主机,任天堂考虑将工业硬件引入家用主机。 与拥有大量内部组件且只需第二来源的MIPS的Sony不同,任天堂直接与MIPS(及许多图形工作站)的所有者合作,设计了他们的整个生态系统。 那家公司是Silicon Graphics (SGI)。

不管怎样,R4000是昂贵的产品(大约400美元 ),这使得游戏主机不能使用它。 然而,任天堂不想放弃它最先进的产品, 这样他们就选择了一个来自NEC的叫做 R4300i的低端变体。

Image
MIPS R4300i CPU(1994年)

最终,任天堂和SGI选择的CPU变成了运行在93.75 MHzNEC VR4300。 这是MIPS R4300i的二进制兼容版本,具有以下特性:

在芯片内也有一个内置的 浮点处理单元 (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

Image
此系统的内存布局。 我假设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》设计时要求使用扩展包,没有它会显示错误屏幕。

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

Image
跳线包。 在没有扩展包的情况下,必须安装它来终结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 不会利用这个特性!


Previous: 2. 快速入门

Next: 4. 图形


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站