芯片设计学习
前言 人类对视觉信号天生的敏感决定了对图形处理硬件性能的渴求成了现阶段硬件产业最炙手可热的话题。 与满足听觉的音频设备相比,现在的图形处理技术水平给图形处理还留有很大的发展空间, 这就决定了这个产业的竞争充满了变数,在技术开发和市场推广策略上稍有不慎就会别别人赶超。 为了应付激烈的行业竞争, 设计出更高性能的图形处理芯片已经成为各个厂商保持自身竞争力水平最重要的手段。 今天我就来大家做一次特殊的旅行,了解图形芯片设计研发的全过程,事实上现在绝大多数的芯片设计厂商都是依照这个程序来进行新品研发的。 确定研发方案和硬件语言描述 与任何一个靠生产产品谋求发展的企业一样,设计推出一款新的 GPU 的第一步理所当然的是市场的调研和产品的开发规划。在这段时间内,未来产品的相关定位,主要占领的市场范围等话题都被提到桌面上讨论,这些问题讨论的结果最终将决定产品最终的研发方案的大体内容:研发成本,研发周期以及开发过程中需要的资源等等。 接下来就要在研发方案确定的大方向的技术上研究从生产工艺,芯片代工等具体的细节问题进行商议。在成本的限制范围内决定诸如集成晶体管数量等物理参数;紧接着就要在符合生产工艺的芯片代工厂中做出选择了,决定这个的因素很多,当然第一点是能提供生产芯片要求的工艺水平,比如0.15微米,0.13微米,甚至90纳米,其次是代工厂的产品质量和价格因素。当然很多时候芯片在设计的时候就计划使用比较超前的工艺,保证选择的代工厂(即芯片生产的公司比如TSMC )在芯片设计完成开始投片的时候完成相关工艺改造是十分重要的,如果你在这一点上面做出错误的判断,那对公司造成的损失是巨大的,因为图形芯片行业是一个最求速度的产业,在生产工艺已经决定的情况下,如果要在回过头来修订工艺指标,那进行的工作又会持续几个月,其中的工作量不比重新一块芯片要少多少! 当这一切前期环节确定以后,就开始我们这篇文章最主要的部分了,显示芯片构架的设计。一个设计团队被组织起来定义GPU 支持的技术特征并且制定整个设计工作的日程表(比如团队1在三周内完成反锯齿单元的设计)。 在我们深入介绍芯片的设计过程之前,我们先来了解一下现在芯片制造公司一般的设计流程。 现在,芯片构架的设计一般是通过专门的硬件设计语言Hardware Description Languages (HDL)来完成,所谓硬件设计语言( HDL)顾名思义,是一种用来描述硬件工作过程的语言。现在被使用的比较多的有 Verilog 、 VHDL。 这些语言写成的代码能够用专门的合成器生成逻辑门电路的连线表和布局图,这些都是将来发给芯片代工厂的主要生产依据。对于硬件设计语言( HDL)一般的人都基本上不会接触到,我们在这里只给大家简略的介绍一下:在程序代码的形式上HDL和C也没有太大的不同,但他们的实际功能是完全的不同。比如下面这个Verilog语言中非常基本的一条语句: always@(posedge clock) Q <= D; 这相当于C里面的一条条件判断语句,意思就是在时钟有上升沿信号的时候,输出信号 'D' 被储存在'Q'。 就是通过诸如此类的语句描述了触发器电路组成的缓存和显存之间数据交换的基本方式。综合软件就是依靠这些代码描述出来的门电路的工作方式关系生成电路的。在芯片的设计阶段基本上都是通过工程师们通过Verilog语言编制HDL代码来设计芯片中的所有工作单元,也决定该芯片所能支持的所有技术特征。这个阶段一般要持续3到4个月(这取决于芯片工程的规模),是整个设计过程的基础。 在上述的工作完成后,就进入了产品设计的验证阶段,一般也有一两个月的时间。这个阶段的任务就是保证在芯片最后交付代工厂的设计方案没有缺陷的,就是我们平时所说的产品的“bug”。这一个阶段对于任何芯片设计公司来说都是举足轻重的一步,因为如果芯片设计在投片生产出来以后验证出并不能像设计的那样正常工作,那就不仅意味着继续投入更多的金钱修改设计,重新投片,还会在图形芯片产业最为重视的产品推出速度方面失去先机。整个验证工作分为好几个过程,基本功能测试验证芯片内的所有的门电路能正常工作,工作量模拟测试用来证实门电路组合能达到的性能。当然,这时候还没有真正物理意义上真正的芯片存在,这些所有的测试依旧是通过HDL 编成的程序模拟出来的。 接下来的验证工作开始进行分支的并行运作,一个团队负责芯片电路的静态时序分析,保证成品芯片能够达到设计的主频 ;另外一个主要由模拟电路工程师组成的团队进行关于储存电路,供电电路的分析修改。 和数字电路的修正工作相比,模拟工程师们的工作要辛苦的多,他们要进行大量的复数,微分方程计算和信号分析,即便是借助计算机和专门的软件也是一件很头疼的事情。同样,这时候的多有测试和验证工作都是在模拟的状态下进行的,最终,当上述所有的工作完成后,一份由综合软件生成的用来投片生产门电路级别的连线表和电路图就完成了。 但是,图形芯片设计者不会立即把这个方案交付厂家,因为它还要接受最后一个考验,那就是我们通常所说的FPGA (Field Programmable Gate Array)现场可编程门阵列来对设计进行的最终功能进行验证。 对于NV30那样集成一亿多个晶体管超级复杂芯片,在整个使用硬件设计语言( HDL)设计和模拟测试的过程中,要反复运行描述整个芯片的数十亿条的指令和进行真正“海量”的数据储存,因此对执行相关任务的的硬件有着近乎变态的考验。我们从下面NVIDIA实验室的配备可见一斑。 可编程门阵列FPGA模拟验证 现场可编程门阵列FPGA可以能完成任何数字器件的功能,上至高性能CPU下至简单的74电路,都可以用它来实现。FPGA其实是一个包含有大量门电路的逻辑元件,但是它的每一个门的定义可以有使用者来定义,如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用FPGA的在线修改能力,随时修改设计而不必改动硬件电路。所以说使用FPGA来开发数字电路,可以大大缩短设计时间,更为重要的是大大减少了再出现成品芯片以后反复修改,投片资金和时间的消耗,一块几千美元的FPGA(这里指目前最大容量的FPGA)和花费数百万美元得到一块成品芯片相比,消耗是微不足道的. (编者:呵呵,以上文字引用了本站新手入门中的文字,看来新手入门这篇文章已经流传很广咯) 在这个方面,ATI 和 NVIDIA 公司都使用了名为IKOS的FPGA验证系统。 IKOS内部是由多块插卡构成,每块插卡都是一个FPGA阵列,由许多块大规模FPGA组成。 因为到了R300和NV30世代,图形芯片已经成了最复杂的ASIC芯片了,无法用一两块FPGA就能完成验证工作,必须使用这样的专业FPGA验证设备. 当然, FPGA也不是完美无缺的,它固有的缺点就是运行速度还没有ASIC芯片这么快. 和现在动不动运行频率都在200-300MHz 的GPU相比,IKOS 的运行主频大概只有可怜的几十兆Hz左右.当然这些缺点在应用在产品的设计过程中没什么大不了的.它负责的工作就是最终验证芯片设计功能的实现,你可以让IKOS作为显示部分的系统正常运行,进行驱动程序的开发和验证,当然如果你硬要在这样的系统上运行游戏也不是不可能,不过能维持在每秒几帧就不错了. 投片生产样片和修正 经过前面一系列的验证工作,这道工序就可以告一段落了,几经修订的设计方案被送到了芯片代工厂开始投片生产.代工厂从拿到设计方案到第一批产品下线一般需要四周的时间,不过在这段时间里,设计人员仍旧马不停蹄,继续进行芯片的模拟测试和上市产品PCB(Printed Circuit Boards印刷电路板) 的设计,这就产生了一般官方钦定的“公板”.四周以后,第一批产品下线了,这就是我们一般称为的”A0”版本。 (编者:就是常说的“工程样片”) 一般情况下, A0版本的产量不会很多,它们的主要用途还是用来进行测试和修改,一些被送到开发小组继续测试和查错,另一部分被送到相关的卡板厂商处进行相关的测试和设计。由于现在是有了真正的芯片到手了,查错的手段当然也要和前面的模拟手段不同。FIB (Focused Ion Beam聚焦离子束) 系统在这里被引入查错过程。简单的说FIB系统相当于我们平时在医院看到的各种依靠波束能量进行外科类手术的仪器,它们能在不破坏芯片功能的前提下,对芯片进行门电路级别的修改——切断原有的或者是布置新的门连线,不管你需要修改的电路是在芯片金属布线的哪一层,也不会对芯片造成任何的物理损坏。 当然,除了FIB设备外,还要使用很多其他的测试手段,像上图这台机器同样是一台探测芯片缺陷的设备,工作原理又完全不同,实际上它是一台高性能原子级别电子显微镜。下面这张图显示的就是一块NVIDIA 芯片在45,000X放大倍数下的面目。 我们在下图中用红线框围绕的部分就是该芯片的缺陷。一般这种缺陷都是在生产过程中造成的, 由于某种其他物质的原子混进高纯度硅晶体中造成的。这台机器能够辨别出混入的这种原子的种类并且判断可能是什么原因这些原子会进入到芯片的这个部分,从而能采取措施避免这种情况的发生,改善成品率。 当“所有”的缺陷都得到了修正之后,最终的设计被交付到代工厂进行投片生产,这时的产量就不会像A0版本那么少了,但也不是最终的量产版本,在前面验证基本功无误的情况下,这次生产的芯片要进行各种各样的和正式上市产品相关的测试:产品兼容性,工作温度,外围供电电路的稳定性,信号完整性等等,直到产品能达到作为产品上市的程度,这时芯片生产方就可以投入量产了。 在最后的这些测试过程中,要测试大量的GPU,方便期间,显卡上面都做出了GPU的插座,一个个独立的GPU芯片只要插接在上面就能进行测试了。当然这些插座都是为特定的GPU芯片所设计的,只能来测试引脚定义相同的GPU。也许有朋友说,要是现在市面上的显卡也做成这种插座式的设计,并且能够不断进行升级该有多好,我们先不说每一款芯片针脚定义不同。假设这方面不是问题,那我们至少也要保证显存有能力向新核心提供数据的带宽同步增长才有意义。所以说,显卡上GPU插座的设计注定只能存在在实验室。 其实芯片设计过程中的插座原则也适用于其它产品,在主板 芯片组 的测试过程中也很常见,瞧瞧上面这块nForce 2主板,它的 北桥 芯片同样是安放在插座上的,当然这是题外话了。 到了这个阶段就会有很多芯片用来进行各种测试,上图就是等待测试一堆Quadro4芯片 结语 |