« NDS架构 (index)

NDS架构

Chapter 3: 中央处理器 (CPU)


目录

  1. ARM的新领域
    1. 转折点
  2. 任天堂首次亮相的SoC
    1. ARM7TDMI
    2. ARM946E-S
  3. 互连
  4. 主存储器
  5. 向后兼容性
  6. 性能阉割

和任天堂的上一代掌机一样,NDS的系统围绕一个名为CPU NTR的大芯片展开。 其中"NTR"是"Nitro"的缩写,是最初的NDS的代号。 该SoC也是一个成功的任天堂-ARM合作伙伴关系的延续,该合作始于Game Boy Advance。

现在,在我们查看新CPU之前,让我们看看ARM在90年代后期的发展,因为这影响了最终在任天堂DS中找到的技术。

ARM的新领域

在90年代中期,ARM公司从移动市场中获得了大量业务(在手机变得"智能"之前)。 然而,它在满足某个特定行业方面遇到了困难:高性能计算。 ARM7被许多移动设备广泛采用,但它未能完全满足苹果公司(其"Newton"PDA系列)和Acorn公司(其RiscPC系列)的需求,这些公司都发布了可以从更快的CPU中受益的软件。 除了缺乏64位解决方案(MIPS已经在商业化外),ARM还无法生产出速度超过40 MHz的CPU。 总体来说,瓶颈开始累积。

Image
DEC 的 'Digital Personal Workstation' 型号 433au(1997 年),配备 Alpha 21164A CPU。

然而,在ARM7线的商业化过程中,ARM已经开始开发一个称为ARM8的继任者,这是进入高性能市场的第一次尝试。 巧合的是,Digital Equipment Corporation (DEC),这家以其 PDP 和 VAX 系列机器(所谓的'小型计算机')及复杂的 VMS 操作系统而闻名的美国公司,正面临一个相反的问题:他们难以基于其高性能解决方案交付低功耗 CPU。

好吧,事情是这样的,ARM 的授权模式 为 DEC 提供了一个机会,它选择通过借用 ARM 的材料(其指令集和微架构)开发新的 CPU。

最终,DEC借助ARM的帮助,采用其基于RISC的Alpha处理器的数据路径设计,并与ARM的微架构相结合 。 这种合作产生了StrongARM CPU,于1996年发布,针对高性能市场。

Image
这是用于Acorn RiscPC CPU升级卡的233 MHz StrongARM CPU。

StrongARM是一种基于ARM的新型CPU,其特点包括:

值得一提的是,这个芯片仍然能够以3.3 V的电源工作,就像以前的ARM芯片一样。 事实上,StrongARM需要2伏电压,仅消耗1瓦功率 。 相比之下,英特尔的200 MHz奔腾芯片运行在3.5 V,功耗高达15.5 W 。

正如预期的那样,Acorn和Apple都被这个新芯片所迷住,它们分别立即使用DEC的发明来出货CPU升级和新的Newton模型。

同年,ARM还发布了他们承诺的基于ARM8的CPU,ARM810。 它相对较慢,并且在实际应用中没有提供任何优势。 因此,投入不足和时间过晚导致了没有商业兴趣。 因此,ARM继续改进ARM7系列以适应移动市场。 然而,DEC 的 CPU 潜力是如此具有破坏性,以至于 ARM Holdings 吸收了 StrongARM 的设计 ,以生产其下一代 CPU,即 ARM9(这也是任天堂 DS 所采用的)。

转折点

借助StrongARM,ARM还巩固了其在掌上市场的地位,完全取代了作为可行替代品的MIPSSuperH。 从那时起,ARM走上了成为最广泛采用的移动设备架构的道路。

不幸的是,对于DEC来说,这个CPU将是他们在1998年被Compaq收购之前的最后一个重大成就。 然后,StrongARM 的命运将掌握在英特尔手中,他们在新的 'Intel XScale' 系列下继续开发... 直到他们清算该部门以专注于 '低功耗' 的 x86 CPU(即英特尔 Atom)。 15年后,不仅英特尔错失了移动市场的机会,现在他们还发现自己在桌面领域与ARM展开激烈竞争。

任天堂首次亮相的SoC

除了上述改进外,CPU NTR还捆绑了一个有趣的多处理器架构,使用了两种不同的ARM CPU,ARM7TDMIARM946E-S。 这种设计是在ARM Holdings正式发布多处理器解决方案之前完成的。 因此,考虑到当前的技术实现,可能有人认为NDS的多处理器架构不是很正统。

Image
CPU NTR芯片。

虽然这不是本系列第一次分析游戏机的并行系统,但是NDS的设计确与其他游戏机有很大不同。 例如,NDS的设计有别于世嘉土星"实验性质"的主从配置,也不同于PS1或者N64的"协处理器"方案。 NDS包括两台非常独立的计算机,可以分别独立执行操作。每台计算机都有一条专用的总线。 这种设计方法被称为非对称多处理(Asymmetric multiprocessing)。CPU因此而相互依赖,并将左右这款游戏机的整体性能。

现在让我们看看这两颗CPU。

ARM7TDMI

Image
ARM7的结构与组成部分。

首先说说我们较为熟悉的CPU。 ARM7TDMIGBA 的 CPU相同,但现在运行速度提高到约34 MHz(原速度的两倍)。 它仍然包含所有原有功能(特别是Thumb)。

然后讲讲新变化:由于任天堂的工程师将ARM7放置在大多数I/O端口旁边,这个CPU将负责调节和协助I/O操作。 事实上,另一个处理器不能直接连接I/O。 如你所见,ARM7不是负责整个系统的"主"处理器。它负责在多个组件之间传递数据,是用来分担一部分主CPU负载的"子处理器"。

ARM946E-S

Image
ARM9的结构与组成部分。

这是任天堂DS的"主"CPU,ARM946E-S。 它的运行速度为约67 MHz,所以并不是"StrongARM速度"。 然而,作为ARM9系列的一部分,该核心不仅继承了ARM7TDMIStrongARM的所有特性,还包括一些额外的部分,你可能会感兴趣:

任天堂在ARM9周围还添加了以下组件:

就NDS这硬件,也许不难发现孩子们喜欢这款游戏机的真正原因?

互连

到目前为止,我已经介绍了这两个CPU如何单独工作。 但是,作为一个整体运行,它们需要不断地合作。 为了实现这一点,两个CPU直接使用专用的FIFO单元进行"对话",该数据块包含两个64字节队列(最多16个元素),用于双向通信

Image
FIFO单元示意图。

具体工作方式如下:发送方 CPU(发送消息的 CPU)将一个 32 位数据块放入队列中,接收方 CPU 可以从队列中拉取该块并对其执行所需的操作。

每当队列上写入一个值,它可以被任一CPU主动获取(轮询),但这需要不间断地检查新消息(开销会很大)。 或者,也可以激活一个中断单元,以便在队列中有新消息时通知接收方。

主存储器

就像GBA一样,NDS的RAM也被分散在许多不同的位置,以便根据访问速率来安排数据远近。 总之,可用通用内存如下:

Image
该掌机的RAM模型。

向后兼容性

尽管架构与前代有很大不同,但NDS仍成功地保留了关键部分,从而原生支持GameBoy Advance (GBA)游戏。

但是,为了将NDS转为"内部"GBA,前者包括一组软件例程(software routines),可以将游戏机设置为AGB兼容模式(AGB Compatibility Mode)。 此过程中,实际上会终止ARM9,禁用大部分"特殊"硬件,重定向总线,将ARM7置于控制位置,并将其频率降至16.78 MHz。 最后,ARM7开始引导初始的AGB BIOS,该BIOS引导GamePak卡带(就像本来的GBA一样)。 这种模式仍然展示出一些GBA所没有的特征,例如游戏显示时有黑边框(在下一节中我们将看到新屏幕分辨率恰好更大)。 此外,由于NDS有两个屏幕,所以用户可以设置用哪个屏幕显示GBA游戏。

一旦进入GBA模式,就没有退路了,必须重置游戏机才能重新激活其余硬件。

性能阉割

单个廉价芯片中安装了这么多复杂组件,强制他们协作导致出了一些问题,这并不是什么神秘的事情。

让我们从 ARM9 开始。该 CPU 的运行速度是 ARM7 的两倍,但大部分(甚至是全部)的 I/O 都依赖于 ARM7。 因此,ARM9容易出现过多的停滞,直到ARM7回复。 不仅如此,ARM9的外部总线速度只有一半,因此存在一些瓶颈问题。

此外,主存储器总线只有16位。 无论哪个CPU需要从存储器中提取一个字(32位宽),接口都会阻塞CPU,然后占用高达3个"等待"周期,直到拼成一个完整的字。 内存访问不连续时影响最严重,每次内存访问都会阻塞。 这个问题在指令获取时也会出现。不幸的是,当时的ARM不支持顺序操作码获取(sequential opcode fetching),这也影响到了Thumb指令(因为每次获取16位数据都要以32位的块为单位进行)。 另一方面,这个一些资料所谓的"penalty",可以充分利用缓存和TCM来缓解。

总的来说,这意味着在最坏的情况下,这款ARM9"猛烈"的66 MHz的处理能力实际上会被降低到只有约8 MHz, 如果程序的缓存和TCM的利用率极低的话。

如果需要详细报告,我建议查看Martin Korth的文档,尤其是"DS Memory Timings"一节。


Previous: 2. 快速介绍

Next: 4. 图形


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

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