43、嵌入式系统软硬件协同设计与规范语言的探索

嵌入式系统软硬件协同设计与规范语言的探索

协同验证:嵌入式系统设计的关键环节

在嵌入式系统的软硬件协同设计中,协同验证是一个核心问题。它允许在实际实现之前,同时验证硬件和软件之间的交互。需要检查的主要特性包括功能、性能、通信以及约束条件的满足情况。这种验证活动可以在不同的抽象级别上进行,使用不同的模型和精度,并且为其他所有协同设计活动奠定了基础。

协同验证有多种形式。早期的努力主要集中在通过仿真让设计师验证系统的一致性。市场上有针对硬件和软件的不同工具:软件模拟器通常使用微处理器的功能模型,既可以实现周期精确,也可以在指令级别上操作;而用于硬件设计的 EDA 环境则在寄存器传输或门级使用更精确的时间模型。这种在精度(以及相应的速度)和仿真技术方面的异质性,促使了协同仿真策略的发展,这些策略能够将不同的仿真器领域和工具整合在一起并进行协调,其中 Ptolemy 环境就是这方面的杰出代表。

然而,在很多情况下,硬件和软件模拟器的速度对于大规模运行来说是不够的,因此会使用额外的硬件来加速仿真。这种策略被称为协同仿真,它使用可编程硬件(如 FPGA)来实现系统的硬件部分,而软件则通过在线仿真在目标微处理器上运行。但这种方式得到的系统速度通常比协同仿真系统慢一个数量级,因此不能用于对时间瞬态检查的精确调试。

除了功能或性能分析,协同验证还涵盖了对系统更多“语义”方面的分析。特别是,一个活跃的研究领域旨在实现对系统属性的验证,或者正式证明不同软硬件实现的等价性,这些实现可能是通过对原始规范的重构得到的。

当前的方法和 EDA 环境

在过去几年中,许多机构开始研究协同设计的特定方面,目前研究界已经有一些原型方法和 CAD 环境可供使用。以下是一些比较成熟的方法和项目的简要分类:
|项目名称|主要关注点|
| ---- | ---- |
| Ptolemy 项目和 Coware | 协同仿真问题 |
| Polis 环境 | 形式属性的验证 |
| TOSCA 和 SpecSyn 项目 | 系统规范和设计需求的捕获,以及系统级不同替代设计的探索 |
| SpecSyn、TOSCA、Co - Saw 和 Polis | 嵌入式应用的软件开发 |
| Chinook | 硬件和软件的接口 |
| [5, 6] | 分布式嵌入式系统的性能建模和软件生成 |
| INSYDE | 系统规范和面向对象建模技术,以统一硬件和软件表示 |
| SYDIS/COBRA 和 CASTLE | 定义完整的协同设计流程,包括规范、验证、分区和综合 |
| TOSCA(在 SEED 项目中) | 建模和设计空间探索 |
| SYDIS | 设计数据集成,考虑 ASIP 和单处理器与协处理器结合的两种目标架构 |
| COSYMA 和 COSMOS/SOLAR | 分区和综合阶段 |
| GRAPE 项目 | 面向数据和周期静态应用的系统仿真问题 |

目前,CAD 供应商对协同设计领域表现出浓厚的兴趣,他们目前的主要努力集中在从底层开始整合现有的硬件和软件设计流程,即软硬件协同仿真。

语言选择:系统规范的挑战与机遇

系统规范是任何软硬件协同设计方法中的主要任务之一。目前有许多基于不同底层模型的语言被使用,但没有一种是专门为通用、实时的软硬件嵌入式系统规范和设计而开发的。

在寄存器传输(RT)级别,硬件规范从 70 年代众多不同的硬件描述语言(HDL)的不成熟时期,发展到如今使用少数标准 HDL(主要是 VHDL 和 Verilog)的成熟阶段。在系统级别,情况类似于 70 年代的 RT 级别,许多语言在不同的软硬件协同设计方法中基于不同的底层模型被使用,但都存在局限性。

例如,SDL 和 LOTOS 是用于电信系统规范的 CCITT 标准语言;Silage 专门用于硬件数字信号处理系统的规范;Esterel 基于完美同步假设,用于反应式系统的规范。虽然它们适用于各自特定的应用,但作为通用规范语言存在严重限制。

一些图形符号,如 Petri 网及其扩展、StateCharts 和 SpecCharts,基于状态转换范式被用于系统规范。它们的主要优点是作为图形规范输入,但需要转换为编程语言才能执行。

C 是系统规范中最广泛使用的语言之一,但它在复杂、实时嵌入式系统规范中存在局限性,特别是缺乏对并发的支持。为了克服这些限制,提出了一些基于 C 的规范语言,如 HardwareC 和 Cx,但它们作为学术语言,传播和支持有限。Java 虽然支持多线程并发执行,但它是为分布式系统开发的,不是为实时嵌入式系统,并且 Java 的对象导向和动态链接特性增加了编译时规范分析的复杂性。

VHDL 是硬件设计师常用的语言,但它作为系统规范语言也有严重限制。其基于事件驱动的逻辑仿真机制,在系统级别要求精确时间,而实际中系统级的精确时间在最终分区和实现之前是未知的,这导致过度规范,仿真结果可能不可靠,且仿真时间过长。此外,VHDL 对控制并发的支持有限,通信机制也很简单。

虽然有作者提议使用多种语言来规范系统,这种方法在研究角度上有吸引力,但从商业角度来看不现实,因为用户和供应商都拒绝支持不同语言及其相应的接口和翻译器。

目前,EDA 行业委员会的 SLDL 委员会正在进行国际标准化工作,旨在开发一个用于微电子系统规范和高级设计的可互操作语言环境。一个门户起重机的基准测试被用于比较不同语言在建模异构系统方面的适用性。

Ada 语言:嵌入式系统规范的新选择

在众多语言中,Ada 被提议用于复杂、实时嵌入式系统的规范,这些系统包含可以在硬件或软件中实现的功能。Ada 最初用于“传统”(软件)实时嵌入式系统的设计和实现,但现在的嵌入式系统对规范语言提出了新的要求。

这些新要求主要来自四个方面的挑战:
1. 当今微处理器和相关实时软件的日益复杂性。
2. 由于时序约束或成本原因,无法分配给微处理器的相关硬件任务的复杂性增加。
3. 实现复杂实时应用中软硬件通信机制的软硬件接口的复杂性增加。
4. 集成能力的提高,使得整个系统或部分系统可以在单个芯片上实现为片上系统(SOS)。

因此,在分析 Ada 作为软硬件嵌入式系统规范语言的特性时,需要特别关注这些新要求,特别是接口综合、不同抽象级别的软硬件协同仿真以及硬件可综合能力。

在编程构造方面,大多数情况下,复杂行为可以用顺序算法最好地描述,系统设计本质上可以看作是一种编程活动。使用编程语言进行系统规范对于那些可以自然地用编程表达的系统来说是非常合适的。例如,数字信号处理(DSP)中的快速傅里叶变换可以根据所需的吞吐量在微处理器、DSP 处理器或硬件中实现,而 Ada 应该能够自然地规范这样的计算算法,使得这些算法可以被分区并在硬件或软件中实现。

嵌入式系统软硬件协同设计与规范语言的探索

Ada 语言的优势与特性分析

Ada 语言在作为软硬件嵌入式系统规范语言方面具有显著的优势,能够满足复杂实时嵌入式系统的新要求。

首先,从编程构造来看,Ada 提供了丰富的顺序和并发编程结构。它支持任务(Task)和同步机制,这对于描述并发行为非常有用。在复杂的实时嵌入式系统中,往往存在多个并发执行的任务,例如传感器数据采集、数据处理和控制输出等。Ada 的任务机制可以自然地模拟这些并发活动,并且通过同步语句(如延迟、等待和信号量)可以精确地控制任务之间的交互和执行顺序。

其次,Ada 具有良好的类型系统。它的强类型特性可以提高代码的可靠性和可维护性。在嵌入式系统中,数据的类型和范围往往有严格的要求,Ada 的类型系统可以帮助开发者在编译时发现许多潜在的错误,减少运行时的错误和故障。例如,在处理硬件接口的数据时,可以定义精确的类型来表示不同的数据格式和范围。

再者,Ada 支持模块化设计。通过包(Package)和子程序(Subprogram)的概念,开发者可以将系统划分为多个独立的模块,每个模块负责特定的功能。这种模块化设计使得系统的开发、测试和维护更加容易。例如,可以将硬件驱动程序封装在一个包中,将算法实现封装在另一个包中,这样可以提高代码的复用性和可扩展性。

另外,Ada 在硬件可综合能力方面也有一定的优势。虽然它最初是为软件开发设计的,但通过一些技术手段,可以将 Ada 代码转换为硬件描述语言(如 VHDL 或 Verilog),从而实现硬件的综合。这使得开发者可以从同一个 Ada 规范出发,分别生成软件代码和硬件设计,实现软硬件的协同设计。

Ada 与 VHDL 的协同设计方法

为了实现复杂实时嵌入式系统的规范和设计,提出了一种基于 Ada 和 VHDL 相互关联使用的协同设计方法。Ada 用于系统的行为级描述,而 VHDL 用于寄存器传输级(RT - level)和逻辑电路级的描述。

以下是这种协同设计方法的流程图:

graph LR
    A[系统需求分析] --> B[Ada 系统规范]
    B --> C[功能模块划分]
    C --> D1[软件模块(Ada 实现)]
    C --> D2[硬件模块(VHDL 实现)]
    D1 --> E1[软件编译与调试]
    D2 --> E2[硬件综合与仿真]
    E1 --> F[软硬件集成测试]
    E2 --> F
    F --> G[系统验证与优化]

在这个流程中,首先进行系统需求分析,明确系统的功能和性能要求。然后使用 Ada 进行系统的规范,将系统的行为和算法用 Ada 代码描述出来。接着进行功能模块的划分,将系统划分为软件模块和硬件模块。软件模块使用 Ada 进行实现,经过编译和调试后生成可执行的软件代码。硬件模块使用 VHDL 进行实现,经过硬件综合和仿真后生成硬件设计。最后将软硬件进行集成测试,对系统进行验证和优化。

在协同设计过程中,Ada 和 VHDL 之间的接口设计非常重要。可以通过定义共享的数据类型和通信协议来实现两者之间的交互。例如,可以使用 Ada 的包来定义硬件接口的数据结构和通信接口,VHDL 模块可以根据这些定义来实现硬件的输入输出接口。

案例分析:门户起重机基准测试

为了说明基于 Ada 和 VHDL 的嵌入式系统设计方法,以门户起重机基准测试为例。门户起重机是一个复杂的实时系统,涉及到多个传感器、执行器和控制算法。

系统的主要功能包括:
1. 传感器数据采集:采集起重机的位置、速度、重量等信息。
2. 数据处理:对采集到的数据进行处理,计算起重机的状态和控制参数。
3. 控制输出:根据计算结果,控制起重机的运动和操作。

使用 Ada 可以自然地描述这些功能。例如,定义一个任务来负责传感器数据采集,另一个任务来进行数据处理和控制输出。以下是一个简单的 Ada 代码示例:

-- 传感器数据采集任务
task Sensor_Acquisition is
    entry Start;
end Sensor_Acquisition;

task body Sensor_Acquisition is
begin
    accept Start;
    loop
        -- 采集传感器数据
        -- ...
        delay 100.0; -- 每 100 毫秒采集一次数据
    end loop;
end Sensor_Acquisition;

-- 数据处理和控制输出任务
task Data_Processing is
    entry Start;
end Data_Processing;

task body Data_Processing is
begin
    accept Start;
    loop
        -- 处理传感器数据
        -- ...
        -- 输出控制信号
        -- ...
        delay 200.0; -- 每 200 毫秒处理一次数据
    end loop;
end Data_Processing;

对于硬件部分,使用 VHDL 来实现传感器接口和执行器驱动。例如,设计一个 VHDL 模块来读取传感器的数字信号,并将控制信号输出到执行器。

通过这种方式,将 Ada 和 VHDL 结合起来,可以实现门户起重机系统的完整设计。在实际开发中,可以使用仿真工具对软硬件进行单独测试和集成测试,确保系统的功能和性能符合要求。

结论与展望

软硬件协同设计是解决嵌入式系统设计复杂性的重要方法。在系统规范方面,目前还没有一种完美的通用语言,但 Ada 作为一种有潜力的语言,在复杂、实时嵌入式系统规范中具有独特的优势。

通过将 Ada 与 VHDL 结合使用,可以实现从系统规范到最终实现的完整设计流程。这种协同设计方法可以提高系统的开发效率和可靠性,减少设计周期和成本。

然而,目前 Ada 在嵌入式系统设计中的应用还面临一些挑战。例如,开发工具的支持还不够完善,硬件可综合技术还需要进一步发展。未来,随着技术的不断进步,相信 Ada 在嵌入式系统设计中的应用将会越来越广泛,为实现更高效、更可靠的嵌入式系统提供有力的支持。同时,国际标准化工作的推进也有望为软硬件协同设计提供更加统一和规范的语言环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值