近年来,随着国际形势日益严峻,贸易和技术壁垒逐步加高,特别是在芯片设计制造、人工智能、生物医药等关键技术领域,人为的政策性壁垒正在有计划地建立,如美国于2022年颁布涉及总金额高达2800亿美元的《2022年芯片与科学法案》,欧盟于同年表决通过450亿欧元半导体振兴方案,美国、日本、荷兰三国于2023年初达成包括光刻机在内的先进技术和设备封锁协议等。可以想象,若这一趋势持续下去,在不久的将来,我国将不得不以更为独立的方式开展科研探索和技术创新工作。
在过去,国内芯片研发的主流方式是从国外购买较为成熟的高性能设计,将这些设计作为芯片的主要模块,另外一些难度较低的模块则自行研发,最后将购买的模块与自研模块进行集成,从而形成一个完整的芯片设计。所购买的模块包括中央处理器、总线、调制解调器、高速数据接口及其协议解析器等,几乎涵盖了芯片设计中所需要的全部子系统。这些大大小小的子系统来自不同的供应商,而国内芯片研发的主要工作就是连接它们,并解决不同供应商之间的适配问题。
从国际分工来看,处于上游的是芯片先进国家的模块和整体方案供应商,它们对模块的使用收取许可费,并对每一颗国产芯片加收提成;处于下游的是我国的芯片研发企业,它们缺乏核心技术,只能赚取芯片的组装费。
为了获得更多的研发自主权,同时也为了降低外购成本、增加经营净利润,国内很多芯片厂商和设备厂商对芯片中的核心模块开展了自主研发工作。自主研发的特点是周期长、资金投入大,很多公司都是从头开始组建团队,而团队带头人是否有足够的经验,是否能够使研发过程绕过许多技术陷阱,平滑顺利地进行下去,是自主研发成败的关键,因而研发最后是否能成功,有着极大的不确定性。即使自主研发完成,还要接受市场的考验,因为要用一款新的芯片取代已经成熟应用的老芯片,首先需要找到具有高度意向的产品端客户,该客户需要投入人力配合修改产品的软硬件设计,经过漫长的芯片导入后,才可能真正实现量产。
在导入过程中,产品端客户需要投入大量的人力和时间,还要承担因更换芯片可能带来的风险,因而芯片的更新替代是非常漫长且艰辛的工作,除非遭遇缺货断供或大幅提价等外部压力,产品端客户一般不会轻易更换原来的芯片方案。在这条自主研发与国产替代的漫漫长路上,许多公司失败了。正因如此,购买模块进行集成,长期以来一直是国内研发的主要方式。可以说,国产芯片既受益于全球化,又受制于全球化。
随着逆全球化趋势的出现,过去的研发方式面临着巨大的挑战。一方面,国内芯片厂商可能面临无模块可买、无高端技术可用的窘境;另一方面,产品生产厂商也面临着进口芯片断供和提价的压力。于是形成了一个前所未有的窗口期,芯片厂商有更大的热情对较为复杂的核心设计进行攻关,产品生产厂商也对国产自主研发芯片有更大的包容度和替代意愿。在此形势下,国内芯片设计水平必将迎来一次大的升级,同时对从业者的要求也将大大提高。
按照购买模块进行组装的方式,芯片开发工程师需要掌握的基本技能是组装,即了解组成系统的各种总线协议、接口协议等,而对模块内部的了解很多时候都流于表面。因此,国内的芯片教学与培训多为介绍单片系统(System on Chip,SoC)集成、总线和接口协议。而自主研发复杂模块所面临的问题,通常不是结构性的,而是算法性和原理性的,如WiFi和5G芯片,里面充斥着各种复杂的矩阵运算、复数运算等,因为它们要解决的是多天线在无线信道下的输入、输出问题。AI芯片、图像/语音/视频等多媒体处理芯片,也需要解决很多数学问题。因此,深入理解芯片所基于的算法是国产自主研发的关键。任何算法都是由加减乘除四则运算、滤波器、特殊信号发生器等基本数学方法构成的,熟练掌握这些方法是实现复杂算法的基础。如果说复杂算法是大厦,那么基本算法就是组成大厦的砖石。忽视基本算法及其电路设计而谈论复杂算法电路,无异于伐根以求木茂,塞源而欲流长,特别是对于从事非架构工作的一线设计师来说,这种想法更是有害无益。
读者可能会问:“算法不应该是算法工程师的事吗?算法工程师解决算法问题,然后告诉芯片开发工程师怎么做就可以了。”按照标准研发流程,确实应该如此。而且,还应该配套一个文档工程师,专为设计补充文档。但在实际工作中,研发并不会有非常清晰、明确的边界。算法工程师一般解决高级算法问题,如梳理算法处理的全流程,通过理论推导和仿真确定流程中每一处算法的选型,给出算法模型供RTL(寄存器传输级)参考,提供参考模型支持,以辅助验证,还要在后续的芯片测试过程中负责解释发现的错误和性能不佳的情况,并给出补救方案。由此可见,算法的工作既有高级的算法架构和算法选型,又有底层的算法建模和细节处理。包括大型公司在内的许多公司都没有足够的算法岗位来解决上述全部问题,很多基本算法的实施,如截位、溢出处理、符号位处理、乘除法等,都需要数字芯片开发工程师自行完成,至少需要在验证发现问题时,能够不需要算法工程师的协助,独立思考并定位问题。因此,进行普通算法的电路设计与写设计文档一样,是数字芯片开发工程师的必备素质之一。我们不能一面抱怨现代分工的琐碎使得工程师越来越像一枚无足轻重的螺钉,一面又拒绝拓展其他相关领域的知识。事实上,在理解并能熟练设计基本算法电路之后,一个工程师的设计能力和对各种业务的适应能力将会大大增强。
以作者多年的经验来看,工程师对于基本算法电路的处理方式主要分为两种:一种是凭经验,例如遵循“凡是加法就保留一个溢出位”这样的规则;另一种是在开始设计前,查阅大量的文献资料。一般资历较深的工程师会选择第一种,资历较浅的工程师会选择第二种。开发工程师通常不具备算法仿真和评估能力,因此即使是最基本的乘除法,在纷繁复杂的各种方法中选出最合适的方法也是十分困难的。一些类似口诀、规则的经验之谈,需要分情况讨论,过于简化的规则在实施中通常会增加不必要的面积开销。由于缺乏方法论的总结,同一个工程师在处理不同芯片项目中的相同问题时,经常会使用不同的方法,并且经常进行重复研究,这样不仅会导致设计质量不稳定,还会延长开发时间。
本书的写作目的是为广大的数字芯片开发工程师提供一种实用的指导方法论。书中梳理了常见的基本算法在数字电路实现过程中的落地步骤和注意事项,并在计算时间和面积等方面对一些常见方法进行比较,最终使得读者遇到基本算法问题时,能够有的放矢、胸有成竹、按部就班地进行电路设计、参数确定和问题分析。 在掌握了本书介绍的技巧和方法论之后,数字芯片开发工程师就有能力承担算法和数字设计的综合性任务,从事更为复杂的算法电路设计工作。
你在阅读本书的过程中有任何疑问,均可通过以下平台与作者联系,作者将尽可能提供满意的答复。
(1)微信公众号:皮特派讲芯片。
(2)B站:皮特派。
(3)知乎:皮特派。
你也可在公众号“皮特派讲芯片”中回复“算法”获取本书的配套参考代码。