pYYBAGK6rmiABh2rAAR1XZNcj1A941.png

在硬件准备就绪时开始嵌入式软件开发的日子已经一去不复返了。软件的规模和复杂性不断增加,因此需要更早的开始日期才能有机会按时发货。考虑到与软件开发相关的投资和风险,公司必须确保在硅流片之前进行适当的软件集成。不断缩短的上市时间窗口进一步加剧了这些挑战。

唯一的解决方案是寻找执行方法,因此在最终目标硬件可用之前测试和调试软件。甚至在硬件设计最终确定之前,开发通常就必须认真开始。改进硬件设计和验证以及加速软件启动的一种方法是将应用程序部署在虚拟或仿真硬件上。

虚拟原型

“虚拟原型”一词没有单一、精确的定义。就本文而言,该术语将用于描述可以运行嵌入式代码的任何环境,从而在实际目标系统可用之前实现有用的开发。让我们仔细看看这些可能性。

在 PC 上运行的本机代码

这显然是在 PC 上编译和运行代码的第一步。工具很容易获得、便宜,甚至是免费的,而且 PC 提供了高级别的功能。这个环境非常适合测试算法和基本逻辑。与实际目标相比,代码在 PC 上的运行速度可能会更快,因为 PC 的 CPU 可能比嵌入式处理器更强大。

除了时钟速度之外,代码时序没有用处,因为 x86 处理器上的指令组合与大多数嵌入式设备非常不同。一旦代码需要与硬件或实时操作系统 (RTOS) 交互,这个执行环境就不再有用了。

本机代码与外围/系统模型一起运行

大多数 RTOS 制造商都提供了一个主机执行环境,可以运行特殊版本的 RTOS 或在 Windows 下模拟其功能。这与提供外围设备功能模型的方法一起,可以取得进一步的进展。然而,时机仍然具有误导性。

评估板上执行

大多数半导体供应商都提供低成本评估板,以促进其 CPU 的快速部署。商业 RTOS 产品,如 Mentor Embedded 的 Nucleus RTOS 可以为此类电路板预配置,从而实现快速生产。

这种执行环境很有吸引力,因为 CPU 速度和指令组合可能非常接近最终目标,这使得时间敏感代码的测试变得可行。这种环境的准确性取决于外围设备与目标设备的相似性。

使用指令集模拟器

尽管执行真实芯片的代码看起来很有吸引力,但它的缺点是需要添加代码才能获得某些软件功能的可见性。这称为“检测”代码。另一种方法是使用指令集模拟器 (ISS),它在逐条指令的基础上模拟代码执行。ISS 可以以接近实时的速度运行,并提供精确、高度可见的代码执行。实际上,当 ISS 跟踪仿真期间消耗的时钟周期时,可以停止实时。

大多数 ISS 产品允许某种功能外围建模,这使得软件开发取得重大进展。

具有外围设备硬件描述语言模型的 ISS(协同仿真)

硬件是使用硬件描述语言 (HDL) 设计的,例如 VHDL 或 Verilog。设计人员经常使用仿真器来验证他们的 HDL 设计,并且当今的许多开发工具将 ISS 与 HDL 仿真器相结合。这使代码能够在与看似真实的硬件交互的准确 CPU 环境中执行。软件开发人员可以使用最终目标系统的 HDL 模型来开发与硬件密切交互的驱动程序和引导代码等软件组件。

协同仿真的缺点是更高的精度是以降低执行速度为代价的。

完整系统的 HDL 模型,包括 CPU

最准确的虚拟原型应该是整个系统的 HDL 模型,包括 CPU 和外围设备,这似乎是合乎逻辑的。三个原因解释了为什么情况并非如此:

这种模型上的代码执行速度将非常缓慢。完成任何有用的事情都不够快。

CPU 的 HDL 不太可能可用。

由于国际空间站很可能经过精心设计,因此使用它没有任何缺点,但确实将性能提高到了有用的水平。

具有 SystemC 外设模型的 ISS

为了允许可以适应软件执行的适当仿真速度,可以使用诸如 SystemC(C/C++ 类库)之类的更高抽象语言对系统进行建模。更高抽象级别的建模使用松散或近似的时序。这种时序适用于软件执行和性能分析。

硬件仿真

到目前为止讨论的虚拟原型技术可以绘制在代码执行速度与精度的关系图上,并且基本上会产生一条直线(参见图 1)。开发人员可以从一系列可能性中进行选择:一个极端是快速、抽象的模拟,另一个是缓慢、精确的模拟。然而,另一种技术逆势而上,偏离了直线。

图 1:除仿真外,虚拟原型环境在代码执行速度与精度的关系图中形成一条直线。

pYYBAGK6rmiABh2rAAR1XZNcj1A941.png

尽管只需使用功能强大的台式计算机就可以降低 HDL 仿真的速度限制,但这也有限制,设计人员总是想要更多。电子设计自动化 (EDA) 社区的回应是开发仿真。仿真器是一种专门的硬件,实际上提供了运行 HDL 仿真的专用环境。这通常使用 FPGA 来实现。

使用 ISS、SystemC 模型和模拟一些外围硬件的仿真器构建的集成平台打破常规,提供精确、高性能的执行环境。运行虚拟目标和仿真可以更深入地了解硬件和软件执行线程,并实现更高效的调试和系统性能分析。

超越调试

嵌入式软件开发人员传统上专注于让他们的代码正常运行。在最高抽象级别,这导致设备以符合设计规范的可预测方式响应刺激。这并没有改变,但开发人员的简介正在变得更广泛。对软件开发人员工作量的最重要补充是对功率的考虑。

低功耗设计之所以成为热门话题,有几个原因。虽然这在历史上一直是硬件问题,但今天的复杂设计为根据系统的当前状态、软件和实时环境调整功耗提供了许多机会。该状态由软件确定;因此,电源管理正在成为一个软件问题。

使用虚拟原型在硬件可用性之前开发和调试电源管理代码是一项艰巨的任务,但这正是我们所需要的。当然,原则上都是可以的;硬件模拟可以得出功耗数据,并且可以测量CPU的实际功耗。这只是一个以有意义的方式将此信息传达给软件开发人员的问题。

前进的道路

任何认为软件和硬件开发是独立活动的想法都必须摒弃。好消息是,片上系统 (SoC) 生产商现在认识到需要先于芯片进行嵌入式软件开发。坏消息是,尽管传统的 EDA 硬件工具可以通过仿真和仿真运行嵌入式软件,但它们并不关注嵌入式系统设计的关键问题,包括操作系统上下文、多核和线程处理以及缓存考虑。

需要一种集成方法来提供设计为以良好协调的方式工作并以硬件和软件团队都熟悉的方式呈现信息的工具。软件开发人员必须能够使用他们用来开发将在 FPGA 原型和具有集成技术的最终芯片上运行的应用程序所利用的相同本地工具更早地与硬件进行交互。Mentor Embedded Platform 中提供了一种这样的统一方法,它结合了 Mentor Graphics 的熟悉技术,例如使用 Vista 硬件调试和分析的虚拟原型设计以及用于软件开发的 Sourcery CodeBench 集成开发环境 (IDE)。通过使用这个集成嵌入式平台进行早期软件开发,开发人员可以使用虚拟和仿真硬件进行性能分析,

这种跨学科的早期研究改进了设计硬件并加速了 SoC 和嵌入式系统的软件调试和启动。软件开发人员和硬件工程师都同意这是朝着正确方向迈出的一步。

Loading

发表回复