AI驱动的设计应用
如今,芯片开发竞争愈发激烈,芯片制造商迫切希望芯片在送到实验室后,能尽快完成相关工作并尽早发货。更准确地说,他们希望从芯片送达实验室到将产品交付给客户,整个过程仅需数小时的时间,而不用耗费数天或数月。这就要求整个系统(包含芯片及其上运行的所有软件)必须提前准备就绪,并按预期运行。
软件已成为当今电子系统中不可或缺的组成部分。从虚拟现实(VR)头显,到高等级自动驾驶汽车,这些由软件驱动的系统都依赖于精密的复杂算法,才能让从元宇宙沉浸式体验到高级驾驶辅助系统等功能得以实现。
先进片上系统(SoC)和Multi-Die系统中的软件内容呈爆炸式增长,使得开发过程变得复杂而耗时。若要确保满足产品上市时间要求,硬件设计和软件开发就必须齐头并进,而不能等到硬件设计完成后再开始软件开发。而软件启动(bring-up)旨在确保软件功能完全正常、与目标芯片进行了正确集成并针对目标芯片进行了优化,它对确保整个系统的质量和性能至关重要。
面对这些挑战,开发者该如何才能更快、更高效地完成软件启动过程?在Multi-Die系统中,每个异构芯片都可以是一个拥有完整软件堆栈的独立系统,且所有芯片必须协同工作,才能实现Multi-Die系统的功能。那么,大型Multi-Die系统会对软件启动流程产生怎样的影响呢?本文将重点介绍Multi-Die系统的复杂性和相互依赖性给软件启动带来的新挑战,以及虚拟原型和电子数字孪生等技术如何帮助开发者应对这些挑战。
Multi-Die系统已逐渐成为半导体设计的主流,让开发者可以更迅速地扩展系统功能、降低风险并缩短产品上市时间。对于AI、ADAS、超大规模数据中心和高性能计算等计算密集型应用,Multi-Die系统已成为系统架构的首选。
Multi-Die系统将多个芯片(也称Chiplets)融合在一个封装中,带宽和功耗表现出色,可满足各种应用不断提高的功能需求。Multi-Die系统的模块化架构可帮助芯片开发者更迅速地打造新的产品型号,从而更快抓住多个终端市场的机会。
与单片系统相比,Multi-Die系统使软件变得更错综复杂,甚至也让开发变得更困难。单片SoC通常由具有特定组织结构的团队,按预先确定的日程安排开展开发工作。Multi-Die系统由多个芯片组成,而这些芯片可能采用了不同的制程节点,因此传统的流程是行不通的。
从技术角度来看,十年前由多个PCB组成的系统,如今已演变为可由单个Multi-Die系统代替。这其中的软件复杂性变化不言而喻。除了在各个芯片的硬件上调试软件堆栈外,开发者还需要对整个系统进行集成和测试。数据通过复杂的Die-to-Die接口在芯片之间不断流转,例如通用芯粒互连技术(UCIe)(通常基于PCIe或CXL)。这些接口需要进行正确的软件设置和编程。随着软件虚拟机监控程序的加入,情况变得更加复杂,因为软件虚拟机监控程序会使用复杂的虚拟化功能和半虚拟化软件驱动程序(如单根输入/输出虚拟化(SR-IOV)标准)来共享硬件接口。在单个PCIe主机/设备中开发和调试这些设置已非易事,而对于包含多个此类接口的复杂Multi-Die系统,更是难上加难。调试工作在技术层面和组织层面都面临重重挑战。在技术层面,目前芯片功能不断增加,但调试接口数量有限,调试可见性因此受到限制;而在组织层面,调试流程可能要求不同公司的团队建立联系,以了解并共同确定调试方案,其中的困难显而易见。
为确保最终应用正常运行,量产前就必须将芯片上运行的软件载入硬件加速系统中,进行超过数百亿个周期的测试。在就Multi-Die系统硬件组件做出任何决策时,都需要综合考虑软件的影响。软件在不断发展,因此测试过程也要随之持续演变。
在新设计的硬件上进行软件调试,是为了使软件中的设置与目标器件的特性相匹配。换句话说,软件必须与硬件相匹配,才能确保功能正常,使系统达到出色性能。此过程包括由专用控制器对芯片进行底层初始化,并对主操作系统进行调试。软件实际上是一个多层整体堆栈,其中可能包括提供服务的中间件、设备驱动程序或与外界通信的元件(如USB或以太网控制器)。
通过采用多种流片前技术在不同的抽象层次进行部署,可以进一步缩短产品上市时间并提高软件质量。以下列举了五种技术:
虚拟原型,由开发者创建事务级模型,其本质是使用C++语言为以RTL语言设计的芯片创建等效模型。这有助于实现流程左移,并支持引导启动。虚拟原型可在整个软件开发团队中进行扩展。对于主机上的操作系统而言,虚拟原型模型就像是真实的设备。虚拟模型可以连接到真实的物理接口(如PCIe、USB和以太网),也可以连接到硬件加速器或原型上的RTL模型,从而使虚拟原型能够在现实环境中进行交互,并为某些类型的测试提供真实的激励输入。
对RTL依次使用硬件加速和物理原型系统,这样可以达到一定的精度,但速度比虚拟原型要慢。这种方法需要成熟的RTL和IP描述。后续通过应用快速物理原型,开发者可以将软件与物理设备连接起来,以验证芯片在现实中的运行情况。
混合原型,将虚拟原型和物理原型(即基于FPGA)的优势相结合,以加快软件开发和系统集成。硬件和软件开发者可以借此提高调试可见性,并更好地控制开发中的软件,从而更大限度地优化原型性能,并加速系统启动。
电子数字孪生,为开发中的系统提供虚拟表示,以便开发者在确定最终设计前分析和优化设计,并加速软件启动、功耗分析和软件/硬件验证流程。
除了加速软件启动外,这些流片前技术还可以帮助开发者测量芯片的关键性能指标(KPI),有助于尽早验证性能和功耗,履行对客户的承诺,从而降低项目风险、减少返工,为按期投产和后续芯片销售提供保障。
根据软件任务的具体需求,Multi-Die系统开发者可能要在不同抽象层次上混合使用不同的验证引擎。鉴于软件非常多样化,可以考虑先采用虚拟原型引擎,然后再结合虚拟和物理原型/硬件仿真加速(分别称为混合原型和混合硬件仿真加速)技术,为软件开发者提供支持,同时满足Multi-Die系统的容量需求。例如,部分流片前软件可以在硬件加速器上运行,同时通过虚拟原型或建模对其他软件组件进行抽象处理。在设计流程后期,开发者还需要对硬件上运行的软件(也就是整个系统)进行验证,以确保达到性能目标。
对于Multi-Die系统的软件启动而言,混合方法可能最为有效。所有的单个组件都验证结束后,就可以在大容量硬件加速器上运行整个Multi-Die系统,如最大容量300亿门级的新思科技ZeBu®硬件加速系统。而通过Synopsys Cloud等解决方案在云端运行硬件加速还为Multi-Die系统提供了更大的容量,并可根据高峰需求时段的情况更灵活地利用硬件加速器资源。除了ZeBu硬件加速系统外,新思科技验证系列产品还包括新思科技HAPS®原型系统和新思科技Virtualizer™虚拟原型解决方案。该系列产品共同提供了早期软件启动和系统验证所需的功能。随着AI持续融入电子设计自动化(EDA)流程,机器学习算法也将有可能在软件启动期间发挥关键作用,并在软件调试期间帮助进行根本原因分析。
软件定义系统为我们带来了种种新奇产品和工具,例如可以带我们畅游天南地北的VR头显、可以自动泊车和自动驾驶的汽车,以及可以控制家庭照明和暖通空调系统的AI智能扬声器等等。上文讨论的多种流片前技术,有助于加速Multi-Die系统的软件启动过程,以确保协同优化系统中的软硬件,从而实现最终应用的功能和性能目标。硬件加速器和(虚拟)原型系统及其混合组合等验证解决方案,可为新兴技术提供支持,帮助开发者打造各种智能互联的电子产品,进一步丰富我们的智能生活。