机器之心专栏
作者:常开颜(中科院计算所处理器全国重点实验室博士生)
除了人机对话,ChatGPT 的代码生成能力或许能让它在 EDA 领域大显身手。
提到 ChatGPT,你会想到什么?提到芯片,你又会想到什么?可以把你脑海中浮现的第一个词记下来,看完这篇文章,肯定会改变你的看法。如果你是一个科技爱好者,那么你的第一印象是 ChatGPT 是一个高智能的对话模型,可以和人对话,而芯片产业是个复杂的整体,不止有上层的体系结构设计者,还有底层流片的工程师。你或许不会把两者结合起来,因为两者看起来风马牛不相及。
但实际上,ChatGPT 模型独有的代码生成能力极大地加速了设计芯片的速度。由传统 EDA(电子设计自动化)向智能 EDA 的转型浪潮即将开启,今天这篇文章,我们就来一窥 ChatGPT 驱动下传统 EDA 是如何演变成智能 EDA 的,ChatGPT 是如何驱动芯片设计产业链的创新。
首先我们来看 ChatGPT 在芯片产业前沿上的一个应用:量子控制处理器是量子计算机的核心控制部分。用 ChatGPT 合成的一个量子控制处理器的代码如下所示。
module QuantumControlProcessor (
input clk,
input reset,
input [7:0] instruction,
input [7:0] control,
output reg [7:0] qubit_pulse,
output reg [7:0] timing_pulse
);
// 此处因为篇幅原因省略实现
endmodule
实际上这段代码也许会有些小问题,比如 ChatGPT 并不能很好地实现时序的控制,会出现浪费时钟周期的现象,但是这段代码可以正确编译,并且是一个有效的设计方案。也许你会很惊奇,这是怎么做的呢?这样做有什么前景呢?本文接下来的部分会给你答案。
ChatGPT 可能对芯片设计流程带来的改变
ChatGPT 将为芯片行业提供足够的可复用代码
芯片行业需要的巨大设计代码量亟需一个高效的开发工具。芯片设计是一个需要大量代码堆砌的行业,比如阿里的玄铁 OpenC910 的核心开源代码就有 351KLOC 左右。如图 1 所示,工业界一般从最顶端的 verilog 开始设计,使用 EDA 的前端和后端工具生成版图。verilog 的编写需要设计时序,通常较为复杂,因此 ChatGPT 生成这一块的代码可以降低很大的人力成本。芯片的时序要求较为严格,因此也有大量的功能相对固定的时序相关模块,比如 AXI 接口、FIFO 等。这些模块都可以使用 ChatGPT 来降低人力成本。虽然目前已经有 Chisel、Spatial、MyHDL 等新的硬件设计语言,但是这些语言很大程度上受制于宿主语言的限制,也无法用接近自然语言的方式描述电路。
图 1:智能 EDA 和传统 EDA 流程图
ChatGPT 在代码生成方面显示出了优秀的表达能力。只需要给它一个任务提示,就可以自动生成对应的代码。相比软件和算法的合成而言,由于硬件设计代码并不像软件业务代码具有场景多样性,并且其参数化和时序控制相对人类的认知能力虽然复杂,但是有固定的模式可以遵循,因此 ChatGPT 做硬件设计代码自动生成的优势更为明显。它对于已经有的硬件具有很好的归纳能力,能够准确地提炼出设计模板中可参数化的配置点。
笔者的指导教师中科院计算所副研究员王颖博士认为,短期内即便是一个完全行业化的 ChatGPT 版本也无法带来理想中的全自动化设计能力,但是配合云化 EDA 的趋势,有望快作为一个设计助手大幅提升设计验证效率并降低开发门槛,尤其对于教学工作将带来重要改变,此外,ChatGPT 在各项流程中表现出来的自动化水平,eda 领域并非没有比他更好的 SOTA 点技术,只是在完整性和交互自然上 ChatGPT 有天然的优势。最后,ChatGPT 验证了大模型在自动化芯片设计领域的潜力,能够驱动开发者进一步地在此之上设计 Prompt 范式,从而存在进一步提升设计的功能准确度和生成芯片的性能的空间。
ChatGPT 在芯片设计领域的智力水平远超之前的相似工作
ChatGPT 真的有替代人工的准确性吗?
ChatGPT 和之前最好的代码自动生成的方法比起来好了多少呢?
可以把之前的代码生成方法分为三类,一类是以编程语言社区为代表的基于规则 [11,12,13] 的方法,第二类是基于测试用例的生成方法 [5, 6, 7, 8, 9, 10],第三类是以自然语言处理社区为代表的基于文本和模型的生成方法 [1, 2, 3, 4]。
表:比较 OpenAI 两种最新模型用于代码生成
ChatGPT 和 CodeX 都是 OpenAI 公司基于 GPT-3 研发的模型,从上面的分析中可以看出,ChatGPT 的范围更广,并且 Copilot 的用途单一,仅仅为代码补全。这就为基于 ChatGPT 开发智能代码相关工具提供了更广阔的空间。
ChatGPT 极大地驱动了智能 EDA 技术的发展
在 ChatGPT 出现之前,就有许多自动化代码生成方式,他们为什么不能够驱动智能 EDA 技术呢?
ChatGPT 在芯片设计代码上有一系列潜在的应用
ChatGPT 能够远远地超越传统方法,并且它可以做到零样本学习(Zero-shot learning),相比传统的程序合成并不需要专门的训练(因为 OpenAI 已经完成了),并且配合细致的功能描述,他庞大的知识储备也可以使能高正确率的代码生成。如表 1 所示,ChatGPT 将会逐渐演变为芯片前端的自动化流程中极为关键的一步,在未来很有可能演变成为继 HLS 开创 C 语言设计芯片后的又一种新的范式。在后文,我们将会介绍如何使用 ChatGPT 做 Verilog 的代码生成。
表 1:ChatGPT 在芯片自动生成各个领域的开创性创新(以 Hardware Design Language 为例,软件语言可以参照分析)
如何使用 ChatGPT 生成芯片代码
与芯片设计相关的程序合成方法包含两类,高层次程序生成和时序相关硬件描述代码生成。高层次程序生成可以生成 HLS 等不具有显式时序控制的 C/C++ 代码等,而低层次程序生成可以生成具有显式时序控制的 Verilog 代码。由于 HLS 在实际工业界设计芯片时较少采用,因此我们采用 Verilog 作为主要的目标语言。对于 ChatGPT 而言,我们以自然语言描述作为输入,就可以获得符合要求的芯片描述代码。具体来说,应该如何做呢?我们以 Verilog 为例介绍如何用 ChatGPT 生成代码。
基于 ChatGPT 的通用生成步骤
act as a professional verilog programmer
因为 ChatGPT 是个通用的代码生成工具,而 Verilog 是个专用领域,我们需要先 “催眠” ChatGPT,使得它能够生成 Verilog 程序。向 ChatGPT 中输入下面的 prompt,之后的生成都会是以 Verilog 代码为基础的。
我们接下来的部分都是以片上网络 NoC 模块为例阐述代码生成方法的通用步骤。
由于版面有限,这里就不列举 ChatGPT 生成的完整代码了。但是我们可以看出,On-Chip Network 这个关键字有很多种不同的理解方式,ChatGPT 选取了基于总线的理解方式。如果我们想要其他的语义理解方式,我们就应该探索出不同的输入即提问方式。
组合生成模块步骤
前面只是生成了有限的模块,但是能否把模块组合起来呢?我们的目标是用两个原本不存在的 strange module 组合成一个 no strange module。下面生成一个顶层模块 strange,底层有两个加法器,他们的输出连接着一个减法器,我们把这个东西叫做 strange module。
ChatGPT 为什么能在芯片生成领域取得成功
ChatGPT 能够在芯片合成上取得成功应该归功于它对代码的理解和对自然语言语义的准确辨识。
ChatGPT 生成芯片设计就万事具备了吗
虽然 ChatGPT 模型可以完成芯片设计前端的部分工作,但是还存在如下挑战,需要人工和 EDA 工具链的联合调优才能生成一个符合规范的芯片。
硅工行业如何应对智能 EDA 危机
ChatGPT 作为一种智能 EDA 流程,既是一个危机,也是一种机遇。它能够替代一部分 EDA 前端的工作,但是由于 EDA 后端很大程度上依赖于确定性和对细节的分析,才能得到更好的优化结构,因此对于支持 EDA 后端优化的工作存在困难。但是它也创造了新的岗位,比如可能出现的模型提示工程师,错误修正工程师。
图 5:按照工程师岗位区分的可替代
为了更清晰地分类不同岗位上硅工行业的可替代性趋势,我们按照 EDA 的流程自顶向下划分了四个阶段,即体系结构设计阶段 - 芯片代码实现阶段 - 芯片 PPA 调优阶段 - 芯片验证阶段如图 5 所示。注意这里的芯片调优指的是在前端通过改动部分硬件结构和算法实现的调优,因此列举在芯片验证前面。蓝色方框代表很难替代的岗位,黄色方框代表容易被替代岗位,灰色方框代表新增加的岗位。下面分析按照具体流程区分的替代性,揭示为什么有的岗位的工程师容易被 ChatGPT 替代,而有的岗位的工程师很难被 ChatGPT 替代。
中科院计算所智能计算中心主任韩银和研究员认为 ChatGPT 不光能辅助加速芯片设计流程,也对芯片本身带来一系列挑战,也许是当下热点如存算一体、芯粒集成以及大芯片架构等技术带来迫切等待的杀手级应用。
较难替代的流程
新增加的流程
未来的发展趋势
在智能 EDA 的浪潮下,有些岗位不可避免地会被替代,那么未来会以什么样的次序被替代呢?从前后端分布上看,后端由于有版图设计等精细化的任务,因此不可替代性较强。对于前端来说,最先替代的是芯片实现中的模块工程师,因为从上面生成芯片的实践中可以发现,基本模块代码生成这一部分最为直观。在它之后会出现的替代岗位有组件设计工程师,这一部分会在工程师们熟悉用 ChatGPT 组装模块后替代。对于其他的工程师而言,ChatGPT 更多地只是具有辅助价值,而不能完全地替代。
因而我们可以看到,越是上层的,涉及到架构抽象的部分越不容易替代;越是底层的,涉及正确性的部分也不容易被替代。中间部分的替代顺序将会是自底向上,从基本模块向上层组件逐次地替代。
政策上要抢占智能 EDA 先机
自力更生与充分吸取世界前沿并非不矛盾。传统 EDA 和大模型在 OpenAI 首发而其他公司尚未跟上固然有着复杂的原因。但是政策上仍然需要分出一只手,让部分过热资本从解决传统 EDA 和大模型问题的项目中抽出,鼓励企业抓住智能 EDA 发展初期行业壁垒小的时期,勇敢步入业内,构造出新的技术壁垒。只有这样,才能解决不断被新技术取代的问题。否则,过热资本涌入已经成熟的产业会造成资本回报率下降,同时创新技术无法获得更高的资金支持,导致创新型企业不敢试错,无形中增加了创新型企业的试错成本,使得创新型企业更倾向于市场证明成熟的技术。因此,政策上应该适当鼓励企业基于 ChatGPT 这类大模型做衍生技术,尤其是在大模型已经展示出强大的代码生成能力之上,基于智能 EDA 技术的企业更应该抢占先机。
资本市场的投资目光应该由大模型本身向其衍生技术转向
在信息技术领域,先进技术不断从通用走向专用,逐渐走向基于之前技术的衍生技术,以处理器设计领域最为明显。在上个世纪时,CPU 火爆一时,造出了高性能的计算机,本世纪初,GPU 逐步流行,驱动了游戏的开发,最近十年,NPU 开始走上舞台,使能高能效的神经网络训练和推理。由此推知,当大模型成熟以后,其衍生技术也会在之后几年走上舞台。
智能 EDA 技术是大模型技术的衍生技术。虽然衍生技术投资在刚开始看并不占优势,但是从经济上看,直到那种技术首发并形成技术壁垒时其投资回报率会较高。随着 ChatGPT 这一类大模型技术的日渐成熟,对企业的投资会出现边际效应递减的现象。个人投资者和机构投资者应该认识到信息技术的投资规律,渐渐把目光转向大模型的衍生领域,尤其是关注基于大模型的算法在芯片领域的应用问题。产业从业人员应该充分利用我国为人工智能、集成电路领域设立的大基金优势,积极申报人工智能和 EDA 交叉的基金。因此,无论是从产业政策上看,还是从投资规律上看,智能 EDA 领域十分有必要应该成为我国投资者的投资对象。
相关文献
基于文本模型的代码生成
[1] Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, and Ming Zhou. 2020. [CodeBERT: A Pre-Trained Model for Programming and Natural Languages]. In Findings of the Association for Computational Linguistics: EMNLP 2020, pages 1536–1547, Online. Association for Computational Linguistics.
[2] [GRAPHCODEBERT: PRE-TRAINING CODE REPRESENTATIONS WITH DATA FLOW]
[3] [CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation]
[4] [UniXcoder: Unified Cross-Modal Pre-training for Code Representation]
基于测试用例的代码生成
[5] Rajeev Alur, Rastislav Bodík, Garvit Juniwal, Milo M. K. Martin, Mukund Raghothaman, Sanjit A. Seshia, Rishabh Singh, Armando Solar-Lezama, Emina Torlak, Abhishek Udupa, [Syntax-guided synthesis], 2013
[6] Peter-Michael Osera, Steve Zdancewic, [Type-and-example-directed Program Synthesis], 2015
[7] John K. Feser, Swarat Chaudhuri, Isil Dillig, [Synthesizing Data Structure Transformations from Input-output Examples], 2015
[8] Armando Solar-Lezama, [Program Synthesis by Sketching], 2008
[9] [Kensen Shi], [Jacob Steinhardt], [Percy Liang], FrAngel: Component-Based Synthesis with Control Structures, POPL, 2019
[10] Yu Feng, Ruben Martins, Yuepeng Wang, Isil Dillig, Thomas W. Reps, Component-based synthesis for complex APIs, [ACM SIGPLAN Notices], 2017
基于逻辑规则的代码生成
[11] Z. Manna and R. Waldinger, "Synthesis: Dreams → Programs," in IEEE Transactions on Software Engineering, vol. SE-5, no. 4, pp. 294-328, July 1979, doi: 10.1109/TSE.1979.234198.
[12] Bernd Finkbeiner and Sven Schewe, Bounded synthesis, in Int J Softw Tools Technol Transfer, (2013), 15:519–539, DOI: 10.1007/s10009-012-0228-z
[13] Peter Faymonville, Bernd Finkbeiner, and Leander Tentrup, BoSy: An Experimentation Framework for Bounded Synthesis,CAV 2017