最近弄到Nikkei Electronics有报导PS2的那一期(3月22日). 其中有GS的简单的解说及block diagram, 提供了新闻报导中所没有的有关GS的消息(虽然不是很多). 文中有提到的GS的一些特点: 为了同时对frame buffer读出/写入及读取texture资料, 因此 embedded DRAM有两组sense amplifier. 一组是给读出/写入用, 共2048 bits, 另一组给texture读出用, 共512 bits. Embedded DRAM容量为4M bytes, 大约有一半是给texture用. 这容量不是很够, 所以在设计时就以在绘图同时更换texture 资料为前提. Pixel Engine在无贴图时一个clock cycle可画16个pixel. 但有贴图时就降为8个. 杂志中的GS的block diagram大概如下: From EE (64 bit) | (64 bit bus for +--------------------------+ texture write) |External Interface Circuit|------------+ +--------------------------+ | |(64 bit) | +--------------------------+ | | Setup Engine | | +--------------------------+ | |(64 bit) | +---------------------------------+ | |Parameter setup for Pixel Engines| | +---------------------------------+ | | | | ............| | (64 bit * 16) | +--------------------------+ | +--->| Pixel Engine * 16 | | | +--------------------------+ | | | | | ............| | (64 bit * 16) | | +--------------------------+ | | | Memory Interface |<-----------+ | | |---> To Display I/F | +--------------------------+ | | | | ............| | (64 bit * 16 *2) | +--------------------------+ +----| Embedded DRAM (16 banks) | (32bit* +--------------------------+ 16 bus for texture read) 感想: (1) 由SCEI发表的"微小polygon"的速度为75M polygon/sec看来, GS的polygon setup的速度应该就是75M polygon/sec. 这也是GS处理 polygon的最大速度. 由上图Setup Engine输入输出均为64 bit看来, GS内一个polygon资料的大小应为64 bit * (150M(注:GS的时脉频率)/75M) = 128 bit. 如此看来EE至GS的bus如为64 bit宽的话, 它应该是Double Data Rate没错, 因为如果不是的话, 64 bit * 150MHz = 128 bit * 75MHz, 这表示所有的EE至GS的bus的频宽都会被polygon资料占用! 如此一来就不能达成"在polygon绘图同时传送材质资料至GS的RAM"的功能. 因此EE-GS bus 应该是DDR, 而且我觉得GS会用clock的上下缘来区分polygon及材质资料, 也就是bus有一半的频宽是固定给材质资料的. polygon及材质资料在进入GS 的External Interface Circuit后就分道扬镳. 材质资料就经由专属的64 bit bus直接写入GS的embedded DRAM. 如果GS的材质资料是用上述方式传入GS的话, 主记忆体至GS的材质传送速度最大值将是(64 bit / 8 bit) * 150MHz = 1.2 G byte/sec. 比Dreamcast的 graphic RAM的bus频宽 800 M byte/sec好一些. (2) GS的规格中常被攻击的一点, 就是在有贴图时fill rate会降为一半, 这种事连现在的PC的3D加速晶片都不会发生. 有人据此就嘲笑说SCEI的工程师连pipeline处理都不懂, 所以GS的实际polygon能力一定"远"低于规格所说的. 事实上绘图时的Z-buffer处理及半透明处理都一定需要pipeline处理, 也就是先要读出Z-buffer(or Alpha Buffer)的资料, 再经计算后 (要花至少一个clock cycle)才能将pixel的RGB资料填入frame buffer. 既然会设计Z(alpha) buffer处理这种一定需要 pipeline处理的线路, 所以GS在有贴图时fill rate降低一半的原因就不是因为不会设计pipeline线路. 从NE的文章中, 我个人觉得fill rate降低一半的原因是: (a) 创造出给从外面写入材质资料至DRAM的time slot. 如此在绘图"同时"可以从外面写入材质资料. 这也是embedded DRAM 容量太小时的妥协方法. 至于无贴图时我觉得原来用于texture read的 sense amp.就可用来给材质资料写入用, 所以就不需要造出time slot了. 此外利用这个time slot可在不影响fill rate下, 对材质资料做 演算处理. 从以前SCEI专利看来, GS可用fractal演算法产生材质资料. (b) 减小texture read bus的宽度至1/2(texel资料可分两个 clock cycle读入). 如此die size可以缩小一些. 这对die size非常大的GS来说是非常重要的. (注: texel: texture map中的一个pixel.)
|