60年前,一家名叫仙童的公司造出了一个包含四个晶体管的新产品。60年后,这个名叫『芯片』的东西已经彻底改变了世界,而它其中包含的晶体管的数量已经超过1000亿。
《芯片战争》这本书里写到:2021年,芯片行业生产晶体管的数量,已经超过了人类历史上所有其他行业的公司生产所有产品的总和。
为了支持如此大的规模,芯片设计的方法也经历了很多阶段。早年间,芯片里所有的电路和晶体管都是用手画出来的;但随着芯片的规模和复杂度的指数级增长,芯片工程师开始使用计算机和EDA软件来辅助进行芯片设计。EDA这种工业软件,也成为了芯片产业至关重要的核心环节。
芯片设计的一般流程
为了说清楚AI如何帮助芯片设计,我们就得先说清楚芯片设计的流程和步骤。虽然芯片的功能五花八门,但设计一颗芯片通常遵循着非常类似的流程和步骤。像苹果、高通、英伟达这些公司,基本都是按照我接下来介绍的步骤来设计一颗芯片的。
总体来看,芯片可以分成前端设计和后端设计两个部分。前端说的是这个芯片是什么、它有哪些部分,后端说的是这个芯片的各个部分长什么样。
具体来说,前端负责芯片的逻辑电路设计,包括系统架构定义、RTL编码、逻辑综合,在这个过程中会进行多次的仿真验证,最终得到门级的网表;后端主要负责芯片的物理设计,包括布局布线、性能优化、功能测试等等步骤,最终会得到一个芯片电路的物理版图,提供给晶圆厂制造。
其实设计芯片和盖房子很像,前端设计就是做出房子的设计图,比如包含几个房间,每个房间的功能是什么、餐厅还是卧室。而后端设计就是按设计图画出这个房子的施工图纸,包括建筑施工的步骤,用钢结构还是砖混,怎么拉网线走水电等等。这样建筑队,也就是晶圆代工厂,就可以拿施工图纸去把芯片造出来了。
在前面说的这些步骤中,AI已经几乎无处不在了,我们一个一个来看。
用AI生成RTL代码
编写RTL代码,是芯片设计万里长征的第一步,它主要目的是定义芯片的功能和结构。
RTL是一种硬件描述语言,它能精确的描述组成芯片电路的各种信号、逻辑操作、数据传输和电路结构。就像写软件的编程语言有C、C++、Python一样,常见的RTL语言也有很多,比如Verilog、VHDL、SystemVerilog,还有最近几年比较流行的Chisel等等。通常芯片工程师都是人肉写RTL,非常痛苦,但大语言模型出来之后,人们就开始探索使用ChatGPT这样的大模型来直接生成RTL代码,我的课题组也做过一些这样的尝试。
我们目前的结论是,大模型肯定可以帮助提升写RTL代码的效率,用它来写一些比较常见或者规模比较小的电路模块是没问题的;但是,当前的效率提升还比较有限。
为什么这么说呢?我们都知道,大模型的表现很依赖于训练语料的数量和质量。对于软件来说它有很多高质量的开源代码,所以就出现了像copilot这样的杀手级应用,极大提升了软件工程师的开发效率。
但芯片硬件的RTL代码是各家芯片公司最核心的技术机密,我们从来也没看到英伟达苹果开源他们的芯片设计吧。缺少高质量的硬件代码做训练数据,那大模型的能力自然就会比较弱了,这也是使用AI辅助芯片设计的一个比较大的问题。
我们组做过一个定量的评测,看大模型生成的芯片电路到底有多能打,回头单独写一下,感兴趣的朋友别忘了给我一个免费的赞,点赞越多更新越快。
AI辅助芯片验证
接下来再来说功能验证,这其实是整个芯片设计环节中最重要、但最容易被初学者忽视的环节。验证顾名思义就是要确保芯片的功能是正确的。比如你做了一个加法电路a+b=c,就需要验证当a=1、b=1的时候,c=2.
这个事情不是没发生过,1994年美国林奇堡学院的一位数学系教授ThomasNicely发现,使用奔腾处理器做特定的浮点数除法的时候,总会出现错误的答案。比如他用一个数字去除以824,633,702,441时,答案一直是错误的。后来蓝厂证实是因为奔腾处理器的一个用于浮点运算的预编程算法存在bug,平均每做90亿次长除法就会出现一次错误结果,相当于七百年一遇。后来蓝厂召回了所有受到影响的奔腾处理器,并且损失了5亿美元。
30年过去了,现在的芯片变的越来越复杂,那要在验证上花的力气就越多了。比如验证一个Arm处理器核,就需要10的15次方个验证周期。什么概念呢?如果用软件仿真器的话,需要15000年才能跑完、做到完全验证,这显然是不现实的。
但在实际的验证过程中,达成100%的覆盖率是很困难的,它主要面临三个问题。第一,如何定义覆盖率本身。通常要覆盖的内容是由经验丰富的工程师人工定义的,并不一定全面。第二,覆盖率在收敛的过程中会越来越难。在做验证的过程中,需要上千次的仿真测试。随着覆盖率的提升,简单的随机测试就不够用了——这是因为低处的果子被摘得差不多了,如果想要摘到更高的果子,就要搭更高的梯子、用更专业的工具、有时候也要靠运气才行。第三,如何确定验证已经完成。达到100%的覆盖率并不代表芯片功能100%正确,可能是你设置的标准太低了。所以需要对仿真中收集到的海量数据进行分析,并且判断到底是不是真正实现了最终的验证收敛。
所以,芯片工程师这帮大聪明们就想用人工智能来帮助做芯片验证。比如Synopsys新思科技就提出了一个VSO.ai工具,使用AI来优化验证空间,从而加快覆盖率的收敛速度。比如,针对定义覆盖率目标的难题,VSO.ai就能够推断出一些不同的覆盖率类型,不再拘泥于传统的代码覆盖率,而是和芯片工程师指定的覆盖率形成互补。AI还能从验证的经验中不断学习,然后不断优化覆盖率的目标。
为了加快覆盖率的收敛速度,AI可以解放验证工程师,不用做手动优化,而是自动去学习和调整各种测试,同时消除那些重复劳动,在加快覆盖率收敛的同时节省计算资源。
AI还能自动分析覆盖结果,分析导致bug的根本原因,或者尝试推理为什么没有达到某些特定的覆盖点,这样帮助验证工程师更快的判断验证是否完成。
AI辅助芯片布局布线
2021年,谷歌在自然杂志上发表了一篇工作,介绍了谷歌使用深度强化学习方法,把芯片布局设计从原来的数周缩短到了6个小时。
布局布线指的是,芯片上有各种各样的组件和模块,需要把他们合理的放置在芯片上有限的空间内,并且用导线连接起来,在满足各种电气规则和限制的前提下,尽可能的达到最好的功率、性能和面积。
通常来说,这个工作是由EDA工具完成的,但为了性能的最优化,需要芯片工程师不断进行手工调整。调整之后再给EDA工具再做一版,然后不断循环这个过程。这就像家里软装的时候放各种家具,看怎么摆放才能达到空间利用率最优、动线最合理,只不过每调整一次就要把家具都拿出去然后重新来一遍,非常费时费力。
为了得到一个最优的芯片设计,核心其实是优化芯片的功耗(Power)、性能(Performance)和面积(Area)这三个衡量芯片设计质量的关键指标。这个问题也叫做设计空间探索。
说到这里大家应该也能想到了,这种不断尝试和搜索的问题,其实都可以用AI来帮忙解决。比如把AI和用来做PPA探索的EDA工具结合,让AI来自动找到最优的芯片设计。AI还能把从一个项目里学到的经验用在未来的项目,大幅提升了芯片的设计效率。基于这些思路,工业界已经在开发类似的产品了。比如Synopsys新思科技就在2020年推出了DSO.ai,它是业界首个AI+EDA的芯片设计解决方案,采用强化学习技术,通过AI来自主搜索设计空间的最佳平衡,不需要人工介入。
这个工具已经在很多芯片大厂落地使用了。比如采用了DSO.ai之后,微软将芯片模块的功耗降低了10%-15%、但性能指标没有下降;意法半导体将PPA的探索效率提升3倍以上;存储芯片大厂SK海力士将芯片面积减小了5%。根据Synopsys的数据,现在DSO.ai已经成功实现超过300次商业流片,这其实也标志着AI能够帮助真正的芯片设计与生产。
AI辅助芯片测试
能否用AI设计一颗完整芯片?
前面说的都是芯片设计开发的关键环节,以及他们如何与AI进行结合。那么有没有用AI直接设计完整芯片的例子呢?这一步登天目前还有难度,但其实也有国内外的团队在尝试了。比如,纽约大学的学者就用ChatGPT、完全通过对话的方式设计了一颗非常简单的8位处理器芯片。当然从专业的角度来看,这可能只是一个比玩具还简单的例子,计算机领域的大牛、杜克大学的陈怡然老师也说,这更像是一个promptengineering的功能演示。
不过也有更复杂的AI设计芯片的例子,比如中科院计算所就用AI花了五个小时生成了一个RISC-V处理器芯片「启蒙一号」,它有400万个逻辑门,性能和英特尔的80486相当。总体来看,AI设计完整芯片的能力还比较有限,但这或许也是芯片发展的下一波机遇。
对于各家芯片大厂来说,他们也在开始尝试将AI引入芯片设计的全流程,比如AMD已经在设计测试和验证阶段采用AI,英伟达CEO老黄也表示,芯片制造会是AI的理想应用。为此,EDA工具也在不断进化,再拿Synopsys举例,他们也推出了面向芯片开发全流程的Synopsys.ai,它构建了一个基于AI的全栈式EDA平台,覆盖从架构设计到制造的整个设计流程,也集成了名叫DataAnalytics.da的AI大数据分析功能。事实上,2020年发布首个AI驱动的芯片设计方案DSO.ai时,Synopsys的市值是200多亿美元;三年之后,随着Synopsys.ai的推出,Synopsys的市值一路突破八百亿美元。
将EDA和AI进行结合,已经成为未来芯片设计的新范式。
回到一个很多人都很关心的问题,人工智能到底会不会取代芯片工程师?如果AI学会了设计芯片,未来会不会出现像天网那样的超级智能呢?
当AI开始设计芯片,阁下该如何应对?其实AI和人会形成很好的互补,AI也会极大提升人们探索新知的能力和效率。而芯片,这个源自于沙子、又汇聚人类最先进知识的小东西,未来或许将会是人类和AI联合创作的艺术品。