通过虚拟硬件原型 加速边缘智能系统创新
扫描二维码
随时随地手机看文章
随着人工智能(AI)技术突飞猛进的发展,我们已经看到了一个不争的现实,那就是AI的演进趋势一定会走出数据中心,落地千家万户,深入各行各业,赋能智慧万物,这也就注定了物联网、边缘计算和嵌入式系统一定是AI未来的主战场。传统物联网和嵌入式系统开发部署方式给边缘智能的腾飞带来了很大的挑战:市场碎片化、软硬件强耦合、开发流程冗长等等,使敏捷软件开发和应用创新举步维艰。作为移动互联网时代智能手机芯片架构的领军者,Arm总结了推动市场发展的要素,并推出先进现代的方案和工具链,使软、硬件的开发能够齐头并进,加速智能物联网、嵌入式及边缘智能系统的创新。
支撑智能手机百花齐放,百家争鸣的强大App生态系统的核心技术之一就是主流的应用商店,使App开发者不受智能手机硬件的束缚,独立地采用最先进的敏捷软件开发方法在虚拟硬件原型上进行创新。但是传统的嵌入式软件开发对硬件开发板存在较强的依赖性。将虚拟硬件原型引入物联网和嵌入式开发将是引爆边缘智能市场发展的关键。说到这儿,我必须要提一下当前热门的元宇宙和数字孪生概念,它们其实都是依托于对现实世界的虚拟化、数字化,来创造与现实世界映射和交互的虚拟世界以及具备新型社会体系的数字生活空间,使人与人的交流、新产品开发、工业控制、甚至是教育培训更简易便捷。虚拟硬件原型与这些概念不谋而合。
虚拟原型和硬件设计
在设计功能更为强大而复杂的集成电路和芯片时,设计人员在硬件和软件层面均面临艰巨的工作任务。SoC架构师需设法对硬件组件(即IP模块)进行早期评估,检查各种IP配置以降低技术风险,权衡设计方案并且了解哪些要素最适合给定的系统要求,这些对SoC能否成功商用有着直接影响。此外,设计性能常常会受到设备上所运行的软件影响,那么该如何在芯片推出前预测实际性能呢?
为此SoC设计人员需要对系统进行建模,通过软件和硬件的系统级表示,设法估算组件在交互状态下的性能。虚拟原型是测试组件级和系统级元素的一种有效方法。芯片虚拟原型通常由使用SystemC等专用语言编写的连接组件模型组成。使用一种标准语言可将不同供应商提供的IP组件模型整合到同一个虚拟原型中,从而更适合运行实际的软件工作负载。
提早开始软件开发
鉴于现代边缘智能系统软件的复杂性以及软硬件联合创新的诉求,产品团队不可能等到硬件就位后才开始软件开发。提早开始软件开发有两大明显优势:
首先是及早验证硬件/软件接口。软件与硬件平台集成有点像丑媳妇见公婆,时常会因为相互不了解不熟悉而产生摩擦。不光是软件,硬件系统在集成过程中也会报错。在设计流程中尽早验证硬件/软件接口可以避免代价高昂的硬件返工情况,进度也不会因此延迟。对此,虚拟原型就能派上用场。硬件设计的快速功能模型不仅细化到可从软件程序员的角度来模拟硬件,而且抽象到能以大规模软件开发和调试所需的模型执行速度来运行。现代功能模型可在数秒内启动Linux,实现单步调试代码的速度与调试器直接连接到硬件的速度旗鼓相当。
功能模型源自硬件规格,并且可在硬件规格逐步确定的过程中迭代开发成虚拟原型,因而无需等到最终设计方案敲定才开始。只要各部分的设计确定后,即可开始构建模型,软件团队便能在最终设计完成前迭代开发软件。鉴于硬件和软件团队在产品的各个设计环节都会通力协作,实现并行开发,让验证工作能更早开始,验证时间更充裕,覆盖面更广,这势必会提高软件的质量。
其次是缩短产品上市时间。目前针对复杂的嵌入式系统的软件开发,在时间和成本上均已超过了硬件设计。若等硬件就位并稳定后再开始软件开发,这会使产品开发的时间线延长12个月或更久。
从软件程序员的角度来看,准确的快速功能模型不仅适合于低层软件(比如对建立新的硬件平台至关重要的设备驱动程序和固件)的早期开发,而且还可用来移植或开发更高层级的软件栈,例如中间件和操作系统,甚至应用程序。
用于软件验证的虚拟平台
软件栈规模越大、越复杂,开发和测试的难度就越高。持续集成/持续交付(CI/CD)等现代软件开发方法有助于在软件开发早期识别出缺陷,从而更容易确定缺陷出现的位置和时间。针对嵌入式应用的传统硬件目标不太适合持续集成流程,因为它们依赖如开发板、JTAG连接设备、专用机架以及散热和远程复位硬件等专门的基础设施。虚拟平台可以高弹性地部署在云服务器上,并且利用先进的云计算服务和资源,或大多数公司既有的服务器基础架构。这样的虚拟平台就很适合作为持续集成和自动化测试使用的沙箱环境。服务器硬件的降价加上低成本、可扩展容量在云端的可用性,使软件验证沙箱成为验证大型软件平台最先进的方法。
策略对比
虽然虚拟原型具有诸多优势,但硬件/软件的共同开发和软件早期开发也会用到其它方法。其中最常用的是硬件仿真和FPGA原型设计。
1. 硬件仿真
硬件仿真指的是在硬件仿真器上编译RTL设计,主要用于系统的功能验证。仿真器的速度比在RTL模拟器中运行RTL要快几个数量级。虽然速度还未快到足以支持大规模的软件开发,但已足够运行软件实际工作负载。该设计具有卓越的可见性,几乎所有的信号都可以被暴露出来,从而可以调试硬件/软件接口。
2. FPGA原型设计
FPGA原型设计指的是在现场可编程门阵列 (FPGA) 上合成RTL设计。与仿真相比,FPGA速度快且成本相对较低,但它很难配置和调试。通常SoC设计的规模比最大的FPGA还要大,因此需要将设计拆分成多个FPGA,这就给速度和时间安排带来了挑战。FPGA的速度比仿真器快几个数量级,进而更加适合于软件开发。
3. 虚拟原型
采用FPGA或仿真解决方案均需近乎完成的RTL来加载和运行软件。虚拟原型为软件团队执行诸多软件任务提供了一种替代方案。虚拟原型并不依赖于RTL,并且可在RTL可用前的数月交付。
虽然没有基于硬件的解决方案那么详细,但模拟模型提供的性能更优,可以灵活、轻松地重新配置设计,并且具有出色的软件调试和分析能力。虚拟原型还特别适合于持续的软件集成任务,原因是它们的速度快且易于在计算场中部署,这确保了开发期间更出色的软件质量。
4. 混合技术
仿真、FPGA原型设计和虚拟原型设计各有利弊,因此大多数项目都会混合使用这些技术。快速的功能虚拟原型与仿真混合使用可以做到两全其美,性能速度比单独使用仿真器要快,并且在虚拟模型上调试软件的可见性和灵活性也得到了提高。虚拟原型和FPGA也可混合利用,其中需要定期更改的设计部分将居于虚拟原型中,而稳定不变的设计部分则居于FPGA中。
此外,还有一种混合解决方案是纯虚拟原型,先使用快速的功能模型以非常高的速度运行至软件栈中的重要节点,然后再转而使用更慢、更准确的模型进行性能分析。也就是在更快速的模型上运行软件,直至到达重要节点,然后再捕捉架构状态,也就是常说的检查点技术。
5. 选择合适的开发路径
设计团队所面临的最大挑战在于要了解所有可用选项,并能物尽其用。对大多数项目而言,一条路径可能并不足够。显而易见的一大问题在于从何处获取虚拟原型?大多数情况下,IP供应商在设计IP时会开发模型,从而可以尽早验证硬件/软件接口,并且更早地开始移植操作系统和开发驱动程序。这些虚拟原型可能之后会流向下游的最终用户,成为软件开发的学习工具和平台。再者,软件服务供应商也可创建芯片供应商IP模型或将多个供应商的IP集成至一个虚拟原型中,用以出售给任何使用该IP的人员。
结论
SoC项目中遇到的软件早期开发难题并不新鲜,但和硬件的复杂性一样,其难度一直在不断增加。项目需要混合使用各种技术和解决方案才能完成所有所需任务。软件在系统早期设计中起着愈发重要的作用,特别是在IP的选择和配置方面。随着嵌入式边缘智能产品中不断增加虚拟化技术和虚拟机监控程序,软件也变得日益复杂,并且安全也与功能软件栈同等重要。
IP供应商将更多精力放在了提供用于性能分析的周期精确模型,以及用于开发完整软件栈的快速功能模型上。仿真和FPGA原型设计等辅助技术及混合使用模式是IP供应商支持软件开发的另一种方式。并不存在一劳永逸的解决方案,因此项目团队要做的就是及时了解最新技术,利用所有可能的解决方案,并借助软件的力量,尽可能圆满地交付SoC。