Playstation 2的体系结构

2021-02-24 22:07:02

Playstation 2并不是其一代中功能最强大的游戏机之一,但它设法达到了其他公司无法想象的普及水平。

这台机器远不及最初的Playstation那样简单,但是我们将了解为什么它没有与以前的复杂游戏机一样的命运。

在该控制台的核心,我们找到了一个功能强大的软件包,称为Emotion Engine或“ EE”,由Sony设计,运行频率约为294.91 MHz。该芯片组包含多个组件,其中一个是主CPU。其余的则由CPU处理,以加速某些任务。

主要核心是具有许多增强功能的MIPS R5900兼容CPU。这是打开控制台后第一个开始执行指令的芯片。该处理器提供以下功能:

MIPS III ISA:64位RISC指令集。等一下,是我还是这是竞争对手控制台上找到的相同的ISA?并非如此,索尼通过添加一些来自MIPS IV(预取和条件移动)的指令以及他们自己的称为多媒体指令的SIMD扩展来增强了ISA。

32个128位额外寄存器:另一个增强功能。使用多媒体指令可以更好地管理它们,对于矢量处理非常有用。这些寄存器通过128位总线访问,而其余的CPU使用内部64位总线。

24 KB L1缓存:分为16 KB的指令和8 KB的数据。它还实现了预取功能,以在指令和数据被请求之前缓存它们。这是通过包括额外的电路来完成的,该电路可以识别内存中哪些位置被更频繁地请求。

内核补充有专用的浮点单元(标识为“ COP1”),可通过32位浮点数(在C中也称为浮点数)加速操作。

Emotion Engine旁边是两个16 MB RAM块,总共提供32 MB主内存。使用的内存类型为RDRAM(déjàvu!),可通过16位总线进行访问。

首先,考虑到Emotion引擎的内部总线宽度高达128位,这听起来可能有些令人失望。但是,通过遵循双通道架构在策略上放置RAM芯片,该架构包括使用两个独立的16位总线(每个芯片一个总线)连接两个芯片以提高数据吞吐量。最终的设置提供了理论上3.2 GB /秒的速度,因此请放心,此控制台中的内存延迟不是问题!

在Emotion引擎的一个角落,有一个功能强大的DMA控制器或“ DMAC”,可在主存储器和Scratchpad之间传输数据。或在主存储器和EE内部任何组件之间。

数据传输以128位为一批,但是有趣的部分是:每八批,主总线就被临时解锁。这留下了一个小窗口,可以并行执行其他DMA传输(最多十个),或者让CPU使用主总线。这种操作方式称为切片模式,是此DMA单元上可用的许多模式之一。请记住,虽然切片模式可以减少主总线上的停顿,但这样做的代价是减慢了整个DMA传输的速度。

无论我们是否想要,随着Emotion Engine内部流量的大量涌入,该设计最终将遭受统一内存架构或“ UMA”的后果。即,&ml;多个独立组件试图同时访问主存储器,从而导致拥塞。为了纠正这些问题,Sony通过以下方式缓解了对内存的持续需求:

用大量缓存包装处理器。因此,仅在绝对必要时才需要访问主存储器。

添加一个128字节的回写缓冲区:与写收集管道非常相似,但是它不会等到25%满时才会首先检查总线的状态(即拥塞或空闲)。

对于可以从缓存中受益的应用程序来说,这听起来非常方便,但是那些任务(例如操纵显示列表)又该不该使用缓存呢?幸运的是,CPU提供了另一种称为UnCached的内存访问模式,该模式仅使用回写缓冲区。因此,不会浪费校正缓存的周期(缓存未命中的产物)。

此外,还提供UnCached加速模式。这增加了一个缓冲区,以加快内存中连续地址的读取。

在同一Emotion Engine程序包中,还有另一个处理器,称为图像处理单元或“ IPU”,这次是为图像解压缩而设计的。当游戏需要在不干扰主CPU的情况下解码MPEG2电影时,IPU很有用。

长话短说,游戏将压缩的图像流发送到IPU(希望使用DMA),然后将其解码为GPU可以显示的格式。 PS2的操作系统还依赖IPU来提供DVD播放。

最后,IPU还运行压缩的高分辨率纹理,从而节省了CPU使用率并减少了大笔传输。

竞争对手推出最新产品已经两年了。如果您阅读了上一篇文章,而只是开始阅读这篇文章,我想您仍然在等待使PS2拥有与当时一样强大的功能。现在,让我介绍索尼在情感引擎,矢量处理单元或“ VPU”中安装的非常重要的一组组件。

向量处理单元是一个旨在操作向量的小型独立处理器。特别是,由四个浮点组成的载体。这些处理器如此之快,它们仅在每个操作中仅花一个周期,这对于几何处理非常方便。

一些矢量单位存储器或'VU MEM':用作矢量单元的工作空间。它存储要操作的值和/或先前操作的结果。

矢量单位:处理器的核心。它包含一些内存(称为Micro Memory),用于存储程序(称为微集图),该程序指示本机如何操作在“VU MEM”中找到的数据。它实现了一个64位ISA,并且执行单元被分成两个并行子单元。第一个乘以或添加浮点,而另一个乘法堆叠或操作整数。这使得能够同时操作浮点和整数。

矢量接口:自动解压缩来自矢量单元可以理解的格式来自主存储器的顶点数据。该单元还可以将微型记忆传输到微内存。

要开始工作,矢量单位需要“kickstarted”。为此,主CPU负责提供微码。在情绪引擎中安装了两个VPU,但它们被不同地排列,让位于不同的用途和优化。

第一VPU,VPU0位于CPU和其他向量单元(VPU1)之间。它为主CPU提供了“协助”角色。

MicroMode:这是“传统模式”。 VPU将独立地从存储在微内存中的微生物图中执行“微指令”。

Macromode:VPU0成为主CPU的“COP2”,并通过专用的128位总线从主CPU接收的“宏指令”。宏指令具有与微小标记的功能相同,但使用不同的操作码。尽管如此,VPU执行单元不再拆分(意味着它只能一次执行一个指令)。

虽然此模式不会充分利用VPU0的所有组件,但它仍然加快CPU的矢量操作。此外,在简单性方面,共处理器比独立单元更容易编程(PC程序员会发现有用的东西)。

VPU0的存储器映射还可以访问其他一些其他VPU的寄存器和标志,可能是检查其状态或快速阅读其他VPU所完成的某些操作的结果。

找到的第二个VPU是VPU1,是VPU0的增强版本,具有微内存和VU内存量的两倍。此外,该单元包括称为基本功能单元或“EFU”的附加组件,其加速了指数和三角函数的执行。

VPU1位于VPU0和图形界面('门'到GPU)之间,因此它包括额外的总线,以便尽快向GPU馈送到GPU,而不使用主总线。

在另一边并由于其位置,VPU1仅在微焦点中运行。

很明显,此VPU专为三角运行而设计,并可作为GPU的预处理器。因此,它通常负责提供着名的显示列表。

这些单元可以利用的一种有用方法是程序生成。换句话说,不要使用硬编码的几何图形来构建场景,而是让VPU使用算法来生成场景。在这种情况下,VPU计算数学函数以生成几何图形,然后由GPU对其进行解释(即三角形,直线,四边形等)并最终用于绘制场景。

与使用显式数据相比,过程内容是并行任务的理想选择,它可以释放带宽,需要很少的存储空间并且具有动态性(程序员可以设置参数以获得不同的结果)。在某些方面可以从此技术中受益匪浅:

Bezier曲线(计算机图形学中一种非常流行的方程式,用于绘制曲线),这些曲线被转换为Bezier面片(显式几何),并根据所需的详细程度支持不同的精度。

另一方面,过程内容可能难以与动画配合,并且,如果算法过于复杂,则VPU可能无法在所需时间生成几何图形。

综上所述,过程渲染并不是一项新技术,但是由于有了VPU,它为进一步的优化和丰富的图形打开了大门。然而,这并不是一种简单的实现技术,索尼研发公司发表了各种论文,描述了在其控制台上使用的不同方法。

有了这些新功能,程序员现在可以在设计图形引擎方面拥有很大的灵活性。实际上,已经发表了多篇研究论文,这些论文对流行的管道设计进行了基准测试。

在第一个示例(并行设计)中,CPU在宏模式下与VPU0组合在一起以产生与VPU1并行的几何体。 CPU / VPU0组充分利用暂存器和缓存,以避免使用主总线,VPU1依赖该主总线从主存储器中获取数据。最后,两个渲染组同时将其各自的显示列表发送到GPU。

第二个示例串行设计提出了一种不同的方法,其中CPU / VPU0组用作VPU1的预处理器。第一阶段将获取并处理VPU1随后将变成显示列表的所有几何图形。

从理论上讲,到目前为止,这些都是示例,但是为了解释更“实用”的实现,我将参考Jon Burton发布的有关其PS2游戏开发的视频。

Travellers Tales的前任董事解释了他的团队如何实现完全封装在VPU1中的粒子系统。简而言之,VPU1专注于从其VU内存中读取预先填充的数据库,该数据库用于在任何给定时间计算粒子的坐标,而无需依赖任何其他组件。操作结果可以转换为“显示列表”并立即发送。

通过这种方法,CPU的负载大大减少,从而可以执行其他任务,如AI和物理。

这里有更多示例,但总而言之:现在由程序员来寻找最佳设置,这是一件好事。

考虑到Emotion Engine完成的所有工作,还剩下什么吗?实际上,最后一步:显示!

有一个简单但快速的专用芯片:图形合成器或运行频率约为147.46 MHz的“ GS”。它内置4 MB的DDRAM,可以在内部进行所有处理。因此,消除了访问主存储器的需要。根据所需的数据类型,使用不同的总线连接嵌入式RAM。

GS的功能比该站点以前审查过的其他图形系统要少。不过,它的工作速度非常快。

该GPU仅进行栅格化,并且会生成像素,映射纹理,应用照明和其他一些效果。这意味着没有顶点转换(VPU涵盖了这些转换)。此外,这是固定功能的管线,因此,您也无需花哨的调整或着色器,就可以使用固定的阴影模型(例如Gouraud)。

看起来很简单吧?好吧,让我们更深入地了解每个阶段会发生什么。

Emotion Engine通过将所需材料(纹理位图和颜色查找表,后者也称为“ CLUT”)填充其嵌入式DDRAM,启动了图形合成器,在GS的寄存器中分配值以对其进行配置,最后发出绘图命令(显示列表),指示GS在屏幕的特定位置绘制图元(点,线,三角形,子图形等)。

此外,GS将预处理一些稍后计算所需的值。最值得注意的是,数字差分算法值,将在绘图过程中用于插值。

使用计算出的先前值,渲染器从图元生成像素。该单元可以同时生成8个像素(带纹理)或16个像素(不带纹理),每个像素条目包含以下计算的属性:

纹理属性:包含DRAM中纹理的地址以及将在下一阶段使用的其他属性(坐标,详细程度,过滤器等)。

它还会执行剪刀测试,以丢弃帧区域之外的多边形(基于其X / Y值),并将某些像素属性转发到“像素测试”阶段以进行进一步检查。通过选择可用的两个选项之一,Gauraud和Flat,也可以提供照明。

然后将包发送到“纹理映射”引擎,但是每个属性都由专门的“子引擎”操作,该子引擎可以并行处理不同的属性。

该阶段由大型像素单元提供动力,该像素单元可以同时计算多达16个像素,此处纹理将映射到多边形(现在为像素)上。此外,此处还应用了雾化和抗锯齿效果。

纹理映射是从DRAM中定义的一个纹理缓冲区中获取的,尽管这是通过一个称为纹理页面缓冲区的单独区域进行接口的,该区域似乎充当纹理的缓存机制。使用此页面系统也可以映射CLUT。使用512位总线检索两个元素。

像素单元执行透视校正以将纹理映射到基元上(考虑到以前的仿射映射方法,这是一个很大的改进)。此外,它还提供双线性和三线性滤波,后一种与mipmapped纹理一起使用。

如果某些像素不符合一些要求,则会被丢弃。话虽如此,进行了以下测试:

Alpha测试:将像素的Alpha值(透明度)与“标准”值进行比较。这是因为在某些情况下,要求alpha值在一定范围内或大于/小于任意值。

目标Alpha测试:这会在将像素绘制到帧缓冲区之前再次检查像素的Alpha值。 深度测试:将像素的Z值与Z缓冲区中的相应Z值进行比较。 这避免了处理将隐藏在其他像素后面的像素。 最后阶段可以使用DDRAM中以前的帧缓冲区对我们的新像素应用一些效果: 抖动:需要修剪较大的RGBA值,因此可以应用抖动来减轻精度损失。 颜色钳制:应用Alpha Blending等操作后,新的RGB值可能超出有效范围(0-255),因此钳制会将值设置在范围内。 格式化:这会将在管道中生成的最终帧缓冲区转换为可以存储在内存中的格式。 最后,使用1024位总线将新的帧缓冲区以及更新的Z缓冲区写入内存。

GS中有一个专用组件,称为可编程CRT控制器或“PCRTC”,它将内存中的帧缓冲区发送到视频输出,因此您可以在电视上看到帧。但这并非如此:它还包含一个特殊的块,称为合并电路,允许alpha-blend两个单独的帧缓冲区(如果游戏想要重复使用前一帧以形成新的帧)。可以通过视频信号和/或写回存储器的结果帧。

据说,这肯定会带来更好的设计来刷新已经着名的人物。看看这个'之前和amp;后':

以下是来自新游戏系列的人物,这些是从地上的高水平细节建模:

值得一提的是,像龙任务一样的游戏实现了一个名为Cel Sading的自定义照明模型(但是,我之前提到的一个术语,但在我之前的文章中,我解释说,GPU主要负责这一点。在PS2案例中,所需的颜色计算可能是由情感引擎完成的,因为GS与其他GPU不如其他GPU一样灵活。

如前所述,PCRTC通过视频信号发送帧缓冲器。界面可以使用各种格式广播视频(与任何地理区域的电视一起使用):

PAL:最多可在50 Hz处发送640x512像素,渐进(576p)或隔行扫描(576i)。没有在市场上发现的游戏576P。虽然某些支持逐行模式,但它们在480P模式下这样做。

DTV:在逐行模式下最高达到720x480像素,在隔行扫描模式下为1920×1080。通过调整PCRTC设置,游戏还可以强制在1080p中输出。但是,这种模式无证并受到不可预测的行为。

这是否意味着PS2可以“显示高清”?从技术上讲& mldr是,但是我认为大多数游戏工作室都不会对尚未流行的格式承担性能损失的风险。

有很多模式可供选择,但是所有这些都取决于2000年代初期的格式采用,从而将其范围缩小到PAL和NTSC。同样,即使PAL提供的分辨率比NTSC更高,但某些欧洲版本的NTSC游戏还是采用信箱来掩盖未使用的水平线,并降低了刷新率以适应50Hz的限制(我称之为“坏端口”!)。

视频输出端口(多功能A / V)非常方便。它带有RGB,分量,S视频和复合。因此,所有重要信号都在那里,而无需专有适配器或内部修改。

新的音频芯片是对称为& mldr SPU2的旧SPU的增量更新!改进之处包括2 MB内部存储器和48个可用通道(是原始数量的两倍)。

SPU2由内部的两个声音处理器组成,分别称为CORE0和CORE1。并以〜36.86 MHz运行。每个处理24个通道。

奇怪的是,它们仍然是两个独立的处理器,要对其进行配置,您必须更改其寄存器。但是,索尼警告开发人员,两组寄存器都必须设置1/48000秒的间隔。如果您太着急,SPU2的行为将变得不可预测!

SPU2继承了原始SPU可获得的相同效果。提供的内存用作“工作区”:您可以存储原始波形数据并分配额外的空间来处理它并对其施加效果。

最后,该芯片可以混合所有通道以提供立体声输出。 现在,这是有趣的部分:SPU2可以将混合后的立体声样本作为新输入进行馈送,这使EE可以访问它(例如,将其与更多音频混合),或者继续添加更多效果(例如混响) ,回声和延迟)。 PS2的I / O并不复杂 ......