PlayStation 架构
摘要
对初代PlayStation硬件架构的详细分析,涵盖CPU设计及其历史背景。
暂无内容
查看缓存全文
缓存时间: 2026/06/03 12:39
# PlayStation 架构
来源:https://www.copetti.org/writings/consoles/playstation
## 辅助图片
- 模型图 (https://www.copetti.org/writings/consoles/playstation#cover-model)
- 主板图 (https://www.copetti.org/writings/consoles/playstation#cover-motherboard)
- 原理图 (https://www.copetti.org/writings/consoles/playstation#cover-diagram)
---
## 快速介绍
Sony 深知 3D 硬件的开发过程可能极其繁琐。因此,他们的首款主机将保持设计*简洁*且*实用*……尽管这可能要付出代价!
---
## CPU
本部分将深入剖析**Sony CXD8530BQ**——该主机搭载的两大芯片之一。用今天的话来说,这可以称为“片上系统”。
### 起源
主处理器遵循一种“X 由 Y 设计,基于 Z,并由 W 二次供应”的安排,这种关系用几句话概括起来相当复杂。那么,不妨先回顾一下历史背景:
- 一点历史 (https://www.copetti.org/writings/consoles/playstation#tab-1-1-a-bit-of-history)
- MIPS 与 Sony (https://www.copetti.org/writings/consoles/playstation#tab-1-2-mips-and-sony)
- LSI 与委托 (https://www.copetti.org/writings/consoles/playstation#tab-1-3-lsi-and-the-commission)
#### 一点历史
图片 (https://www.copetti.org/images/consoles/ps1/quadra.9de0a14f61f33fd2806050994496b9ace5619460cd9fdf761af55159806e3f4a.webp)一台 Macintosh Quadra 700 旁边放着一块 PowerPC 升级卡。与众多采用 Motorola 68k 的厂商一样,90 年代迫使它们必须转向基于 RISC 的 CPU(例如 Apple 转向 PowerPC)。90 年代初期,许多流行 CPU 的命运发生了转折。曾经的领先 8 位处理器,如 Z80 (https://www.copetti.org/writings/consoles/master-system/#cpu) 和 6502 (https://www.copetti.org/writings/consoles/nes/#core-functionality),早已淡出聚光灯下;而 Motorola 著名的 68000 (https://www.copetti.org/writings/consoles/mega-drive-genesis/#cpu) 以及其他在 80 年代末取得成功的 16 位设计 (https://www.copetti.org/writings/consoles/super-nintendo/#cpu),也面临被替代的命运。甚至在当时的 PC 领域,Andrew S. Tanenbaum 在与 Linus Torvalds 的著名辩论中预测,Intel 的 x86 架构在家庭市场上只剩*五年*寿命。
乍看之下,技术发展似乎撞上了南墙。然而实际上,一批相对不知名的 CPU 正开始进入主流设备。这些设计很多源自学术界,旨在验证特定的设计原则。这一时期的典型新例子包括:
- **MIPS**:被 Silicon Graphics Incorporated 采用(面向图形工作站)。
- **PowerPC**:被 Apple 采用(面向桌面出版)。
- **SPARC**:由 Sun Microsystems 开发(面向服务器和商业工作站)。
- **ARM**:由 Acorn 开发 (https://www.copetti.org/writings/consoles/game-boy-advance/#the-cambridge-miracle),最初面向消费市场,后扩展到 PDA、手机及其他嵌入式设备。
- ……还有更多尚未最终定型或被主要行业采用的“微控制器”芯片——例如**Hitachi SH**和**NEC V810**。令人惊讶的是,它们后来分别被 Sega Saturn (https://www.copetti.org/writings/consoles/sega-saturn/) 和 Nintendo Virtual Boy (https://www.copetti.org/writings/consoles/virtual-boy/) 采用。
所有这些处理器都有一个共同点:它们遵循**精简指令集计算机**(RISC)法则,这彻底改变了此类芯片的设计和编程方式。RISC 架构的一条规则是:单条指令不能同时进行内存访问和寄存器操作。这使得硬件设计者能够简化执行指令的电路……然后通过并行技术加以增强。
#### MIPS 与 Sony
图片 (https://www.copetti.org/images/consoles/ps1/irix.52ab50e7f95bafd141358b8f398dbdd9af62e5ae84f492fc2a0c7d3226e1480f.webp)SGI Iris 4D/80,一款采用双塔设计的强大图形工作站。4D 系列首次将 MIPS CPU 引入 SGI 计算机,此型号搭载 R2000 处理器[\[1\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-iris)。这张照片是我于 2025 年 3 月第二次参观计算机历史博物馆(加利福尼亚州山景城)时拍摄的。**MIPS Computer Systems** 诞生于其创始人(斯坦福大学教员)的热忱,他们渴望将研究成果转化为实体处理器。这正好迎合了 80 年代硅谷风险投资家们急于投资此类创新的胃口[\[2\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-chm_mips)。他们的首款 CPU“MIPS R2000”被认为是第一款采用 RISC 设计的商用 CPU,并在许多 UNIX 工作站中占有一席之地。
然而,直到 1987 年,MIPS 的芯片才成为热门话题,这要归功于被**Silicon Graphics Incorporated**(SGI)采用(并最终收购),用于驱动其设备。SGI 在计算机图形市场是一支重要力量,尤其是在硬件加速顶点管线 (https://www.copetti.org/writings/consoles/nintendo-64/#graphics) 的开发上——该功能原本由软件(在 CPU 内)完成。合并之后,SGI 在 CPU 和图形领域均占据了领先地位。
在 PlayStation 开发之前,MIPS 转型为基于**IP 授权**的商业模式:CPU 设计以许可证形式出售,被许可方可以自由定制和生产这些设计。其产品目录中包括**R3000A CPU**,属于低端系列。因此,R3000A 并非旗舰产品(不像后来被其他人 (https://www.copetti.org/writings/consoles/nintendo-64/#cpu) 选用的 R4000),但在成本方面却很有吸引力。
回到主题,Sony 自研了音频和图形芯片,但仍需一款领先的芯片来驱动这两者。选定的 CPU 必须足够强大以展示 Sony 芯片的*出色*能力,同时又要保持价格实惠,使主机具有竞争力。
#### LSI 与委托
同时,**LSI Logic**(一家半导体制造商)是 MIPS 的被许可方,为企业提供“自行构建”CPU 的计划。这项名为 **CoreWare** 的服务允许客户通过选择一系列构建模块来组装自定义 CPU 包[\[3\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-lsi)。CoreWare 库中包含“CW33300”模块,这是一个源自 LSI LR33300 的 CPU 核心——LSI 也将其作为现成 CPU 芯片商业化。
那么,我讲这些是为了什么?结果表明,LR33300 和 CW33300 都与 **MIPS R3000A 系列二进制兼容**。它们的架构在某些方面略有不同,但编程接口(MIPS I ISA)是相同的。
最终,Sony 委托 LSI 构建其 CPU 包。他们选择了 CW33000,更改了一些部分,并与其他模块集成,最终形成了 PlayStation 主板上看到的芯片。
### 规格
图片 (https://www.copetti.org/images/consoles/ps1/cpu_chip.008e74d7bdfa1375cbdc1b606658115ea5e82c2613fedaa52f0f3ba996b1f6f7.jpg)PlayStation 主板上的 SoC 芯片,其中包含基于 MIPS R3000A 的核心。最终 CPU 核心运行在 **33.87 MHz**,并具有以下特性:
- **MIPS I** ISA:MIPS 指令集架构的第一个版本。其中,它使用 **32 位字**,并包含乘法和除法指令。
- **32 个通用寄存器**和 **2 个乘除寄存器**:也是 32 位。其中一个通用寄存器(`R0`)硬连线到零,这是 RISC 设计的常见特点。
- **32 位数据总线**:在 PS1 中,该总线分为两条:- **主总线**(32 位):连接 MDEC 和 GPU。 - **子总线**(16/8 位):连接其余组件和 I/O。该总线通过**总线接口单元**桥接,该单元还允许访问 GPU 和 SPU 的特殊端口。
- **32 位地址总线**:可访问高达 4 GB 的物理内存。换句话说,就是 RAM、内存映射 I/O 等。
- **5 级流水线**:允许同时处理最多五条指令(详细解释请参考一篇文章 (https://www.copetti.org/writings/consoles/sega-saturn/#cpu))。
- **4 KB 指令缓存**:也可以被“隔离”,允许程序直接操作指令缓存。
- 奇怪的是,**没有数据缓存**。通常为其保留的 **1 KB 内存** 被映射到一个固定地址[\[4\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-mame_cpu)。这个区域被称为 **Scratchpad**,用作“快速 SRAM”。
图片 (https://www.copetti.org/images/consoles/ps1/edo_chips.83e200317ec05acf9a737b761c1d9b3231c2948cf8b732e88e92d7b8e168d4b6.webp)四块 512 KB 的 EDO RAM 芯片。为了完成有意义的工作,Sony 提供了 **2 MB 的 RAM** 用于通用目的。有趣的是,他们主板上安装的是 **Extended Data Out**(EDO)芯片。这些芯片比典型的 DRAM 效率稍高,延迟更低。
### 接管 CPU
在某些时刻,任何子系统(图形、音频或 CD 驱动器)都需要以高速率传输大量数据。然而,CPU 并不总能跟上需求。
因此,CD-ROM 控制器、MDEC、GPU、SPU 和并行端口在需要时会被授予访问专用 **DMA 控制器** 的权限。**直接内存访问**(DMA)接管主总线,独立执行数据传输。这比通过 CPU 路由传输可显著提高吞吐量,尽管仍需要 CPU 来设置 DMA 操作。
还值得注意的是,一旦 DMA 启动,CPU 将无法访问主总线。这意味着 CPU 将会空闲,除非它在 Scratchpad 中有东西可以忙!
### 补充核心
与其他基于 MIPS R3000 的 CPU 一样,CW33000 支持最多配置四个协处理器。Sony 对其进行了定制,包含了三个:
- 系统控制协处理器 (https://www.copetti.org/writings/consoles/playstation#tab-2-1-system-control-coprocessor)
- 几何变换引擎 (https://www.copetti.org/writings/consoles/playstation#tab-2-2-geometry-transformation-engine)
- 运动解码器 (https://www.copetti.org/writings/consoles/playstation#tab-2-3-motion-decoder)
#### 系统控制协处理器
标识为“CP0”的**系统控制协处理器**是 MIPS CPU 中的一个常见模块。在像这样的基于 R3000 的系统中,CP0 管理缓存的实现。因此,它允许直接访问数据缓存(以“Scratchpad”形式)和指令缓存(通过“缓存隔离”)。控制协处理器还处理中断、异常和断点——后者在调试时很有用。
> 等等,协处理器不是应该只*扩展*CPU 功能吗?为什么 CP0 与 CPU 紧密耦合?
的确,R3000 核心依赖系统控制协处理器来使用许多组件。这是否“合法”取决于对“协处理器”一词的解释。根据 MIPS 的定义,协处理器严格来说并不是 CPU 的可选部分——它也可以指挥 CPU 的外围环境(例如缓存、中断)。因此,协处理器可以是系统的一个组成部分。在讨论与 MIPS 相关的系统时需要记住这一点。
后来的 R4000 系统 (https://www.copetti.org/writings/consoles/nintendo-64/) 将内存管理单元(MMU)和转换后备缓冲器(TLB)集成到该模块中,从而增强了其能力并承担了新的角色 (https://www.copetti.org/writings/consoles/nintendo-64/#memory-management)。
#### 几何变换引擎
“CP2”,或称**几何变换引擎**(GTE),是一个专门的数学处理器,用于加速向量和矩阵计算。
虽然只操作定点数,但它仍然为 3D 图形提供了有用的操作,例如:
- 矩阵或向量乘法、加法、向量平方。
- 透视变换(用于 3D 投影)。
- 两个或三个向量的外积(后者用于裁剪)。
- 许多使用不同参数的插值函数。
- 深度提示和从光源导出的颜色值(用于光照和颜色操作)。
- Z/深度平均。我怀疑这是用于“排序表”的(在“图形”部分我会进一步解释)。
你不需要记住所有这些来阅读文章的其余部分!只需记住,GTE 负责图形管线的初始阶段,包括 3D 投影、光照和裁剪。这将有助于生成发送给 GPU 进行渲染所需的数据。
#### 运动解码器
**运动解码器**,也称为“MDEC”或“宏块解码器”,是另一个位于 CPU 旁边的处理器。这次,它负责将“宏块”解压缩为 GPU 可以理解的格式。宏块是一种数据结构,包含以类似 JPEG 方式编码的图像。
MDEC 解压缩由 24 bpp(每像素位数)的 8x8 像素组成的位图。总体而言,MDEC 每秒可以计算 9000 个宏块[\[5\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-walker),从而能够以每秒 30 帧的速度流式传输 320x240 像素的**全动态视频**(FMV)。
DMA 用于通过 CD-ROM、RAM 和 MDEC 传输压缩数据。反向路径也使用相同的路径,但此处的目标是 VRAM。
虽然该组件位于 SoC 内部并共享相同的数据总线,但它不是 MIPS 协处理器;CPU 和 DMA 通过内存映射访问它,而不是拦截指令。
关于 MDEC 单元的更多信息,我建议查阅 Sabin[\[6\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-sabin) 和 Czekański[\[7\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-jakub_mdec) 的资源。
### 缺失的单元?
到目前为止,我们看到了“CP0”和“CP2”,但是**“CP1”在哪里?**嗯,那实际上是为**浮点单元**(FPU)保留的——恐怕 Sony 并没有提供。这并不意味着 CPU 无法执行小数算术;只是速度不够快(使用软件例程时)或精度不够高(依赖定点算术时)。
涉及物理、碰撞检测等的游戏逻辑仍然可以通过定点算术来应对。定点编码用固定数量的小数位数来表示十进制数。这会导致某些操作丢失精度,但请记住:这是一个视频游戏主机,而不是专业飞行模拟器。因此,精度与性能之间的权衡可以认为是合理的。
顺便提一下,如果你想快速复习一下“定点”、“浮点”、“十进制”和“整数”等概念,我推荐阅读 Gabriel Ivancescu 的帖子[\[8\]](https://www.copetti.org/writings/consoles/playstation#bib:cpu-gabriel)。
### 延迟重重
如前所述,CW33300 是流水线处理器——这意味着它对多条指令进行排队,并在不同阶段并行执行。这极大地提高了指令吞吐量,但
相似文章
PC Engine CPU
关于PC Engine (TurboGrafx-16) CPU HuC6280的详细技术概述,这是一款基于65C02的快速8位处理器,涵盖其架构、时钟速度以及与NES和SNES CPU的差异。
超级任天堂卡带内部揭秘
对超级任天堂卡带的详细技术分析,涵盖 CIC 复制保护、ROM 容量分布、带电池备份的 SRAM 以及 Super FX 等增强处理器。
SNES 图形系统工作原理
基于 Jonathon Donaldson 的原理图,对超级任天堂图形硬件的详细技术解释,包括 PPU1 和 PPU2 芯片、VRAM、OAM 和 CGRAM。
检查航天飞机I/O处理器中的电路板
详细检查航天飞机I/O处理器中的两块电路板,解释其多线程架构、网络接口以及使用基于熔丝的PROM进行微码存储。
@akshay_pachaar: CPU vs GPU vs TPU vs NPU vs LPU,可视化解释:5种硬件架构驱动当今AI。每种都做出了根本性…
一篇对比五种AI硬件架构(CPU、GPU、TPU、NPU、LPU)的解说文章,附带可视化图表,涵盖了它们在灵活性、并行性和内存访问方面针对AI工作负载的权衡。