系统级设计流程中的嵌入式软件开发
1 引言
在当今复杂的片上系统(SoC)中,嵌入式软件扮演着重要角色,它能灵活实现大量功能。然而,手动编写软件因代码量大且早期硬件通常不可用,并非理想选择。因此,尽早开展软件开发至关重要。为加速设计过程并提高生产力,系统级设计需兼顾软件问题,实现软硬件无缝协同设计。
1.1 问题陈述
为缩短产品上市时间,设计师采用系统级设计,通过提升抽象层次降低复杂度。若能将软件开发妥善融入系统级设计流程,可大幅减少软件开发的时间和成本。本文聚焦于系统级设计流程中的软件方面,着重关注三个关键要素:
- 不同抽象层次的处理器模型。
- 实时操作系统(RTOS)支持。
- 针对选定 RTOS 的软件生成。
1.2 相关工作
系统级建模已成为改进 SoC 设计流程的重要手段,为此开发了系统级设计语言(SLDLs),如 SystemC 和 SpecC。众多研究致力于系统级设计和软件合成框架。部分现有方法主要关注系统性能分析和基于指令集模拟器(ISS)的协同仿真,而本文方法更侧重于软件生成,涵盖抽象处理器建模和软件生成。
1.3 大纲
后续内容安排如下:
- 介绍 ARM7TDMI 处理器从抽象到基于 ISS 模型的建模。
- 阐述所选处理器的 RTOS 支持情况。
- 概述软件生成和目标适配过程。
- 通过实际案例展示集成设计流程。
2 软件支持
系统级设计中的软件开发支持主要涉及三个要素:处理器建模、RTOS 支持和嵌入式软件生成。
2.1 处理器建模
处理器建模旨在以不同抽象层次描述现有处理器的特性和行为。本文以 ARM7TDMI 处理器为例,它是一款广泛使用的 32 位嵌入式 RISC 微处理器,采用三级流水线,具备单 32 位总线接口,支持两种电平敏感中断。通过 AMBA 设计套件,它可连接到高级高性能总线(AHB)。
我们从最抽象的行为模型开始,逐步过渡到总线功能模型,最终构建基于 ISS 的周期精确模型。
2.1.1 行为模型
行为模型是处理器的最抽象表示,仅捕捉基本特性,用于设计早期的性能分析。这些基本特性包括时钟频率、计算能力(MIPS)、功耗、指令宽度、数据宽度以及数据和程序内存大小,部分属性可根据具体设计需求指定范围。
行为模型的主要部分是权重表,用于解释通用性能分析结果,比较不同设计方案。ARM7TDMI 行为模型包含两个权重表,分别用于执行速度和代码大小估计。计算权重表将 C 级操作与执行所需的时钟周期相关联,通过该表和基本块的性能分析信息,可估算系统性能。
2.1.2 总线功能模型
总线功能模型(BFM)是引脚精确且周期近似的模型,描述处理器的通信接口和行为。ARM7TDMI 的 BFM 由行为层次结构组成,外壳包含处理器核心、可编程中断控制器(PIC)和定时器三个并行执行的行为。核心由硬件抽象层(HAL)和中断请求(IRQ)两个并行执行的行为组成,HAL 初始为空,后续将插入用户计算行为,IRQ 负责中断检测和处理。
核心通过 AMBA AHB 主接口与外部组件通信,PIC 将 32 个外部中断映射到核心中断,定时器默认禁用,为 RTOS 提供定时服务。总线接口通过分层内联通道实现,Protocol Wrap 通道在总线传输期间禁用中断,以确保协议时序准确。
2.1.3 周期精确处理器模型
基于 ISS 集成的周期精确(CA)处理器模型,也称为指令集模型,可提供软件的精确仿真,允许执行最终目标二进制文件,以验证软件合成输出。我们将 ISS SoftWareARM(SWARM)集成到模型中,它能提供 ARM 数据路径的周期精确仿真,包含缓存模型和 12MB 内部内存,还具备 PIC、定时器、LCD 和 UART 控制器等外设。
CA 模型中的 Core ISS 行为取代了 BFM 中的 Core 行为,ARM7TDMI ISS 包装 SWARM ISS 并逐周期调用。该包装行为通过总线访问和中断与其他设计部分交互,检测 SWARM 外部内存访问并使用 AMBA AHB 主接口执行,监控中断输入并触发 ISS 内部中断,根据 ARM7 时钟定义推进系统仿真时间。我们禁用了 SWARM 内部的 PIC、定时器和 UART,复用 BFM 中的相应组件,通过 AHB 进行通信。启动时,SWARM 将目标二进制文件加载到内部内存(地址零)并开始执行。
2.2 实时操作系统
在细化过程中,设计师可能将多个行为分配给一个处理器,由于处理器本质上是顺序执行的,因此需要对行为进行静态或动态调度。目标处理器上需要 RTOS 进行动态调度。
我们选择了 µC/OS-II,它是一个实时内核,提供基于优先级的抢占式调度,支持多达 56 个任务,提供确定的任务间通信、同步和定时服务。µC/OS-II 主要用 ANSI C 实现,高度可配置,最小占用空间可达 2K 字节。
为使 RTOS 在 SWARM ISS 上运行,需要进行移植。我们基于现有的 ARM 端口进行处理器适配,并针对 gcc 交叉编译器调整堆栈布局、数据大小和汇编代码,同时适配上下文切换、中断处理和定时功能。
中断处理采用两阶段方法:第一阶段处理程序 OS CPU IRQ ISR() 用汇编实现,负责保存当前任务上下文、调用第二阶段处理程序、执行 OS 调度器并恢复新任务上下文;第二阶段处理程序用 C 实现,与 PIC 通信以确定和清除中断,并调用用户中断服务程序。
RTOS 依赖定时器中断提供定时服务,我们的硬件抽象层(HAL)包含定时器驱动程序,配置定时器周期为 10ms,在定时粒度和执行开销之间进行权衡。
2.3 嵌入式软件生成
嵌入式软件生成基于设计模型创建最终软件实现,该过程融入系统细化流程。整体流程从用 SLDL SpecC 捕获的抽象规范模型开始,设计师通过逐步细化添加设计决策,探索不同方案,包括处理元素(PE)的分配、计算映射、调度参数选择和通信参数定义。
细化输出之一是整个系统的 BFM,在该模型中,计算被映射到处理元素,处理器内的计算被分组为任务,通信被细化为总线原语,外部同步根据设计师的选择实现。
嵌入式软件生成以 BFM 为输入,分为 C 代码合成和 RTOS 目标适配两个部分。
2.3.1 C 代码合成
C 代码合成基于特定方法将 SLDL 语句转换为 C 代码,通过函数、结构和指针解决行为层次结构、局部变量和端口映射问题。
2.3.2 RTOS 目标适配
RTOS 目标适配调整 C 代码,使其能在目标处理器上由 RTOS 调度执行。我们使用 RTOS 抽象层(RAL)作为薄适配器,它抽象了实际 RTOS 实现,提供规范接口。
RTOS 目标适配将 SLDL 中的并行执行语句替换为对 RAL 的调用,调整处理器内通信以使用 RAL 服务,实现外部通信和同步。对于基于中断的同步,它提取中断处理程序并创建用户中断处理程序,生成初始化 RTOS 和注册用户中断处理程序的启动代码。
我们扩展了细化环境的数据库,按依赖关系分离软件子系统,以便灵活组合最终二进制文件,减少代码重复。最后,使用 gcc 交叉编译生成的代码,并与目标和 RTOS 特定库链接,生成可在目标处理器上执行的最终目标二进制文件。
3 实验结果
为验证设计流程的可行性,我们将其应用于汽车领域的防抱死制动系统。该系统使用一个包含 ARM7TDMI 处理器的电子控制单元(ECU)和连接到控制器局域网(CAN)的传感器,通过 CAN 总线连接多个传感器和执行器,测量刹车踏板位置、车轮速度并控制刹车压力阀。
我们用 SpecC 捕获应用程序的规范模型,通过自动细化生成 BFM,插入设计决策以实现所需的目标架构。然后使用扩展的软件生成方法合成目标 C 代码,创建可在 ARM7TDMI 处理器上执行的二进制文件。利用基于 ISS 的模型进行系统协同仿真,验证系统功能并详细分析性能。
通过模拟紧急停车操作,验证了所有模型的正确功能执行。结果显示,随着请求刹车压力增加,左车轮在特定场景下失去牵引力,防抱死算法会限制刹车功率,直到获得足够牵引力后再增加压力。
我们自动化了细化过程并编写决策输入脚本,使我们能在规范级别开发代码,自动生成其他模型,避免处理底层实现细节,专注于高级算法设计,提高了生产力。同时,自动化细化过程可在几分钟内生成所有模型,便于进行设计空间探索和快速实现迭代。
不同模型的代码行数和仿真时间如下表所示:
| 模型 | 代码行数 | 仿真时间 |
| ---- | ---- | ---- |
| Spec | 238 | 0.018sec |
| TLM | 22035 | 0.153sec |
| BFM | 22048 | 125min |
| BFM(ISS)/C | 22390/1416 | 208min |
从表中可以看出,抽象模型的执行时间可忽略不计,但从 BFM 开始,执行时间显著增加,基于 ISS 的模型比 BFM 慢 66%。分析代码行数发现,添加抽象模型会显著增加代码规模,体现了自动模型生成的价值,最终用户代码行数远多于初始规范模型,生成过程中添加了大量通信、任务控制和样板代码。
4 结论
本文介绍了系统级设计流程中的软件视角,通过 ARM7TDMI 处理器的案例研究,阐述了软件支持所需的三个主要任务:不同抽象层次的处理器建模、µC/OS-II 到 ARM7 处理器的适配以及嵌入式软件合成和 RTOS 目标适配。
通过防抱死制动系统的实例,验证了设计流程的可行性,所有生成的模型(包括基于 ISS 的模型)均能正确仿真,证明了自动生成最终软件实现的能力。自动化细化流程使软件开发人员能在更高层次描述应用程序,隐藏通信细节、处理器特性和 RTOS API,同时在几分钟内生成详细实现,提高了开发效率。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([抽象规范模型]):::startend --> B(逐步细化):::process
B --> C(分配处理元素):::process
B --> D(映射计算):::process
B --> E(选择调度参数):::process
B --> F(定义通信参数):::process
C --> G(BFM):::process
D --> G
E --> G
F --> G
G --> H(C 代码合成):::process
G --> I(RTOS 目标适配):::process
H --> J(生成 C 代码):::process
I --> J
J --> K(交叉编译和链接):::process
K --> L([最终目标二进制文件]):::startend
以上流程图展示了从抽象规范模型到最终目标二进制文件的生成过程,包括逐步细化、C 代码合成、RTOS 目标适配以及交叉编译和链接等步骤。
5 关键技术点分析
5.1 处理器建模技术
处理器建模是系统级设计中理解和模拟处理器行为的关键。不同抽象层次的模型各有其特点和用途:
- 行为模型 :作为最抽象的表示,它聚焦于处理器的基本特性,如时钟频率、计算能力、功耗等。通过权重表,能快速对系统性能和代码大小进行初步估算,为早期设计提供性能比较依据。例如,在设计初期,可根据行为模型快速判断不同设计方案是否满足性能要求。
- 总线功能模型 :引脚精确且周期近似,详细描述了处理器的通信接口和行为。它的分层结构和并行执行的行为模块,使得处理器与外部组件的交互得以准确模拟。如 ARM7TDMI 的 BFM 中,核心与 PIC、定时器等组件通过 AMBA AHB 主接口通信,同时 IRQ 行为负责中断处理,确保系统在通信和中断方面的正常运行。
- 周期精确处理器模型 :基于 ISS 集成,能提供软件的精确仿真。以 SWARM 为例,它不仅能精确模拟 ARM 数据路径,还包含多种外设。通过包装行为与其他设计部分交互,实现对外部内存访问和中断的处理,保证了软件在目标处理器上的准确执行。
5.2 RTOS 移植与适配技术
RTOS 的移植和适配是确保软件在目标处理器上高效运行的重要环节。
- 移植基础 :选择合适的 RTOS 并基于已有的端口进行适配是常见做法。如 µC/OS-II 基于现有的 ARM 端口,针对 gcc 交叉编译器调整堆栈布局、数据大小和汇编代码,确保 RTOS 能在目标处理器上正常启动和运行。
- 中断处理 :采用两阶段中断处理方法,第一阶段用汇编实现,保证高效的上下文切换和调度;第二阶段用 C 实现,便于与 PIC 通信和调用用户中断服务程序。这种分层处理方式既保证了中断处理的效率,又便于代码的维护和扩展。
- 定时服务 :RTOS 依赖定时器中断提供定时服务,通过硬件抽象层(HAL)中的定时器驱动程序进行配置。如将定时器周期设置为 10ms,在定时粒度和执行开销之间进行权衡,以满足不同应用场景的需求。
5.3 嵌入式软件生成技术
嵌入式软件生成是将设计模型转化为最终可执行软件的过程,涉及 C 代码合成和 RTOS 目标适配两个关键步骤。
- C 代码合成 :将 SLDL 语句转换为 C 代码,通过函数、结构和指针解决行为层次结构、局部变量和端口映射问题。这使得设计模型能够以 C 语言的形式实现,便于后续的编译和执行。
- RTOS 目标适配 :使用 RTOS 抽象层(RAL)作为适配器,将 SLDL 中的并行执行语句替换为对 RAL 的调用,调整处理器内通信以使用 RAL 服务。同时,实现外部通信和同步,提取中断处理程序并生成启动代码。通过扩展细化环境的数据库,按依赖关系分离软件子系统,减少代码重复,提高软件生成的效率和可维护性。
6 应用场景与优势
6.1 汽车领域应用
在汽车领域,如防抱死制动系统,我们的设计流程具有显著优势。系统使用包含 ARM7TDMI 处理器的 ECU 和 CAN 总线连接的传感器和执行器,通过自动细化生成 BFM 和最终的软件实现。在模拟紧急停车操作时,能准确控制刹车压力,避免车轮抱死,提高行车安全性。同时,自动化的设计流程使开发人员能专注于算法设计,提高开发效率,快速响应市场需求。
6.2 通用嵌入式系统开发
对于通用嵌入式系统开发,该设计流程同样适用。不同抽象层次的处理器模型能在设计早期进行性能分析和方案比较,减少设计错误和重复工作。RTOS 的移植和适配技术确保软件在不同处理器上的高效运行,嵌入式软件生成技术实现从设计模型到最终软件的快速转换。通过自动化细化流程,开发人员可以在更高层次描述应用程序,隐藏底层细节,提高开发效率和软件质量。
7 总结与展望
7.1 总结
通过本文的研究和实践,我们展示了系统级设计流程中嵌入式软件开发的完整解决方案。从处理器建模、RTOS 支持到嵌入式软件生成,每个环节都紧密配合,实现了软硬件的无缝协同设计。通过 ARM7TDMI 处理器的案例研究和防抱死制动系统的实验验证,证明了该设计流程的可行性和有效性。自动化的细化流程使开发人员能在更高层次进行开发,提高了生产力和软件质量。
7.2 展望
未来,随着嵌入式系统的不断发展,对系统级设计流程的要求也将越来越高。我们可以进一步优化处理器建模技术,提高模型的准确性和仿真速度;加强 RTOS 的功能和可移植性,支持更多的处理器和应用场景;完善嵌入式软件生成技术,实现更智能的代码合成和目标适配。同时,结合人工智能和机器学习技术,实现设计流程的自动化和智能化,进一步提高开发效率和系统性能。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([系统需求]):::startend --> B(选择处理器型号):::process
B --> C(确定 RTOS):::process
C --> D(处理器建模):::process
D --> E(行为模型):::process
D --> F(总线功能模型):::process
D --> G(周期精确模型):::process
E --> H(性能估算):::process
F --> I(通信模拟):::process
G --> J(精确仿真):::process
C --> K(RTOS 移植适配):::process
K --> L(调整代码):::process
K --> M(适配中断处理):::process
K --> N(配置定时器):::process
H --> O(嵌入式软件生成):::process
I --> O
J --> O
L --> O
M --> O
N --> O
O --> P([最终软件实现]):::startend
以上流程图展示了从系统需求到最终软件实现的整体开发过程,包括处理器选择、建模、RTOS 移植适配以及嵌入式软件生成等关键步骤。
通过本文的介绍,我们希望能为嵌入式软件开发人员提供一个全面的系统级设计流程参考,帮助他们在实际项目中更好地应用这些技术,提高开发效率和软件质量。
以下是不同模型的关键特性对比表格:
| 模型类型 | 抽象层次 | 主要用途 | 关键特性 |
| ---- | ---- | ---- | ---- |
| 行为模型 | 高 | 早期性能估算 | 基本特性描述、权重表 |
| 总线功能模型 | 中 | 通信和中断模拟 | 引脚精确、周期近似、分层结构 |
| 周期精确模型 | 低 | 精确软件仿真 | ISS 集成、外设模拟 |
这个表格清晰地展示了不同处理器模型的特点和用途,有助于开发人员根据实际需求选择合适的模型。
超级会员免费看

1682

被折叠的 条评论
为什么被折叠?



