Sound and Vision:
A Technical Overview of the Emotion Engine
本文主要分析了Sony出品的Playstation 2的核心:Emotion Engine。当然,不可能只关注于Emotion Engine而忽略PS2的其他部分。所以在文章的开头,首先对PS2的整体设计进行简介,然后我们再把目光集中在Emotion Engine上。
PLAYSTATION2的整体结构
在整个PS2结构中我们如此关注于Emotion Engine是因为,与标准PC的CPU相比,Emotion Engine并不是通用处理器。PC的CPU是为了完成SPEC测试而设计的……当然,这么说刻薄了一点,是让应用程序代码的执行速度越快越好。不可避免 地,由于应用程序代码的形式与功能五花八门,CPU必须有足够的兼容性以执行一个程序员所能写出来的各种稀奇古怪的东西。在一个PC系统中,通用性的 CPU必须依赖于所添加的特殊硬件才能完成诸如图形加速,网络通信,音频处理等任务。
PS2则又有不同,它生来就是为了让一种程序的运行效果好到极致:3D游戏。虽然PS2也可以上网,收发email,或其它一些软件,但这些都排在第二 位。PS2就是专为运行3D游戏而存在的,它所做的就是尽其所能地产生各种*真的视听效果来营造一个虚拟的世界。几乎所有PS2的硬件都是为此而设计的。
那PS2如何生成3D图像和音响效果呢?下面我们来看PS2的主要部件构成:
由图可见,PS2主要分为4大部分。I/O Processor(简称IOP)控制所有的U**,FireWire和手柄接口。当你在PS2上玩游戏的时候,IOP将手柄输入送给Emotion Engine(简称EE),从而由Emotion Engine去更新游戏场景。可以说,Emotion Engine是PS2的核心,是真正使PS2独一无二的关键部件。Emotion Engine主要控制以下两类运算:
几何运算(Geometry calculations):几何变形,几何变换等。
行为/世界模拟(Behavior/World simulation):敌方AI,两个物体间的磨擦,模拟生成海浪的高度等。
其他功能(Misc. functions): 程序控制,管理等。
总而言之,Emotion Engine的任务就是产生display lists(一系列显示命令的序列)送给Graphics Synthesizer(PS2的图形加速卡,简称GS)。GS负责执行所有的标准视频加速函数,它的作用是将EE传来的display lists显示出来。最后,Sound Processor(即PS2的声卡)以AC-3和DTS输出3D数字音频信号
Emotion Engine基本构架
正如上文所提到的,Emotion Engine的主要输出是display list。生成这些display list需要进行大量的几何运算。比如说,你正在运行赛车游戏,在拐弯进入下一场景前得首先算出轮胎与地面之间的虚拟摩擦。又如第一视角射击游戏,必须执 行敌方AI的路径查找代码,这样才能知道如何将其放入每一帧。在每一帧画面的背后都有如此多的要素影响到屏幕上的输出。所有这些几何运算,物理运算,AI 及数据传输都由下列单元来执行:
MIPS III CPU core
Vector Unit (向量处理单元,共有两个,VU0 and VU1)
Floating-point coprocessor (浮点协处理器,FPU)
Image Processing Unit (一个增强型的MPEG2解码器,IPU)
10-channel DMA controller (十道DMA控制器)
Graphics Interface unit. (图形接口单元,GIF)
RDRAM interface and I/O interface (连接RDRAM和IOP)
所有上述单元(除FPU之外)都与128位共享式内部总线相连。
可以看出,VU进一步分为两个独立的128-bit SIMD/VLIW向量处理单元,VU0,VU1。两者虽然在微结构上是相同的,但运行时各自扮演不同角色。Emotion Engine的设计者Toshiba公司并不认为使用三个通用硬件(CPU和两个VU)以满足所有需求是明智的。相反,Toshiba提升了设备应完成的 功能,根据所需功能定制设备,最后将设备组织为逻辑单元。形象地说,这些逻辑单元就像是由各具天赋的成员合理搭配以发挥最大才华而组成的工作小组。我们接 着就来看看这些小组和小组成员吧:
CPU + FPU: 基本程序控制与管理等。
CPU + FPU + VU0: 行为与感情演绎,物理运算等。
VU1: 几何运算以产生display lists 通过GIF送Graphics Synth。
IPU: 图像解压。
CPU/FPU/VU0工作组
FPU和VU0是MIPS III CPU core的协处理器。这就是说,虽然三者整体上构成一个逻辑功能块,但CPU是主要控制设备,而FPU和VU0只是增强了它的功能。CPU/FPU/VU0工作组有共同的目标:感情演绎,物理运算,行为模仿等。
在PS2中有两个部件使这个工作组捆绑在一起且工作时关系密切。第一,它们运行时要相互通信:专用的128位协处理器总线将VU0和FPU与CPU直接相 连,而不需要使用共享总线,这就极大的提升了处理速度。专用128位总线使CPU能直接访问VU0的寄存器,从而使VU0能完美地扮演MIPS III 协处理器的角色。
另一个重要部件是将CPU核心和VU0连在一起的Scratch Pad RAM。SPRAM是集成在CPU上的一块高速RAM,但CPU和VU0都可在此存数据。同时SPRAM也作为数据送128位总线前的临时存储区域。 SPRAM就像是一块共享工作区,CPU和VU0就在这里生成数据,然后再发送到指定设备。
VU1/Graphics Synth工作组
另一个重要的工作组由VU1和Graphics Synthesizer(通过GIF通信)。正如VU0由专用总线与CPU核心相连,VU1也有自己的专用128位总线与GIF相连。但VU1和 Graphics Synth并不像CPU/FPU/VU0工作组结合得那么紧。与CPU控制VU0相比,VU1和GS更像是平等的合作者。
CPU/FPU/VU0与VU1/GS的协同工作方式
即使是PS2的设计者们限定了各部件的功能,其整体设计还是富有弹性的。你可以自由地在工作组之间分配程序的运行。比如说,CPU/FPU/VU0工作组 正在生成display list,同时VU1在与之并行地进行图形几何处理,两者可同时将display list送入GIF。
或者,换一种方式,将CPU/FPU/VU0工作组作为VU1的前端处理器。CPU和VU0执行程序代码并从主存中读取数据,生成的虚拟世界信息交与VU1,并由VU1转化为display list。
这种弹性为游戏开发者提供了最大的便利,使之能够从容地设计3D场景的生成与渲染过程,以产生各种各样的特殊程序效果。
Summary&conclusions
我想上述介绍已经基本上说明了PS2的工作原理。如果你需要了解进一步信息,请访问http://www.arstechnica.com/ 及其相关站点。下面列出PS2主要性能指标表,就此作为文章的结尾吧。
Feature Description
CPU MIPS III 2-issue superscalar with 128-bit multimedia extension
Instruction cache 16K, two-way
Data cache 16K, two-way
SPRAM 16K
Data Bus 128-bits
FPU 1 FMAC + 1 FDIV
VPU
VPU0 4 FMACS + 1 FDIV
VPU1 4 FMACS + 1 FDIV
EFU (attached to VPU1) 1 FMAC + 1 FDIV
DMA Controller 10 channels
IPU MPEG-2 decoding accelerator
后记:
本文原来是网上一篇英文文章,原作者Jon "Hannibal" Stokes对PS2、PC的体系结构及各种性能指标之间的权衡都有着深入的了解。原文中还有很大一部分是描述PS2的MIPS III和VPU的工作原理,但是这一部分我实在看不懂,没办法写出来。这篇文章的中心就是--权衡的概念。正如文中所说PS2是专用机,PC是通用机(相 对来说),两者程序的运行特征南辕北辙(关于这一点,参见The Playstation2 vs_ the PC),自然会在硬件设计上突出不同的特性。与PC机相比,游戏机的设计(无论是Sony,Nintendo,还是已经退出江湖的Sega)看起来有着很 多离经叛道的地方,但换一个角度看,实际上往往正是这些地方,成为游戏机设计上真正的闪光点。
ps2架构 ps2架构怪异
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
技术背景我们在做Linux平台x86_64架构或aarch64架构的推送模块的时候,有公司提出这样的技术需求,希望在Linux平台,实现轻量级RTSP服务,实现对摄像头或屏幕对外RTSP拉流,同步到大屏上去。技术实现废话不多说,直接上代码,先调用start_rtsp_server()指定端口号,启动RTSP服务。LogInit(); NT_SmartPublisherSDKAPI push_a
linux x86 rtsp linux arm64 rtsp linux arm64 rtsp服务器 linux arm64 rtsp 大牛直播SDK