(本文编译自Semiconductor Engineering)
硬件与软件协同开发一直是我们一直追求的目标,然而,这一进程仍面临重重障碍。这两大领域在关键时间节点上,往往无法精准匹配对方的需求。
在开发流程中越早处理问题,之后发生的故障就越少,一旦错过最佳解决时机,修复将变得更加困难,修复成本也将急剧攀升。因此,我们亟需革新现有的工具与方法,确保流程中的每一步都能尽早获取关键信息,并配备预测潜在变更影响的先进工具。这一过程,常被形象地称为“左移”,在硬件与软件的协同设计或集成领域,它无疑是一项艰巨的挑战。
传统上,软件集成工作往往在首个芯片完成后才得以启动,但业界正力求在此之前便完成这一步骤。若在芯片之后进行集成,虽有可能遭遇意外状况,但届时硬件的修改已几乎不可能。这一滞后导致的后果,便是软件修改的代价高昂,进而严重影响产品的上市时间、性能表现及功耗。
然而,这并不意味着在硬件开发阶段必须提供完整的成品软件。我们或许可以定义实际的软件工作负载,以便对硬件架构进行优化。尽管可能存在来自以往产品的软件或原型软件,它们或许并非最终会部署于硬件上,但对于众多硬件设计任务而言,仍能提供宝贵的参考与帮助。例如,通过分析这些软件,我们可以识别出潜在的交通拥堵点或峰值功率需求,从而设计出更加合理的供电网络。
在其他特定场景下,成熟的软件已经存在,而硬件则是为了专门加速该软件而进行设计。例如,视频编码对于流媒体服务来说是一项极为重要的任务。在执行这项任务时节省功耗能够带来显著的能效提升。对于AI/ML(人工智能/机器学习)硬件而言,不仅软件在硬件开发之前就已具备可用性,而且几乎可以预见,当硬件最终就绪时,软件也已经取得显著的进展。
这些情况促使企业不得不重新评估与硬件及软件开发与集成相关的方法。尽管市面上涌现了越来越多的工具来帮助解决这一问题,但工具开发领域本身也面临着类似的挑战。硬件工具开发者与软件工具开发者往往分属不同企业,他们尚未形成合力,共同攻克这些交叉领域的难题。
无论硬件还是软件先行,都需要有办法在虚拟层面上将它们整合到一起。“实现早期集成的关键在于抽象,”新思科技产品管理与应用工程副总裁Marc Serughetti强调,“这与众多领域的做法并无二致。抽象之所以必要,是因为它允许我们在尚未掌握全部细节的情况下,提前获取关键信息。然而,抽象也有其局限性——它会筛除部分信息,若这些信息最终证明至关重要,则可能导致这部分信息丢失。因此,这些方法的成功实施,有赖于将其视为一个迭代过程,并在其中设立明确的里程碑,以确保信息的完整性和准确性。”
软件的可用性
软件种类多样,每一类别均需个别考量。“SoC中内置了微代码,”Cadence产品管理和营销的总监Jeff Roane解释道,“它们由半导体供应商开发,终端用户通常不会对其进行改动。除了终端用户的应用程序代码外,在SoC设计出来之前,应用程序代码鲜有已经存在。以安卓和苹果iOS软件开发工具包(SDK)为例,全球都在基于它们开发应用程序。供应商们致力于确保SoC与既有项目、遗留系统及新开发内容实现百分之百的兼容。而对于新一代SoC而言,应用程序代码的开发面临着一个类似于‘先有鸡还是先有蛋’的难题。”
这时,通常需要采取多管齐下的策略。Arteris产品管理和营销副总裁Andy Nightingale指出:“我们通常采用软硬件协同设计的模式,两者均进行了持续迭代。软硬件团队间的紧密合作确保了硬件定型时,软件已具备就绪性或适应性。很多时候,我们会提供聚焦核心功能的早期代码库,或者设计测试软件来模拟真实的工作负载和基准。”
部分行业正探索其他路径。“在汽车行业,他们正努力将软件与硬件分离,”新思科技的Serughetti说道,“尽管总有些软件需依赖硬件,但可以开始对这些部分进行分离。左移策略的首要任务是探讨如何在硬件独立的情况下启动应用软件的开发。至于更低级别的软件,则是如何在缺乏硬件支持的情况下着手开发。这正是虚拟原型概念大显身手之处。左移策略的核心理念之一,是避免软硬件结合的瞬间发生大规模集成的情况。随着软件开发、验证以及确认朝不断迭代的过程发展,你将围绕多个维度进行验证与确认。”
集成开始得越早,其价值越大。是德科技射频/微波、电力电子及设备建模EDA业务高级总监兼产品组合经理Nilesh Kamdar强调:“左移,并使相关事物能在软件环境中可用,可以让系统设计师或架构师提前预判问题。虽然仍会有一些问题被遗漏,到很晚才被发现,但许多问题都有机会在早期得到解决和识别。对于无线通信而言,硬件与代码开发并行不悖。虽然并非总能完全同步,部分代码开发或许会在后续继续,但多数工作都会提前展开。”
在其他领域,这种协同尚未达成。“设计阶段软件的可用性仍是主要挑战,”Fraunhofer IIS自适应系统工程部门高效电子负责人Andy Heinig表示,“数字孪生的目标就是让设计与制造并行,同时开发软件。然而,通常只有适用于旧一代硬件的软件可用,这仅作为起点,未能充分考虑新功能与需求。”
最终是让硬件与软件相互影响,以共同部署最优解决方案。这意味着需尽早为软件开发提供硬件抽象,并建立软件开发实践,确保软件的关键部分能在硬件开发初期即投入使用。
软件开发所用硬件
没有一种解决方案是完美的,正如所有形式的抽象都伴随着取舍:或是准确性,或是可见性,或是性能。西门子EDA高级产品经理Jeff Hancock指出:“我们需要结合云原生模拟、丰富的模型库、集成化的工具链以及混合(虚拟/RTL)环境,以构建一个高效的生态系统,满足现代硬件与软件开发的需求。”他进一步表示:“这一生态系统将虚拟与混合模型相融合,不仅加速了开发流程,还提升了最终产品的质量和性能,使得软件团队能提前数月乃至数年着手工作,助力客户更快,并以更好的产品质量进入市场。”
虚拟化能够提供最高性能。Arm北美汽车市场总监Robert Day表示,“在汽车行业中,SOAFEE是一个由超过140家汽车和软件生态系统成员组成的合作组织,致力于定义一种架构,以支持采用现代虚拟化技术进行云端开发,并能无缝部署至车辆。这一方法使得汽车制造商能够在不同的硬件平台上移植相同的软件,并确保在硬件可用之前即对软件进行测试。”
许多硬件开发团队从定义高级模型入手。Cadence的Roane表示:“如果你拥有一个虚拟模型(数字孪生),即一个用C++编写的高速模型,你可以在其基础上进行一定程度的软件开发。然而,这受限于你能够多快地模拟出足够多的模式以进行有意义的工作。处理图像或音频流的应用可能需要数百万个周期。即便你正在开发C模型,也存在局限性。这些模型的速度不足以支持有意义的软件开发。”
这仅能让你对功能正确性充满信心。Roane补充道:“另一个方案是将设计映射到FPGA上,它能以兆赫兹以上的速度运行。但挑战在于,如果你的设计原本是针对ASIC或IC工艺节点的,那么将其映射到FPGA将是一个全新的不同设计,因为你要映射到不同的结构上——复杂的逻辑块,而非基本单元。时间成本完全不同。你必须对整个设计进行重构,才能将其映射入FPGA。”
此外,映射到FPGA可能会牺牲可见性。Serughetti指出:“为了增强可见性或获取性能和功耗的准确数据,你需要在模拟器上运行实际的RTL代码。这可能会非常慢。于是你会问,我真的需要在模拟器中安装Arm处理器吗?我可以将其放在虚拟平台上。混合世界让我们将开发过程视为一个随着软件增长而不断迭代的过程。它还允许我们将问题分解为几个部分。当人们谈论左移时,包含两个要素:一是更早开始;二是逐步进行。要启动操作系统,你不需要完整的SoC。为GPU开发驱动程序,你只需要GPU和一些主机核心。”
另一方面,硬件为软件提供了更深入地了解性能和功耗等因素的能力。Roane表示:“我不知道这是否已经实现。在哪个阶段,软件开发人员会收到关于他们正在开发软件的设备的功耗特性的反馈?软件开发人员与提供纯功能视图的调试器交互,他们不习惯查看硬件结构,也不习惯查看这些硬件结构的功耗配置文件。在解决问题时,需要团队合作。软件开发人员仍然专注于功能及其性能。但在优化功耗方面,仍然是硬件团队的职责。”
这正是持续集成和持续部署(CI/CD)等服务的价值所在。Arm的Day表示:“它们使开发人员能够管理不断发展的软件工作负载。CI/CD管道有助于跟踪软件变化,并确保它们不会对性能或功耗产生负面影响。这些服务提供自动化测试和部署,在软件和车辆的整个生命周期内保持软件的完整性。”
CI/CD提供了宝贵的反馈循环。Arteris的Nightingale指出:“通过定期将软件更改集成到测试环境中,你可以评估其对性能和功耗的影响。回归测试可以识别与既定基线相比的变化。这为软件开发提供了重要指导,确保其符合硬件约束条件。”
重要的是,要清楚每个解决方案的目标。“没有万能的解决方案,让你可以模拟一切,创建一个以千兆赫速度运行的虚拟孪生,然后让你完全了解一切,”Roane强调。“这些都是帮助你朝正确方向前进的解决方案。但你设计硅片总有原因。它才是提供足够动力来运行一切的原因。”
硬件开发所用软件
在每个硬件的开发任务中,都需要使用不同层级的软件。Serughetti表示:“在架构探索初期,可以采用前代产品所使用的软件。或者,也可借助任务图来描绘软件,这并非软件的实际功能行为,而是对软件内部事件的表达。你试图要做的是优化互连和存储器。而为此你并不需要用到所有的软件。”
当设计功耗优化时,则需要对软件有更精确的呈现。“若想要实现功耗优化,必须针对实际或真实的工作负载进行优化,这要求我们与软件团队紧密合作,”Roane强调。“以往,人们尝试开发一些代表有意义工作负载的向量,但鉴于软件的数量及其重要性,直接从源头找到这些工作负载更为理想。这比SoC设计师为测试设计而虚构的负载场景要真实得多。”
对于团队来说,持续评估其流程以确定是否存在更好的解决方案非常重要。Keysight 的 Kamdar 表示:“如果回溯到 10 年前,电磁模拟在计算时间方面非常昂贵。你只能在一台计算机上运行它们,并占用所有内存。这影响了硬件决策的速度,也影响了设计师必须接受的准确性。后来出现了多线程 CPU 和超线程选项,然后出现了大规模并行计算选项。你能够立即更快地获得答案。现在,你有了更多预测性的方式来进行硬件设计。它让你意识到,以前你正在将问题缩小到你可以管理的程度。现在你可以处理更大的问题。”
团队持续评估自身流程以确定是否可能存在更好的解决方案,这一点很重要。Keysight的Kamdar表示:“若回顾十年前,电磁模拟在计算时间成本上极为高昂,因为只能在单台计算机上运行它们,而且会占用全部内存。这不仅延缓了硬件决策的速度,也限制了设计精度的提升。随后,多线程CPU、超线程技术以及大规模并行计算的出现,极大地加速了求解过程。如今,我们已能采用更具预测性的方法进行硬件设计,这让我们意识到,过去我们是在简化问题以适应处理能力,而现在,我们有能力应对更复杂的问题。”
如今,很多问题仍需简化才能便于处理。“如果你有一项工作负载,它可能涉及数十亿个周期,”Roane表示,“你不会把数十亿个周期的数据都投入到优化引擎中,然后针对这个工作负载进行优化,时间根本不够用。挑战就在于如何选择该软件中的一个有意义的子集,并利用它来推动优化。你要做的就是说,‘我要专门针对这种最糟糕的情况来设计我的电源和电网。只有利用该子集才有可能做到这一点。’”
流程优先
显然,这主要是一个方法问题。以往软硬件融合时那种一次性大规模集成的做法已不再适用。现在需要一种迭代式的方法,要求硬件与软件团队必须相互协作,以确保双方需求都能得以满足。
一切均源自规范的确立。“虚拟原型是对某些事物的呈现,”Serughetti表示,“就在几年前,多数企业都没有书面规范。启动虚拟原型的工作异常艰难。倘若仅在一切都完成后才着手编写规范,这显然是个流程上的问题。许多企业已意识到,预先制定更完善的规范势在必行。当然,这并不意味着规范能够完全正确。但虚拟原型的优势在于,它允许我们验证规范的准确性。规范中难免包含若干假设性内容,而虚拟原型的第一阶段,实质上就是对规范进行澄清,确保硬件与软件团队,以及规范编写者之间达成共识。”
这是一个非常现实的问题,也是一个需要解决的问题。解决方案涉及一种方法,以及可用解决问题的工具和技术。对于那些工具的制造商来说,与对口公司开展更紧密的合作也是很有必要的,因为目前提供的解决方案并不能完全解决这些问题。