上次更新:2021年6月18日,索尼知道3D硬件可能会变得非常凌乱。因此,他们的首次亮相控制台将使其设计简单实用。MLDR虽然这可能会带来成本!
主处理器是由y设计的那些x之一,基于z和第二次源于w',这有点密集在几个句子中总结,所以我们为什么不从一些历史背景开始?
九十年代的早期被许多受欢迎的CPU的命运的变化标志。曾经前导的8位CPU,如Z80和6502,已经出于聚光灯和摩托罗拉的着名68000,以及其他16位设计,在80年代后期享受成功,已成为更换的候选人。即使在PC世界的这个时候,坦登鲍姆在与Torvalds的庆祝辩论中,只有五年就达到英特尔的X86架构,直到从家庭市场的消亡。
起初可能看起来好像技术发展在这一点上击中了墙壁。但实际上,有一个新的相对未知的CPU浪潮进入主流设备。这些设计中的许多设计起源于学术界,因此存在特定的设计理念。此时下一代CPU的示例包括:
所有这些处理器都有共同点:他们遵循减少的指令集电脑(RISC)纪律,这是完全转移这些芯片的设计和编程方式。 RISC CPU的一个规则决定了单个指令不能将内存与寄存器操作混合,允许硬件设计人员简化执行指令和amp的电路; MLDR,然后通过并行技术增强它。
在80年代后期,MIPS CPU在被硅图形(SGI)采用(和后来)被掺入(SGI)以供电以供电的话题。 SGI是计算机图形市场的一种有影响力的创新者,特别是随着硬件加速的顶点管道的开发,其任务最初由软件(CPU内)进行。
在PlayStation的开发期间,MIPS正在提供R3000A系列处理器。这些是32位机器以及其低端目录的一部分。因此,虽然R3000A不是旗舰阵容的一部分(与R4000不同,但其他人稍后会选择),但它是对成本方面有吸引力的投资。
索尼在房内设计了他们的音频和图形芯片,但它们仍然需要驾驶这两个的领先芯片。所选CPU必须足够强大,以展示索尼芯片的令人印象深刻的能力,也可以以竞争力的价格保持控制台。
与此同时,LSI逻辑(半导体制造商)正在向企业提供“构建您自己的”CPU程序。此服务被称为CoreWare,它使客户端通过选择一系列构建块来构建自己的CPU包。内核库的一部分包括“CW3300”块,从LSI LR33300导出的CPU核心,这是LSI也商业化的现成CPU芯片。
现在,我要去哪一切?事实证明,LSI的LR33300和CW33300是MIPS R3000A系列的二进制兼容版本。它们的架构在某些区域略有不同,但编程界面(MIPS I ISA)保持不变。
最后,索尼委托LSI建立他们的CPU包。它们选择了CW33000,将一些位改为并将其与其他块组合在一起以形成您在PlayStation的主板上找到的芯片。
MIPS I ISA:MIPS指令集的第一个版本。在许多事情中,单词是32位长,并且指令集包括乘法和分割指令。
32通用寄存器和2个乘法/分割寄存器:这些寄存器也是32位。一个通用寄存器始终为零(R0),在RISC处理器中很常见。
32位数据总线:在PS1中,数据总线叉入两个总线。子总线(16/8位)→连接到芯片的其余部分和I / O.该总线由总线接口单元桥接,这也可以访问GPU和SPU的特殊端口。
32位地址总线:可以访问高达4 GB的物理内存(即RAM,内存映射I / O等)。
5阶段管道:最多可以同时执行五个指令(可以在上一篇文章中找到详细说明)。
4 KB指令缓存和1 kB的数据缓存:数据缓存还可作为刮板(快速RAM),这意味着它可以具有除行为L1缓存之外的其他用途。指令缓存可以是“隔离”,允许程序直接操纵它。
做一些有意义的东西,索尼为一般用途提供了2 MB的RAM。好奇地,他们在主板上安装了外部数据(edo)芯片。这些比典型的DRAM略微高效,获得更低的延迟。
在某些时候,任何子系统(图形,音频或CD)将以快速的速率需要大块数据。但是,CPU并不总是能够跟上需求。
因此,每当需要时都可以访问CD-ROM控制器,MDEC,GPU,SPU和并联端口。 DMA控制主总线并执行数据传输。结果速率比依靠CPU速度快得多,尽管后者仍然需要设置DMA传输。
另外,请记住,一旦DMA踢了一下,CPU无法访问主总线。这意味着CPU将是空闲的,除非它在Scratchpad中得到了一些东西来保持忙碌!
与其他MIPS R3000为基础的CPU,CW33000支持最多四个协处理器的配置,索尼定制了三个:
系统控制协处理器标识为“CP0”是在MIPS CPU上找到的常见块。在基于R3000的系统中,如此,CP0控制如何实现高速缓存。因此,能够直接访问数据缓存(以'scratchpad')和指令缓存(具有“缓存隔离”)的形式。控件协处理器也负责处理中断,例外和断点,后者在调试期间很有用。
等等,不应该协同处理器只展开CPU功能?为什么CP0紧密耦合到CPU?
实际上,R3000核心取决于系统控制协处理器能够利用许多组件,但这是否应该是“合法”,也不应归结为“共同处理器”这个词的解释。根据MIPS,协处理器不是严格的CPU可选部分,也可能命令CPU的周围环境(缓存,中断等)。因此,协处理器可以是系统的组成部分。在谈论MIPS相关的系统时,这只是要牢记的东西。
基于R4000的系统并入到该块中的存储器管理单元(MMU)和转换后缓冲器(TLB),从而提高其功能并占用新的角色。
“CP2”或几何变换引擎(GTE)是一种特殊的数学处理器,可加速向量和矩阵计算。
虽然仅运行定点类型,但它仍然为3D图形提供有用的操作,例如:
光源深度提示和颜色值(用于照明和颜色操作)。
z /深度平均值(我怀疑这是用于“订购表”,“图形”部分中的更多详细信息)。
您不必记住所有这些都要按照剩下的文章!只要记住,GTE将照顾图形管道的第一阶段,例如3D投影,照明和剪裁。这将有助于生成将发送到GPU以进行渲染的所需数据。
运动解码器,也称为“MDEC”或“宏块解码器”,是在CPU旁边的另一个处理器。这次,它将“宏块”解压缩到GPU可以理解的格式中。宏块是数据结构,该数据结构容纳具有与JPEG类似的编码的图像。
MDEC一次减压由8x8 24 BPP像素制成的位图。 Walker的编程指南指出MDEC每秒可以计算9,000次宏块。这将允许将320x240 PX全动画视频(FMV)以每秒30帧流在一起。
DMA用于通过CD-ROM→RAM→MDEC发送压缩数据。沿相反方向拍摄相同的路径,但在这种情况下,目的地是VRAM。
虽然该组件坐在SoC内并共享相同的数据总线,但它不是MIPS协同处理器,因此CPU / DMA通过存储器映射访问它(与拦截指令相反)。
有关MDEC单位的更多信息,我建议查看Sabin和Ceekański的资源(参见“来源”部分)。
到目前为止,我们得到了一个“CP0”和“CP2”,但'CP1'在哪里?嗯,这是为浮点单元(FPU)保留,我害怕索尼没有提供一个。这并不意味着CPU无法使用十进制数执行算术,它只是不够快(软件仿真FPU)或太精确(定点算术而不是)。
游戏逻辑(涉及物理,碰撞检测等)仍然可以通过定点算术来解决。固定点编码存储带有不可变数的小数位数的十进制数字。这意味着在某些操作之后精确的损失,但请记住,这是一个视频游戏控制台,而不是专业的飞行模拟器。因此,精密性能权衡有些可行。
顺便说一下,有时我会混合“定点”,“浮点”,“十进制”和“整数”编号类型(希望不再了!)。如果您有同样的感觉,我建议看看Gabriel Ivancescu的快速摘要(请参阅“来源”部分),以快速刷新这些概念。
正如我们之前所见的那样,CW33300是流水线处理器,这意味着它队到多个指令并在不同阶段并行执行它们。这很大程度上提高了指令吞吐量,但如果它没有正确控制,它可以导致管道危险,导致计算错误。
MIPS I架构易于控制危险和数据危险,这意味着当他们不应该时可以执行指令;并且该指令可以在更新之前与过时的数据一起运行。
无条件执行后跟“分支”或“跳转”型操作系统的任何指令:因此,开发人员必须在分支后手动填充管道(例如“计算0加0”),或跳转以减轻危险。这些填充物称为分支延迟槽。现代CPU将这种现象转换为一个优势:分支预测。通过添加额外的电路来检测危险,CPU如果分支/跳转条件没有满足,则丢弃新计算。但如果它确实如此,那么CPU已经保存了一些时间。
“加载”指令不会停止管道,直到数据到达:慢速外部访问RAM,CD读卡器或任何其他内存映射I / O可以采取大量循环才能读取。因此,需要填充物以保持管道忙,直到值到的到达。
正如我们可以从该示例中看到的那样,一些延迟插槽填充有意义的指令,该指令执行,该指令执行不受危险影响的计算。因此,延迟槽并不总是暗示浪费周期。
在大多数情况下,编译器将自动重新安排指令以填写插槽,或将无用的填充物添加为最后一个度量。所以,总而言之,这种现象是一个混合袋的一点。
要回顾,图形管道的大部分由GTE执行。这包括透视变换(使用相机的透视)和照明将3D空间投影到2D平面上)。然后将处理的数据发送给索尼的专有GPU进行渲染。
该系统具有1 MB的VRAM,将用于存储帧缓冲区,纹理和其他资源GPU将需要呈现场景。 CPU可以使用DMA填充此区域。
装配(VRAM)的芯片类型是双端口的,就像虚拟男孩一样。 VRAM使用两个16位总线,它可以在CPU / DMA / GPU和视频编码器之间进行并发访问。
虽然在此控制台的后来修订版本中,索尼切换到SOGRAM芯片(使用单独的32位数据总线的单端选项)。嘘!& mldr嗯,公平,每个人都有它的利弊。有一点肯定,由于定时差异,后来的游戏(如喷射摩托车3)将在基于VRAM的系统上运行时显示令人沮丧的图形。如果您想了解细节,Martin Korth的“Nocash PSX规范”记录了不同的时间和此类。
如果您一直在阅读SEGA Saturn文章,请告诉您这个GPU的设计更简单!
现在,为了展示如何绘制场景,我将主要使用Insomniac的Spyro:龙年作为一个例子。请记住,这场比赛的内部分辨率太狭窄了(292x217 px),阻止我在每个阶段清楚地将其解剖,所以我有点升级它有点证明目的。这是一个原始比例的样本,如果你很好奇。
首先,CPU通过使用命令(最多三个)填充其内部64字节FIFO缓冲区来向GPU发送几何数据(顶点)。基本上,命令指出绘制一个原语的方式和地点。
一旦收到几何形状,将应用剪辑以跳过未经看不见的多边形(驻留在相机视口之外)的操作。
原语的位置用指向帧缓冲器的x / y坐标系说明。 PS1的GPU采用整数坐标模型,其中每个坐标对应于像素的中心点(称为采样点)。换句话说,没有分数坐标。
就像竞争一样,PS1不包括解决可见性问题的任何硬件功能。尽管如此,GPU通过提供一个有序表来处理排序的多边形:一个专用表,其中每个条目使用深度值索引(也称为'z值'),并包含GPU命令所在的地址。
CPU需要首先手动对多边形进行排序,然后在表格的正确条目中引用它们。最后,CPU订单DMA将表发送到GPU。此过程将使GPU能够以正确的顺序呈现几何。
还提供多个DMA功能以帮助CPU和GPU与此表的创建和遍历。
一旦通过GPU解码命令,就是时候将(顶点)转换为像素的几何图形。这将使系统能够在二维面板(电视或监视器)上应用纹理映射,效果并最终将其显示在一起。为此,GPU将用作工作区域的像素矩阵分配,这称为帧缓冲器。与更复杂的SEGA Saturn相比,GPU仅需要单个帧缓冲区。
GPU使用三角形作为基元以形成3D模型。作为唯一可用的原始意味着背景和前景在构图方面没有差异(两者都是由三角形制成的)。 2D游戏继承了相同的性质:它们只是连接到形成四边形的两个三角形(尽管GPU提供了用于自动构建精灵的例程)。
光栅用品是将载体转化为三角形的单位;然后进入像素。这是通过的:
分析三角形区域以确定它们占用的帧缓冲区的哪些像素。覆盖采样点的三角形的任何部分都变成像素。
生成的像素立即写入帧缓冲区。相反,它们被发送到管道的下一个阶段进行进一步处理,我们将在以下段落中看到。
Gouraud Sading:每个原始的顶点都嵌入了自己的光线水平,然后每个点之间的亮度自动插入。正如您可以想象的那样,结果更加现实。另一方面,该算法不适用于精灵。
使这种选择的原因归结为平坦遮荫填充的〜2.5倍的多边形每秒比gouraud更多,因此优化多边形需要比其他多边形更现实的阴影很重要。
GPU执行逆纹理映射,其中GPU遍历每个光栅化像素,并在纹理图中查找其对应的像素(称为Texel)。通过线性地插入纹理地图(在VRAM中发现)来计算Texels以符合多边形的形状。用于插值的例程称为仿射纹理映射,该技术仅在丢弃用于透视图的第三坐标(Z /深度)的同时使用2D坐标(X / Y值)操作。
由于纹理贴图很少具有光栅化多边形的确切尺寸,所以可能会出现别名(结果不正确)。这表现出不必要的扭曲,例如缺失或扩大的卵形畸形。为了解决这个问题,复杂的GPU采用纹理过滤以平滑(插值)突然的颜色变化。现在,PS1的GPU无法实现任何过滤器,因此它坐落到命名为最近邻居的算法,而不会对结果进行平滑。这是非常快的(和便宜的),但它也解释了为什么纹理模型可能看起来“块状”。
完成后,GPU将像素写入VRAM中的帧缓冲区区域,这反过来被视频编码器拾取并被广播到屏幕。
让我们从所有这些理论中休息一下。以下是从为3D时代开始的游戏角色的一些示例,他们是互动的,所以我鼓励你检查出来!
使用可用量的VRAM(1个全兆字节),可以分配1024×512像素的大规模帧缓冲器,16位颜色或具有24位颜色的960×512像素中的逼真 - 允许绘制最佳框架任何游戏都表现出& MLDR这听起来很令人印象深刻,对吧?嗯,它确实提出了几个问题,例如:
这些尺寸必须重新分配以遵循标准化定义(即480 NTSC,576 PAL),因此视频编码器可以将其播放给消费电视。
如果没有任何用于材料的空间(即纹理,颜色表,等),GPU将如何能够绘制任何体面的东西?
PS1的GPU只能绘制最多640×480像素和16个BPP颜色的帧缓冲区。
好吧,所以让我们有一个16 bpp 640x480缓冲器,它留下了424kb的材料。到现在为止还挺好?同样,这种分辨率在CRT监视器上可能很好,但在每个90年代的每个人都在他们的家中没有特别明显。然后,有没有办法优化帧缓冲区?引入可调帧缓冲区。
从本质上讲,而不是使用“未经申请的”分辨率浪费有价值的vRAM,而是该控制台的GPU允许减少帧缓冲区的尺寸,以有效地将可用于其他资源的空间增量。在“齿轮集2”(参见“源”部分)中,Halkun显示了一个设置,将640x480帧缓冲区划分为两个320x480的设置,然后依赖于称为页面翻转的技术同时呈现多个场景。
页面翻转包括切换帧的位置,以便在游戏希望它的两种可用之间显示,允许游戏在显示另一个场景时渲染一个场景。因此,隐藏任何闪烁的效果和改善加载时间(玩家肯定会欣赏的东西!)。
总体而言,Halkun的布局仅消耗600千桶VRAM。其余(424 kB)可用于存储颜色查找表和纹理,与可用的2 kB纹理缓存组合,导致非常方便和有效的设置。
最后,值得一提的是,可以同时使用多种颜色深度映射VRAM,这意味着程序员可以在24bpp位图旁边分配16个BPP帧缓冲区(例如,由FMV帧使用)。这是另一个特征,促进了进一步优化空间。
虽然PS1有一个非常简单和合适的架构,但问题最终ari ......