芯片设计被誉为人类历史上最细微也是最宏大的工程,芯片研发工作者需要把数百亿颗晶体管集成在面积最小至指甲大小的芯片上。
如此复杂的工程,从设计阶段开始就错综复杂,很多环节互相串联,形成一个长流程,需要专业细分、领域不同的研发人员、专业人士和科学家集团队力量协作而成并且保证每个环节的高正确度。这样精密的研发和跨领域协作是完全不可能靠手工完成的,研究人员所仰赖的是一种名叫 EDA 的工具。其全称为电子设计自动化(Electronics Design Automation)工具。
正是这一工具在 1983 年问世,释放了芯片研发者的创造力,把手工设计完全升级为电子自动化的设计,从而促成芯片技术发展进入大爆炸时期。
一般来说,芯片设计分为以下几个步骤:
1. 功能定义和实现:通过采用类似编程语言的硬件描述语言(Verilog)来“描述”芯片的电路寄存器传输级(RTL, Register Transfer Level)最终设计达成的性能目标——编写出代码来实现芯片的功能。
2. 验证(Verification):芯片电路是否达到预期行为和目标性能。
3. 逻辑综合(Synthesis):把抽象的电路行为描述(硬件描述语言)自动翻译为电路级描述(逻辑电路图)。芯
4. 物理实现(Physical Implementation):把逻辑电路转换成为有物理连接的电路图,将上百亿或千亿元器件和电路合理的布局布线并使其互不干扰。
5. 设计签核(Sign-off):在芯片完成物理实现以后,芯片在物理层级所表现的时序性能和功耗指标是否能满足预期的目标,版图上的线条尺寸是否符合制造工艺的的严格要求,都需要确认无误以后才能正式流片生产。芯思想
以上几个步骤都完成了,芯片才能正式进行制造、测试和封装。
最新的数据报告显示,当前单个最先进工艺的芯片设计环节成本已经高于 4 亿美金(见下图)。如此高昂的成本让芯片研发的容错率降至冰点,也因此芯片设计几大环节中的“验证”,变得日益重要。
本文就验证的重要性进行一个浅述。
一、芯片进入 SoC 时代,验证工具变的必不可缺芯思想
系统级芯片(SoC- System on Chip)将微处理器、模拟 IP 核、数字 IP 核和存储器(或片外存储控制接口)集成在单一芯片上, 是当前芯片里的主流。SOC 这一概念在 20 世纪 90 年代出现,经过近 30 年的发展,SoC 可集成的内容越来越多,晶体管数量越来越大、功能越来越多元化,使得设计原理变的异常复杂。毫不夸张的说,一款 SoC 设计对于一个配置齐全的、有经验的研发团队来说,也需要 3-5 年的时间才能完成全部研发工作。
高昂至上亿美金的流片(Tapeout)成本,不可逆的研发时间成本,导致芯片设计的每个环节都不容许出现一点点错误;而且随着 SoC 所继承的内容和复杂程度日益提高,验证需要探索的空间和范围越来越大,每一次验证都像是一次“大海捞针”,因此验证所需要的时间亦越来越长。EDA 里的验证工具已然必不可缺,验证越充分,芯片的成功率就越高。
当前的验证几乎必须贯穿芯片设计的每个步骤,以便芯片研发团队及时发现错误,保证所投入的巨大研发成本不会覆水东流或错过最佳上市时间。据悉,在现在的 SoC 研发项目中,仿真和验证的时间占了整个项目 70%以上的时间,而仿真和验证工程师也占了整个团队的 70%以上。因为只有经过充分的仿真和验证,找出足够多的 bug,才能放心拿去流片。
二、反复验证—验证贯穿整个芯片设计流程
芯片在设计启动伊始就会设定非常严格的设计周期和面市时间,环节一环扣一环,验证是一个反复和交叉作业的工作内容,贯穿整个芯片研发周期,环节繁复但时间不能有任何延误,从而造成在单位时间内的验证任务成指数增长。并且,验证不仅仅是在芯片设计阶段,即使一款芯片已经量产出货,验证的工作可能依然没有结束。芯思想
这张图按照芯片研发的时间进程,示意了验证的每个环节:
1、 产品规划
在研发初期首先要启动的是验证规划,这是为了在产品规划的同时即确定验证方案和技术路线,并且保证验证结果有一定量的调试时间并有可行的调试方案。
SoC 研发时非常依赖选用一部分可复用的成熟 IP 核,以加快其本身的研发速度。但在选择合适的 IP 核时要同时考虑的因素有很多, 功耗、性能、安全以及成本,还有 IP 核与 IP 核,IP 核与其他模块之间通讯和数据交互的界面接口,等。因此,在初期,还要为某些标准的模块需要提前准备好验证 IP 核(Verification IP,VIP)并规划好不同的检测点,并具体落实在各个研发阶段和模块中。
2、架构定义
SoC 设计首先要定义系统的架构,其中包括但不限于定义功能、明确各 IP 和模块之间的通讯协议、功耗与性能的妥协关系等等。架构定义要基于该芯片使用后所面临经典工作场景进行假设和模拟,所以在架构定义阶段,需完成两个非常重要的验证:
一个是不同通讯协议下的功能验证 (Functional Verification),该验证允许设计工程师在设计阶段发现高阶的协议性错误(bug),在设计早期以非常低的成本进行修复。而如果进入到产品阶段才发现,修复的成本将会非常高。
另一个同步进行的是原型验证 (Prototyping),就是把硬件原型模拟化,提前对软件和硬件的配合表现进行验证。这样提前验证的好处是,在芯片制造前,便可以开展软硬件协同设计,提前发现问题、检测问题并解决问题,确保芯片在真正可使用时,研发团队已经拥有一个成熟的软硬件整体方案,芯片能切实支持软件的应用,大大将研发时间提前,提升整体研发效率。
3、流片前验证
前文提到,SoC 设计为了缩短研发周期会采用可复用 IP 核和新 IP。每一个 IP 核验证都在各自单独的环境中完成,以确保单独 IP 功能正确;但在复杂的 SoC 验证链中,不仅需要单点验证,更需要有多种验证手段进行系统性验证,确保各种 IP 核以及其他模块能协同工作。
IP 验证中惯用动态仿真(Dynamic Simulation)和形式化验证(Formal Verification)。二者在使用时都需要基于单独的验证基础环境,前者需要模拟出基础环境;后者要通过数学建模,在数字世界里搭建出环境假设和目标断言。验证工程师通过比较结果、仿真波形比对最终来判定测试用例是否通过。
流片前验证是 SoC 研发过程中耗费时间和资源最大的验证环节,而且是一个增量的连续过程,随着设计成熟度和设计复杂性的提高而提高。
4、硬件加速
严格意义上来说,硬件加速(Emulation)的使用是在流片前,属于流片前验证的一部分,但参与过芯片设计的研发者都知道,这个环节是流片前验证和流片后验证的桥梁,它将还处于 RTL 级别的设计放到一个可重构的虚拟硬件环境中,让验证速度得到成千上万倍提升,同时也让软硬协同成为可能。利用这种技术,我们可以在数小时之内,将操作系统在 RTL 模块上启动起来。
验证速度的提升,让验证的效率大幅提升,对验证成本的贡献是无可比拟的。俗话说,有得必有失,有失必有得。验证工程师发现,验证速度的提升的同时,能够观察的信号将会急剧减少,并且那些需要被观测的信号,必须在产生 FPGA 比特流之前就要定义好,一旦没有定义,重新编译可能又需要耗费好几个小时。
为了解决上述问题,现在 EDA 公司已经推出了硬件加速器(Emulator),硬件加速器在仿真速度和可观测性之间进行权衡和取舍,速度上向原型验证靠拢,而可观测性向仿真器靠拢,在仿真器和原型验证之间增加一个验证产品,但是因为硬件加速器结构特殊,价格昂贵,只有芯片利润相对丰厚的大企业才用得起。
5、流片后验证
流片后验证一般发生在芯片实际生产结束以后,在芯片进行量产之前,将测试批芯片在实验室进行各种测试,确保功能、时序、性能、功耗、物理应力得都符合设计预期,在完成所有的验证以后,再进行批量生产。如果在这个阶段发现错误,其修复的成本将会非常高昂,甚至成为不可能。如果一个错误被确认为功能错误,设计团队就必须对进行修复,修复错误的方法有多种,包括利用系统微码来避免失效的条件。但如果错误必须在硬件层面进行,那就需要重新流片了。
三、验证技术的挑战
随着晶体管的数量和设计的复杂度在不断提高,模块增多,要找到它们中间最佳的互动可能性必须通过更充分地验证才能找到最优方案。芯片设计的各阶段,需要不同的验证方法和多种验证工具相互配合,解决不同的问题。芯
以 5G、大数据、智能驾驶、物联网为代表的新兴市场让芯片的类型和数量都有了指数式的增长。但增长的背后,是对 SoC 研发周期的更高要求。如何在更少的研发时间里完成更多的验证工作?一是提升验证工具的可扩展性,让验证成为一个“交钥匙”一样的工程;二是让设计自身具有可配置性,针对不同的应用场景,可以通过升级底软或固件、或者是通过硬件重构来解决出现的问题。
1、工具可扩展性
工具的扩展性是解决繁重验证的一个重要手段,可是工具的扩展性本身就有很大的技术问题。以形式化验证为例,尽管自动化技术已经一再升级,然而与 SoC 系统复杂性的提升速度相比,还是有很大的差距。因为这种技术推进的差距,让验证技术开始越来越向解决特定问题演进。如形式化验证越来越集中用来解决安全和死锁的问题,而不是用其作为一个通用的验证技术。这就变相增加了验证的工作量,因为需要使用不同的验证技术来配套使用,与提高工具可扩展性的目标完全背道而驰。
2、验证标准的缺失
验证标准也是一个关键的挑战。验证标准就是到底要验证什么,为什么要这样验证。传统的验证标准主要依赖需求,将 SoC 应具备的表现、或者是某些场景下期望的行为规范定义好,甚至将一些不清晰的行为模糊定义,或者是干脆不定义,留下灰色地带;然而这些有意为之的模糊定义在当前芯片设计中缺成了一个大问题。
微处理器(MPU)设计公司,都有一个专门的仿真器来仿真指令系统结构(ISA),并将此作为验证标准。可是 SoC 设计因为牵扯到设计不同的功能模块,标准也需要跨模块,单纯的指令仿真不足以验证这类芯片设计的正确性,从而让验证标准无从定义和参考。
3、低功耗的广泛使用
随着物联网时代的开启,所有的 SoC 都要必须在设计中考虑低功耗问题,使得电子产品的待机时间更长。在 Soc 设计中采用门控功耗和门控时钟技术成为使用最广和效率最高的功耗节省方式。门控功耗依靠关闭那些不用的模块节省功耗,而门控时钟则是通过关闭那些不需要激活的模块和寄存器来缩减功耗。
目前产业界已经开发了标准语言用以支持 RTL 仿真中的功耗行为,但是却大幅提升发验证工作复杂性。
对一个低功耗设计而言,设置数十个电压域和数千种功耗模式是非常常见的行为,验证规划需要确保在所有功耗模式下电路的行为皆正确,其复杂程度和验证负荷可想而知。
4、芯片安全要求的提高
现今社会对信息安全的要求提升到了一个从来未有的级别。万物互联的背面是我们往往对电子产品链接了那些设备都无从而知,如冰箱、电饭煲甚至灯泡等,导致无法定义危险是什么,如何去验证更是无从谈起。
另一种安全的维度是功能安全。系统的突然失效不能伤害到芯片,而这种失效在汽车和航天产业尤为突出。即使芯片经历了突发事件,也要确保这些芯片不受损坏。芯思想
这种种高安全要求都对验证提出了新挑战。
5、软硬件协同验证的挑战
在传统的 PC 世界,硬件和软件总是非常容易区分清楚,因此软件验证和硬件验证也在各自独立的流程中进行,楚河汉界异常明确。
然而科技进步使得这种界线变得越来越模糊,甚至在许多的情形下,硬件和软件已经密不可分,比如智能手机和智能汽车。没有相应的固件和软件运行,有些芯片模块根本无法得到期望的电路行为,这会从不同的层面改变验证的方法学。
如今软硬件的无缝连接,直接决定了软件的开发节点需要配合 RTL 的进程。反过来,验证软件的时候,亦需要硬件模型足够稳定、成熟且快速。如何一并对硬件和软件的系统功能进行验证,除了验证所必须的环境外,确认设计错误发生的地方和机理已经成为一个必须要面对的课题。
四、国产空白之“忧”
尽管近十年来,国产 EDA 工具取得了一些成绩,但我们也要正视存在的差距。差距主要体现在四个方面:芯思想
1. 缺乏数字芯片设计核心工具模块,无法支撑数字芯片全流程设计。
2. 对先进工艺支撑还不够,除了个别两三个工具能支持 14 纳米、7 纳米、5 纳米之外,其它很多工具都做不到。
3. 缺乏制造及封测 EDA 系统,无法支撑芯片制造和封测厂商的应用需求。
4. 核心验证工具和验证平台缺失,没有完整的 EDA 工具链。
根据最新的调研数据,国产 EDA 工具在国内市场的占有率可谓惨不忍睹,还不到 1%,只有约 0.8%。概伦执行副总载兼博达微总经理李严峰在《再谈本土 EDA 竞争力顺便聊聊 DTCO 在中国落地》一文中指出,EDA 中国市场份额全球占比并不高,市场容量也不大,国际竞争对手环绕,挣钱并不容易,没有市场和利润的支撑,光靠政策面支持不能持久。同时指出,在 EDA 的用户群中,最好的设计和制造公司都在海外,真正卡脖子的工具需要与先进工艺和设计一同迭代,这个不是靠钱能解决的。不管战略还是要解决卡脖子问题,EDA 还是集成电路的一环,集成电路的竞争力离不开市场,EDA 的重点还是围绕市场做有竞争力的产品和技术。
回到验证工具这个正题。通过数十年的发展,验证工具一直伴随市场的需求在向前发展。目前主要的验证方式非常繁复,包括前文所提到的动态仿真(Dynamic Simulation)、原型验证 / 硬件加速(Prototyping and Emulation)和形式化验证(Formal Verification)之外,还有很多其他方式方法。在实际工作中,如何选择验证方式,是否能有一个可反复使用的验证平台,实现这些不同验证方法的跨越,是当前芯片研发者最关心的话题。
目前国际 EDA 巨头基本上都在动态仿真、硬件加速、原型验证和形式化验证上能够提供完整的解决方案,并且还在通过方法学和旁类技术的应用来提升验证的效率。芯思想
和大多数 EDA 工具一样,中国在验证工具的技术储备几乎为“零”,近年国内 EDA 公司在验证上有所探索,但是产品主要还是集中在后端实现和芯片测试阶段,SoC 设计过程中验证负担最重、使用频度最高的数字集成电路验证 EDA 工具套件,国产技术依然是“零”,国内芯片设计公司在研发 SoC 时,依然 100%使用国际 EDA 巨头的相关验证工具。
五、小结
验证(Verification)的重要性是证实(Validation)我们永远不会“不可能出错”,这也是验证之痛,因此我们只能决定何时是“足够接近没机会出错”,然后开始主观标准和实用主义之间的权衡。
不同类型的 SoC 设计可能需要不同的验证策略、工具和测试环境,大型 SoC 设计需要复杂的流程,多种工具包括虚拟原型、模拟器、仿真器和原型验证等理想化地集成在一起并可扩展,并且可以在不同的验证阶段重复使用测试。
尽管国产验证工具起步阶段,发展任重道远。但随着芯片设计的日益复杂化,验证工具更趋于多样化。是否也给国产验证工具带来新机遇呢?
鸣谢
本文在成稿过程中得到电子科技大学电子科学与工程学院副教授黄乐天、西南交通大学信息学院电子工程系副系主任邸志雄的帮助。特此感谢!