基于OSATE环境的AADL项目——简单的项目构建与分析示例

news2024/11/24 18:38:23

一、背景

本文描述了一个非常简单的AADL项目的构建,以及一个示例项目的分析过程。本文主要记录了OSATE工具环境的一些基本操作,适用于刚刚了解OSATE之后,对于整个工具环境无从下手的小白。

因为基于OSATE环境的AADL项目的构建和分析的详细示例较少,而我又有这方面的需要。正当我手足无措之时,无意中发现OSATE的用户帮助文档中有关于构建并分析项目的详细过程,因此就写了这篇文章做简要记录。这篇文章的内容主要基于帮助文档,文档中很多细节都被我略过,如果有需要的话自行阅读OSATE的帮助文档以获取详细信息(帮助文档的相关信息本文第三章有详细描述)。

二、简介

1. AADL简介

AADL即体系结构分析和设计语言(Architecture Analysis and Design Language,AADL)。因传统的制造后测试型系统设计方法,在构建当今的嵌入式、软件依赖性系统十分费时费力且成本高。所以,便有了AADL这一模型基软件系统工程框架。AADL 可以通过建模,对诸如性能、可信性、系统安全和数据完整性一类的关键性实时因素,进行简练而严格的分析,并能够在用户工程环境下集成额外建立的客户分析/规范技术,开发完全统一的体系结构模型,从而使得用户能够更容易地构建满足要求的可靠系统。

2. OSATE简介

OSATE (Open Source AADL Tool Environment),即开源 AADL 工具环境,它主要包括三大功能:建模功能、代码生成功能、分析功能。此开源的AADL工具环境官方文档如下。

Welcome to OSATE — OSATE 2.13.0 documentation

本次的AADL项目示例就是以OSATE为基本的开发环境进行的。OSATE本身基于 Eclipse框架 构建,其下载与安装可以参考上述链接的 install 部分。

三、帮助文档

1. 帮助文档的位置

本文的操作流程主要基于OSATE帮助文档。帮助文档可以在Help -> help Contents中找到。

打开帮助文档如下:

2. 帮助文档的主要内容

帮助文档主要包括以下八大模块的内容:

内容内容翻译简介
Workbench User Guide工作台用户指南Eclipse 平台概述。
ALISA User GuideALISA 用户指南架构主导的增量系统保障(Architecture-led Incremental System Assurance ,ALISA)用户指南。这是一个增量生命周期保障工作台,适用于高保障软件依赖系统。它利用模型中的架构抽象来管理跨系统架构多层的需求,并根据这些需求验证系统实现。该工作台补充了以架构为中心的虚拟系统集成工作台的功能,用于开发此类系统。
EGit DocumentationEGit 文档Git 版本控制参考。
Error Model Annex Documentation错误模型附件文档对安全关键系统进行功能危害评估(FHA)、故障影响分析(类似 FMEA)和故障树分析(FTA)模型 V2(EMV2),以及 OSATE 的分析功能参考。
OSATE API ReferenceOSATE API 参考OSATE 应用程序接口参考。
OSATE Core DocumentationOSATE 核心文档介绍了OSATE 的基本功能,以及如何使用 AADL 模型。
OSATE Graphical Editor DocumentationOSATE 图形编辑器文档图形编辑器的基本功能简介,以及图形编辑器的使用简介。
Scripting User Guide脚本用户指南

EASE 提供脚本支持。允许使用各种语言的脚本与 IDE 交互。
目前支持的脚本引擎:

JavaScript (Rhino)

JavaScript (Nashorn)

Jython

Python via Py4J

Ruby

Groovy

四、AADL项目的构建

1. 创建AADL项目

点击 “File -> New -> AADL Project”

输入项目名,确定项目的存储位置

可以看到,在AADL 导航器视图中已经成功创建该项目。

 注:

Plugin_Contributions 包含了OSATE 中默认可用的所有 AADL 属性集。其子文件夹 Predeclared_Property_Sets 是由 AADL 标准文档指定并由核心 OSATE 环境提供的。其余的为在其他文档中指定并通过 OSATE 插件提供的。

并且,通过在包规范中提供适当的 with 子句,工作区中的任何项目都可以使用 Plugin_Contribution 中的属性集。(不需要将这些内容复制到项目中就能够使用)。

2. 创建AADL包

选择刚刚创建的项目后,点击“File -> New -> AADL Package”。

为包命名。

点击完成,即可看到:

 编辑并保存,示例代码如下所示。

package my_aadl_model
public
	process MyProcess
	end MyProcess;
	
	system MySystem
	end MySystem;
	
	system implementation MySystem.i
		subcomponents
			sub1: process MyProcess; 
	end MySystem.i;
	
end my_aadl_model;

3.实例化模型

大多数分析都是在系统的实例模型(instance models)上执行的。实例模型代表了系统的完整嵌套架构。通常,实例模型将从系统实现分类器创建。但 OSATE 允许从除子程序(subprogram)和子程序组(subprogram group)之外的 所有实现分类器 创建实例模型。

可以通过 以下 3种 方式创建实例模型:

3.1 在 AADL 编辑器大纲视图(Outline)的右键菜单。

在outline视图中选择一个或多个组件分类器,右键选择实例化(Instantiate)。只要没有任何分类器是子程序,该命令就会在上下文菜单中处于活动状态。

 3.2 从 AADL 导航器视图的右键菜单。

在视图中选择一个或多个组件分类器,右键菜单中选择实例化(Instantiate)。分类器可以来自不同的项目,只要没有任何分类器是子程序,该命令就会在上下文菜单中处于活动状态。

3.3  从 OSATE -> Instantiate 实例化。

首先在大纲视图或 AADL 导航器视图中选中一个或多个组件分类器(分类器可以来自不同的项目,但不能是子程序),然后选择 OSATE -> Instantiate 。

3.4 创建示例系统的实例模型

可以使用3.1-3.4所示的任何一种方法进行实例化,这里我们使用第一种方式来完成刚刚编写的示例系统的实力模型创建。

在右侧的 Outline视图中选择  System MySystem.i 然后点击右键菜单中的 Instantiate。

点击 ok。

一般来说,实例模型被创建并放置在名为instances的目录中,该目录与包含根组件分类器的.aadl文件位于同一目录中。如果该目录尚不存在,则创建该目录。仅当状态为“正常”时才会创建该文件。刚刚生成的模型 my_aadl_model_MySystem_i_Instance.aaxl2 如下图所示:

五、模型分析演示——以latency-case-study为例

在获得系统模型后,可以使用 OSATE 模型对模型进行分析,以确认设计是否满足预期标准。这里以系统的端到端流延迟分析作为演示(延迟分析插件随 OSATE 预装)。本节采用一个示例项目作为模型分析的操作演示。

1. 背景知识

延迟分析由OSATE延迟分析插件提供。延迟分析是在包括端到端流的AADL模型上执行的,它会计算最小和最大延迟,并会考虑到各种延迟影响因素。它基于分配给不同架构元素的延迟预算以及架构设计发展过程中的设计信息来实现这一点。AADL模型的范围可以从具有不同分解级别的延迟预算的功能架构,到具有映射到支持分区的硬件平台的执行速率的任务和通信架构。分析的保真度由AADL模型中的详细细节决定。 

延迟分析的结果以csv、xls等表格格式呈现。延迟分析可以通过一些首选项设置进行参数化,这些首选项设置允许用户探索架构变化,而无需更改模型中的细节,例如系统是否表现为异步系统或同步系统。

2. 获取项目源代码

该项目是GitHub上的一个示例项目,以下为项目的链接。GitHub - osate/examples: Examples and case-study that use OSATE

本次使用的是示例中的 “latency-case-study”项目。可以直接从GitHub或以下链接下载。

https://download.csdn.net/download/qq_44667259/88366885 (免费下载)

3. 打开项目

为了便于项目的管理,这里可以将latency-case-study项目复制到自己设置的工作目录中。

点击File -> Open Projects from File System,

设置项目文件的路径,点击 Finish 完成。

可以看到,项目已被打开。

4.实例化模型

在 integration.aadl 中找到 System Implementation integration.software_integrated 。单击右键并选择实例化,如下图所示。

点击 OK 。

可以看到,实例模型已经被生成,该文件被放置到 instances 目录下。

5.分析模型

左键单击选中 integration_integration_software_integrated_Instance.aaxl2 ,然后点击 Analyses -> Timing -> Check Flow Latency 。

调用上述延迟分析时,会显示一个配置对话框,如下图所示。这用于选择影响延迟计算方式的设置,允许用户在不改变模型的情况下沿着不同的维度进行研究

 配置对话框各个选项的含义如下:

- System type:

        异步系统(AS):组件时间不同步,即调度可能存在时移。

        同步系统(SS):组件时间同步,即跨系统的定期调度是一致的。

- Partition output policy:

        用于反映因分区系统中不同的内部通信策略而造成的分区间通信延迟贡献。

        分区结束(PE):假设在任务发送数据的分区末尾有可用的分区间连接。如果分区 A 中的任务向分区 B 中的任务发送数据,则如果分区 B 在分区 A 之后执行,后者将在同一主帧中接收数据。

        主帧延迟 (MF):假设分区间连接在主帧末尾刷新/实现。如果分区 A 中的任务向分区 B 中的任务发送数据,则无论分区 A 或分区 B 的执行顺序如何,只有在所有剩余分区完成后,新数据才会可用。

- For worst-case processing time use:

        用户可以在 截止时间 和 最坏情况计算执行时间 之间选择作为最坏情况处理时间。对于最佳情况,我们始终使用计算执行时间。此设置仅在没有可用响应时间时才相关。

        截止日期 (DL):截止日期表示假设任务是可安排的最坏情况下的完成时间。

        最大计算执行时间 (ET):在不考虑资源调度的情况下考虑处理时间时,最大计算执行时间非常有用。

- For best-case queuing latency on incoming ports:

        影响如何确定最佳情况排队延迟。对于最坏的情况,我们总是使用完整队列。

        假设队列为空 (EQ):没有延迟,因为假设队列为空。
        假设队列已满 (FQ):使用最小计算执行时间乘以队列大小来确定最佳情况排队时间。

- Disable queuing latency in the results:

        确定是否报告异步总线的最坏情况排队延迟。

        禁用:最坏情况下的排队延迟始终报告为0。

        启用:报告最坏情况的排队延迟。 

此处可以自定义或按照默认选项进行。

延迟分析完成后,报告结果(采用三种不同的格式)将被放在 instances 文件夹的 reports 子文件夹下,同时,我们也可以看到输出的错误信息(端到端流 etef0 和 etef1 未能满足预期的延迟约束)。

6. 延迟分析结果报告

对于 .csv 和 .xls等文件,可能无法直接在eclipse中打开,可以自行添加打开方式。在Window中选择 Preferences。

在General -> Editors -> File Associations 下,点击 Add。

输入 *.csv (先以csv文件演示) 

选中刚刚添加的 *.csv ,然后点击关联编辑器的 Add

 选择外部程序,浏览并选择指定的程序并点击OK。

将 *.xls 也按照上述方法添加,然后点击应用并关闭(此处我选择了WPS作为默认的关联编辑器)。

打开以下任意一个生成的报告即可。

文件打开后如下所示,可以看到etef0和etef1的端到端流延迟分析详情:

如有不当或错误之处,恳请您的指正,谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VRRP DHCP ACL NAT 网络核心路由技术综述 (第十课)

VRRP DHCP ACL NAT 网络核心技术综述 (第十课) 六大路由基础技术 简单的利用思维导图回顾 1 浮动路由 2 VRRP 技术==>目的是备份网关

2023-09-20 LeetCode每日一题(拿硬币)

2023-09-20每日一题 一、题目编号 LCP 06. 拿硬币二、题目链接 点击跳转到题目位置 三、题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。 示…

Lnmp架构之mysql数据库实战2

4、mysql组复制集群 一主多从的请求通常是读的请求高于写 ,但是如果写的请求很高,要求每个节点都可以进行读写,这时分布式必须通过(多组模式)集群的方式进行横向扩容。 组复制对节点的数据一致性要求非常高&#xff…

Python多重继承

前面介绍的大部分的继承都是单继承,既一个子类只有一个父类,但是Python也支持多重继承,即一个子类可以有多个父类。多继承有复杂的父类冲突问题,大部分的面向对象语言都仅仅支持单继承,Python是为数不多支持多继承的语…

Python 判断回文数

"""判断输入的数是否为回文数介绍:回文数:数字从高位到低位正序排列和低位到高位逆序排列都是同一数值例如:数字 1221 无论正序还是逆序都是 1221知识点:1、获取字符串长度函数len()2、条件语句if/elif/else3、循环…

MySQL 高级(进阶) SQL 语句(二) -----存储过程

目录 1 存储过程 1.1 创建存储过程​ 1.2 调用存储过程 1.3 查看存储过程 1.4 存储过程的参数 1.5 修改存储过程 1.6 删除存储过程 2 条件语句 3 循环语句 1 存储过程 存储过程是一组为了完成特定功能的SQL语句集合。 存储过程在使用过程中是将常用或者复杂的工作预…

常用的软件项目管理工具有哪些?

在软件项目管理中,项目计划是工作中非常重要的一环,因此在选择软件项目管理工具时,除了任务管理、进度跟踪外,还需要关注软件的项目计划能力。 软件项目管理的工具有哪些?有什么好用的软件项目管理工具吗?…

windows 深度学习环境部署

1. 根据显卡配置安装适合的CUDA,查看显卡配置可在显卡控制面板上查看,安装是否成功可通过nvidia-smi查看;注意安装路径 https://developer.nvidia.com/cuda-toolkit-archive 2. 根据cuda安装合适的cudnn,需要注册NVIDIA cuDNN Archive | NVIDIA Devel…

记录一次关于嵌套事务传播机制的bug

1、具体问题 这段代码是A嵌套B,B嵌套C,遇到的bug是C代码发生异常进行事务标记(因为使用的传播行为是默认的REQUIRED所以要等A事务进行rollback,C加入了A事务只能暂时进行标记),但是由于B代码进行了异常捕获返回给了A信息并没有抛…

[C]精炼分析状态机FSM

FSM:finite state machine 【有限状态机】,用通俗的语言来表达就是逻辑流程图。 当前状态满足触发条件时,就会切换到下一个状态,并执行对应的任务操作。传统代码做法是用if-else 或者 switch-case来处理。若要做到可扩展性良好的…

【车联网/自动驾驶仿真学习】VEINS_CARLA安装指南

VEINS_CARLA安装指南 这是Veins团队开发的一个接口,能够实现veins和carla之间的数据传输,通过veins通信模块能够实现carla中感知决策等相关数据的传输。 github:veins_carlapaper:Poster: A Case for Heterogenous Co-Simulation of Cooperative and A…

MySQL 高级(进阶) SQL 语句(二) -----连接查询、union联集、case、正则表达式

目录 1 连接查询 1.1 内连接 1.2 左连接 1.3 右连接 2 UNION ----联集 2.1 交集值 2.2 无交集值 3 case 4 正则表达式 1 连接查询 准备工作: create database k1; use k1; create table location (Region char(20),Store_Name char(20)); insert into loca…

最新时间注入攻击和代码分析技术

点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 时间注入攻击 时间注入攻击的测试地址在本书第2章。 访问该网址时,页面返回yes;在网址的后面加上一个单引号&#xff0c…

《从菜鸟到大师之路 Nginx 篇》

《从菜鸟到大师之路 Nginx 篇》 Nginx 简介 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行…

java面试题-学成在线项目

1、详细说说你的项目吧 从以下几个方面进行项目介绍: 1、项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说…

R统计绘图-线性混合效应模型详解(理论、模型构建、检验、选择、方差分解及结果可视化)

目录 一、 基础理论 二、数据准备 三、构建线性混合效应模型(LMMs) 3.1 lme4线性混合效应模型formula 3.2 随机截距模型构建及检验 3.3 随机截距模型分析结果解释及可视化 3.4 随机斜率模型构建、检验及可视化 四、线性混合效应模型选择 4.1 多模型比较 4.2 模型最优子…

003-第一代硬件系统环境搭建

第一代硬件系统环境搭建 文章目录 第一代硬件系统环境搭建项目介绍摘要结构部分电路部分软件部分 关键字: Qt、 Qml、 硬件、 系统、 搭建 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language&#…

Java编程的精髓:深入理解JVM和性能优化

文章目录 Java虚拟机(JVM)的核心概念1. 类加载器(Class Loader)2. 内存区域3. 垃圾回收(Garbage Collection)4. 类型转换和多态 JVM性能调优1. JVM参数调整2. 内存管理3. 多线程优化4. 使用性能分析工具5. …

服务注册发现_创建服务消费者

创建cloud-consumer-order80模块 pom文件添加依赖 <dependencies><!-- 引入Eureka client依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId&…

CompletableFuture-FutureTask结合线程池提升性能

使用线程池&#xff1a; 返回计算结果&#xff1a; 2.2.3 Future编码实战和优缺点分析 优点&#xff1a;Future线程池异步多线程任务配合&#xff0c;能显著提高程序的运行效率。 缺点&#xff1a; get()阻塞---一旦调用get()方法求结果&#xff0c;一旦调用不见不散&…