建模和模拟在工程

PDF
建模和模拟在工程/2014年/文章

研究文章|开放获取

体积 2014年 |文章的ID 105051年 | https://doi.org/10.1155/2014/105051

巴勃罗·安东尼奥·达席尔瓦Parra,奥斯卡·r·波罗,塞巴斯蒂安·桑切斯, SystemC / TLM2接口的运行时仪表软件Cosimulation容错需求验证”,建模和模拟在工程, 卷。2014年, 文章的ID105051年, 15 页面, 2014年 https://doi.org/10.1155/2014/105051

SystemC / TLM2接口的运行时仪表软件Cosimulation容错需求验证

学术编辑器:Luis Carlos Rabelo
收到了 2014年6月23日
接受 07年9月2014年
发表 2014年9月23日

文摘

介绍了SystemC事务级别的设计造型包装库,可用于系统属性的断言,协议遵从性或故障注入。图书馆使用c++虚表钩子作为一个动态二进制插装技术内联包装在TLM2事务路径中。这种技术可以应用在精化阶段和需要源代码的修改和重新编译的顶级SystemC模块。该技术已成功应用于车载启动软件的鲁棒性验证太阳能飞机的仪表控制单元的高能粒子探测器。

1。介绍

嵌入式软件中扮演一个重要的角色在当今复杂的芯片系统(soc),因为它允许灵活地实现复杂的功能。然而在新发展,硬件能够执行软件不常可用,直到后期的开发周期。加速设计过程和提高生产力,系统级设计必须适应软件问题使无缝合作设计的软件和硬件。因此,它是非常可取的解决软件开发尽可能早。虚拟平台是可执行模型的完整的系统,为软件开发人员提供工作时间框架真正的硬件是可用的。他们使并发芯片系统(SoC)的硬件和软件的发展,显著缩短他们的集成时间。从嵌入式软件的角度来看,虚拟平台的使用允许开发和验证过程开始之前的设计流程,以检测和纠正错误,否则传播朝着最终实现阶段。此外,更容易访问和修改虚拟原型的内部状态,以便综合故障注入运动和容错可进行评估。这有助于实现嵌入式软件开发人员都从根本上寻找的东西:可预见性和鲁棒性1]。

系统级建模语言是用来启动设计过程从一个抽象级别和应用自顶向下的设计方法通过改进过程(2]。SystemC事务级建模(3提出了系统描述的抽象层次,关注组件之间的数据交换通过沟通渠道或套接字。因为他们的优势,TLM系统的描述可以用于设计空间探索,早期建筑性能评估,并允许早期软件开发开始,一起加入了硬件和软件设计流程。SystemC / TLM是用c++编写的,这是一个众所周知的编程语言,它的特点是一个受欢迎的起点来描述执行硬件/软件系统模型。用TLM系统模型很快写信给一个可执行版本的规范,它允许一个非常快速的模拟。对于系统级设计,这些语言允许描述硬件和软件组件在一个单一的框架。此外,只有开发工具需要定期的C / c++编译器和调试器,与嵌入式系统设计师已经轻车熟路。虚拟平台的使用给开发者更多的可见性和控制系统设计相比,传统的开发方法。任何国家都是触手可及,任何条件都可以被触发。因此,虚拟平台已经广泛应用于航空电子设备和空间硬件可用之前的软件开发环境。目前的研究集中在实验技术和工具,允许软件健壮性验证通过故障注入使用虚拟平台。

本文的其余部分组织如下:太阳能卫星的任务特点随着嵌入式软件的发展挑战和小说的贡献的部分2;相关的相关作品详细的在相同的部分。部分3描述了该包装器插入框架。部分4讨论了一些问题关于使用不同的业务代码插入技术性能和可用性。部分5描述了真实的场景,在该场景中,早期软件健壮性评价通过故障注入TLM2虚拟平台上(Leon2ViP)进行了。最后,部分6包含的结论。

2.1。太阳能卫星任务

太阳轨道(4)是一个太阳观测卫星计划,由ESA处于开发阶段,预计将于2017年1月作为基线。在最亲密的时刻,宇宙飞船将会比以往任何宇宙飞船接近太阳,几乎三分之一的地球离太阳的距离。由于太阳的距离,飞船必须承受强大的原子粒子来自太阳大气。从车载软件设计师的角度来看,有必要寻找永久的软错误导致更快从封闭失败/接口EEPROM。航天大学的研究小组分析Alcala负责仪器的发展控制单元(ICU)高能粒子探测器(环保署)车载太阳能卫星,以及相应的引导和应用软件。早期开发和验证的ICU的引导装载程序软件,一个框架能够运行相同的二进制代码需要在实际的硬件上运行。它也有效仿SDRAM并eepm永久错误,一个事实是困难的,如果不是不可能,真正的硬件。ICU启动软件是在项目的关键路径,所以它的验证应该处于早期发展阶段解决任何测试用例错过在这个过程中会影响整个机载软件的质量。因此,鲁棒性要求的呼吁一个详尽的测试引导过程和可能的应用程序二进制文件存储在腐败eepm或停留在错误的内部应用程序部署的地区。轴承这一点,从硬件依赖软件的观点,如启动软件,开展早期开发和测试活动的主要问题是缺乏硬件平台上运行它。 Other points to keep in mind are the effort and risks associated with bringing up hardware dependent software such as boot loaders. The classic approach for developing this kind of software has been to design the hardware, make a physical prototype, write the code, and then integrate the hardware and software. This methodology is nowadays too slow and calls for an alternative to the traditional software-after-hardware design flow in order to get started with software development and testing before the hardware is ready. To shortcut these issues the SRG has developed Leon2ViP, a LEON2 virtual platform with fault injection capabilities, which has been built around SystemC/TLM2 interfaces given previous experiences with LEON3 systems [5]。ICU的引导和应用软件开发,Leon2ViP提供更快的编辑、编译和调试周期,与此同时,一个更可控和可观察到的环境验证活动。此外,即使硬件已经可用,这个虚拟平台提供,否则不可能、和详尽的调试和故障注入功能。整个ICU硬件/软件合作设计中描述(6]。

提出了框架的一个关键点是,它使设计和验证的工作团队是解耦的。作为设计原则,Leon2ViP TLM2代码实现系统组件,如指令集模拟器内存模块或SpaceWire网络接口应包含功能代码为了模拟组件的行为,代表一个功能金色的硬件模型。所有故障注入代码用来模仿记忆停留在故障必须应用在TLM2事务接口而不是嵌入模型的代码。这导致拦截的必要性TLM2调用内存模块以腐败的数据读取或写入/内存或外围设备。

拦截图书馆提出了工作不是为了验证Leon2ViP虚拟平台本身。实际上,图书馆是虚拟平台的一部分在ICU的引导和开发帮助软件开发和测试的基本恢复机制在这些情况下当名义引导顺序是不可能的。它还被用于SpaceWire核心的合作设计用于通信从/到宇宙飞船。

尽管拦截图书馆专为Leon2ViP虚拟开发平台,它可以作为一个单独的工具为了插入包装TLM2设计。什么是这些包装用于图书馆用户。节5,显示了一个示例包装库已经被用于插入一个故障注入包装为了模拟停留在零内存访问错误。目的是验证正确性,根据规范的软件在虚拟平台上运行。

2.2。本文的贡献

本文尝试的结果提供了一个通用框架,提供动态二进制插装TLM2模型。使用的方法是基于机制的c++实现后期绑定在虚拟方法调用。我们的目标应用程序是Leon2ViP虚拟平台。(1)据我们所知,这是第一个图书馆使用c++虚表连接作为一个动态二进制插装技术为了拦截TLM2 socket原语。介绍了基本概念(7),为了验证一些代码片段的方法专门针对微软VisualC + +编译器。这项工作提供了一个全面发展的理念,拦截所有TLM2接口和考虑编译器差异。此外,最流行的编译器的实现,VisualC + + GCC,是自由释放。(2)提出图书馆能够包装器插入事务路径无需修改源代码TLM2模型描述。这使得该技术用于验证的第三方知识产权(IP) TLM2核心,它可以分布式对象模块。因此,没有知识的源代码或方法名称是必要的为了包装器插入事务通信路径。

2.3。相关工作

至于虚拟平台的使用,SystemC / TLM2内存映射是一个互操作性标准总线建模和虚拟平台的发展的关键驱动因素,作为硬件和嵌入式软件之间的一座桥梁设计师,尤其是对不依赖于硬件和通信软件开发(8,9]。除了使用TLM2处理器总线建模、TLM2扩展提出了以嵌入式系统网络模型。例如工作[10]提出的扩展事务级建模来执行系统/网络设计空间探索网络化嵌入式系统(洛克)。

使用SystemC事务级建模(TLM)是可能的模型混合的硬件/软件系统以模拟软件行为的存在硬件故障。例如,作品[11,12)将这种方法用于容错系统的设计和测试在FPGA平台上实现与不同类型的诊断技术。实验结果显示,故障覆盖率和单一事件如何沮丧(SEU)出现导致实现系统错误的行为。参考文献(13,14使用相同的方法来验证软件的网络化嵌入式系统最终的硬件可用之前。

来自工业环境,工作(15)描述了以前的工具,允许一个有效的增强,从系统级开发阶段过渡到软件开发阶段,在一个案例研究基于混合动力电动汽车的发展。另一个工作(16提出了一种系统级合作设计和coverification案例研究。在这项工作中,处理器总线功能模型(BFM)结合本地软件执行cycle-accurate互连模拟器和高密度脂蛋白模拟器。

故障注入是强制性的在实验可靠性评估。因此,的工作17]介绍了故障注入方法对寄存器传输级(RTL)系统描述成SystemC。TLM相关工作(18]提供了一个系统级故障注入的例子不计时的功能TLM模型基于FIFO频道。相关容错TLM2设计,描述的工作(19)提出了一种硬化组件间通信协议的方法。

assertion-based验证(酒精)SystemC / TLM模型是一个广泛的研究领域。断言捕捉系统的规范设计一个可执行形式。然后,他们在模拟作为显示器,检测和报告错误接近其来源以及建立覆盖率信息。一些工作,如(20.- - - - - -22),其中,使用这种方法来执行系统级验证。其他作品使用同样的方法来执行跟踪/窥探TLM之间的互换交易模块,例如[23,24]。断言通常在特定语言编写的房地产等规范语言(PSL)他们必须翻译必须放置在特定的断言代码之间交易的发起者和目标。

的角度来看这工作最重要的问题是如何断言代码引入系统模型描述。添加额外的代码在特定点的一种常用方法的源代码是通过使用面向方面的编程(AOP)。在AOP一方面部分功能与程序,但这不是有关程序的主要功能。它是基于source-to-source翻译并允许调用方法与前/后包装条件检查。从这个角度来看方面可以被视为一种包装器插入事务路径。c++方面(25)是C和c++的面向方面的扩展语言,被广泛用于添加方面SystemC描述(26,27]。

之前的工作主要是使用AOP的验证硬件模型中描述SystemC, RTL或TLM。离我们最近的作品是(28,29日]。这些作品交易跳棋插入在虚拟平台基于TLM2接口。检查的目的是检测错误的时间和顺序的事务TLM2设计。

像之前所说的,这项工作描述的插入图书馆不是目的是验证硬件设计的TLM2模型验证和监控软件运行在一个虚拟的平台建立在TLM2接口。然而,它也可以用于其他用途,在下一节中讨论。

3所示。TLM2包装器插入库设计

讨论模型的仪器描述基本上有两个特性考虑,见图1。前者是知识和可用性模型的源描述为了知道乐器。后者是绑定过程;这就是插装代码插入到模型中。

在图书馆拦截的情况下提出了工作,重要的是要强调,它的主要目标是提供基本的服务为了拦截TLM2事务在运行时。这意味着模块已经存在,他们TLM2套接字绑定,SystemC已经结束了精化阶段,模拟已经开始。更多,仪表应进行访问或不知情的情况下TLM2模型的源代码,只是TLM2插座已知目标的名称。需要使用运行时二进制插装在TLM2插座intermodule绑定源于这一点。

2显示了几种方式拦截两个TLM2模块之间交换的交易。插入的位置拦截或验证码是强调在所有情况下。一个事务发起者,SPARC指令集仿真器(ISS)绑定到事务目标和使用TLM2阻塞传输接口nb_transport_fw / nb_transport_bw进行交易。这些交易应该是内存读/写操作。拦截事务路径通常的方法是使用一个业务模块放置在模块之间(见第一例图2)。在这种情况下,发起人是绑定到一个模块插入事务路径和插入模块绑定到目标。第二例图2显示了一个c++方面放在目标模块为了拦截事务非阻塞调用。的nb_transport_fw通过的方式调用拦截nb_transport_aspect,所以传入事务的预处理和后处理的结果可以进行了。重要的是要指出,在所有上述方法需要修改源代码的执行事务路径修改。发起者必须绑定到拦截器模块或目标。所有这些绑定在编译时完成和执行期间不改变模型。甚至更多,这些绑定代码TLM2模型源代码的渊博的知识是必要的。例如,插入一个方面在一个方法,方法的名称必须已知。这就是所谓的静态代码插装。

提出了图书馆的目的是允许插入和删除插入的代码在运行时,作为第三例图所示2。没有修改TLM2模块和原始套接字绑定在编译时建立在运行时修改没有知识模块的源代码。只有TLM2套接字的名字是必要的。重要的是要强调图书馆提出了工作提供了基本的服务拦截TLM2事务。具体事务处理是建立使用这些基本服务。一旦事务路径截获通过包装器,它可以用在一些测试场景如事务跟踪或探听,通过故障注入试验可靠性评估,财产断言,TLM2合规验证协议。作为一个例子,30.)使用技术描述为了追踪TLM2组件之间的交易。工作(31日)使用相同的技术来插入一个TLM2协议遵从性检查器在非阻塞交通场景中。

最后一个例子如图2不是一个拦截的场景。它显示描述拦截场景的关系与其他测试等技术e语言(IEEE 1647)。e主要是硬件验证语言(液力挺适合执行验证测试的长椅。在这种情况下一个e试验台运行在发起者必将TLM2套接字(32,33]。试验台提供目标的刺激进行验证模块。

3.1。TLM2接口定义

SystemC c++面向对象的描述和模拟系统的框架。所有的系统的构建块,从基本信号抽象事务级别的接口,描述使用一个类层次结构,从基本的定义复杂的类继承的方法。在一个类层次结构,它通常类只定义一个接口,用于其派生的。没有真正创建一个基类的实例,只提供一个接口的描述。这样做是在c++抽象基类,这意味着至少有一个方法声明为纯粹的虚拟。在继承抽象类时,必须实现所有纯虚拟方法,或者继承类变得抽象。创建一个纯虚方法允许将一个接口描述没有被迫提供一个实现。派生类必须提供自己的特定版本的虚拟方法。几个设计模式使用多态性来调用不同的功能通过一个独特的和标准接口。多态性是一个关键的概念在c++软件设计的接口定义。

TLM2的基本层次结构tlm_fw_transport_if接口由一个目标实现套接字如图3。这个接口继承的描述四种运输方法:(我)tlm_fw_nonblocking_transport_if(2)tlm_blocking_transport_if(3)tlm_fw_direct_mem_if(iv)tlm_transport_dbg_if

所有接口都是抽象类,使用纯虚拟方法定义支持调用传入参数和返回值。例如,代码的tlm_fw_nonblocking_transport_if接口也显示在图3;它只定义了一个纯虚方法调用nb_transport_fw。每个实例的套接字实现这个接口必须提供自己的目标的实现nb_transport_fw方法。

3.2。c++实现多态性

与继承,多态是面向对象编程的一个基本特征的语言(如c++)。它提供的分离从特定的实现该接口的接口定义,解耦从“如何”“什么”。虚拟方法允许一个类型来表达其区别于其他类似的类型,只要他们都来自相同的基类型。表达的区别是通过一个不同的实现方法的行为。这些方法必须通过调用基类指针。

连接一个函数调用一个函数体绑定。当执行绑定编译的时候,它被称为早期绑定。另一方面,后期绑定的绑定发生在运行时,根据对象的类。后期绑定也被称为动态绑定或运行时绑定。当语言实现后期绑定时,必须有一些机制来确定对象的类在运行时和调用适当的方法。对于编译语言,编译器还不知道实际的对象类,但它插入代码,发现如何调用必须最后调用正确的方法解决。后期绑定只发生在虚拟方法,只有当通过基类指针调用。

4描述了一个虚拟的“大局”的电话。每次创建一个类包含虚拟方法或来自一个类包含虚拟方法,编译器会创建一个独特的虚拟方法地址表(VTABLE)的类。在这张桌子的地方地址的所有方法在这个类中声明虚拟或基类。通过使用这个表的地址被调用的方法是在运行时获得的。注意,虚拟表类特定的,只有一个虚拟表为每个类对象实例的数量无关。

可以修改VTABLE并插入一个包装器方法的地址进行必要的处理事务的参数和监控系统的行为。更多的是VTABLE可以复制,这样的改变只影响一个特定类的实例并不是全部。这是一个很好的改善AOP编程,它适用于类定义类的实例的数量无关。当不再需要包装,VTABLE可以恢复到原来的值。特别重要的是要注意,布局的VTABLE没有显式地定义c++应用程序二进制接口(ABI)所以有些特质是c++编译器相关的。然而,所有c++编译器采用类似的方法。常见的c++编译器有非法导出类的编译开关布局。微软VisualC + +,-d1reportAllClassLayout可以使用。GCC的g++编译器的开关-fdump-class-hierarchy。以下工具和工作是有用的了解c++程序的内部结构(34- - - - - -36]。

3.3。二进制布局和编译器的依赖关系

当调用一个虚函数(即通过基类指针。,a late binding call), the compiler quietly inserts code to fetch the VTABLE pointer (VPTR) and look up the requested method address in the VTABLE, thus calling it and causing late binding to take place. All of this VTABLE setting up for each class, initializing the VPTR and inserting the code for the virtual function call, happens automatically. Figure5显示了二进制的布局tlm_fw_transport_if对象和如何b_transport虚方法调用使用两个不同的对象指针从的角度解决微软vc++和GCC 4.1编译器。这种情况更为复杂,因为两个关键的面向对象特性,如多态调用和多重继承,同时使用。TLM2接口两个编译器的安排如下。(我)微软VisualC + + (VC)分配每个继承类的信息放置一个旁边另一个。如果一个继承类虚拟方法,包括一个指针指向其特殊的虚表。因为每个接口只有一个虚方法,有四个虚表只有一个条目指向每个方法的特定实现。当调用派生类指针,tlm_fw_transport_if p_fw在图5,指针指向调整其特定VPTR和类数据。这被称为指针修改指针可以安排。最后,由于每个接口只有一个方法,当前VTABLE(即第一个条目。,输入0)是用来调用正确的方法。(2)所有类的编译器GCC 4.1地方信息的对象。根据类型的指针用于调用该方法,使用不同的虚表。如果调用对象的指针,通过发出了tlm_fw_transport_if * p_fw在图5使用派生类的虚表。另一方面,如果调用通过特定类的指针,为例tlm_fw_transport_if p_b目的地址取自其特定的虚表。后一种情况会导致需要一个指针方法代码开始前可以安排,以允许访问类的数据。这被称为指针调整代码铛代码

简而言之,VC使指针调整VTABLE查找而GCC它之后。

3.4。包装器库设计

随着TLM2接口方法都是“虚拟”,每一个通过VTABLE调用对象的实例。因此可以修改函数包装器的VTABLE插入一些无需修改原始源代码描述,如图4。图中所示的类图6细节之间的关系模型的所有元素包装器基础设施。为简单起见,并不是所有的属性和方法。包装器的基类库TLM2_Wrapper。这个类提供了接口来处理所有TLM2接口。因为他们接受相同的处理,只有b_transport接口是解释在理解别人以同样的方式工作。

这里重要的是要理解“是一个”和“有”类之间的关系。TLM2_Wrapper基类的层次结构,并提供一个基本的直通包装服务。基本行为可以具体通过使用继承,重新定义一个基类的方法。例如,Fault_Injection_Wrapper在图6提供自己的b_transport_processing方法。这类“是一个”专业TLM2_Wrapper

另一方面,TLM2_Wrapper使用所提供的服务水平较低类来修改和恢复包装的VTABLE接口。这是一个“有一个”的关系。“会”代表包装器拦截图书馆和提供了方法,设置,和每个TLM2重置特定VTABLE条目的接口,考虑到编译器的二进制依赖关系。声明的接口b_transport处理由下列方法。(我)b_transport_wrapper:该方法的起始地址插入相应的VTABLE条目截获目标的套接字。它重定向调用b_transport_processing(2)b_transport_processing(虚拟):这种方法实现所需的包装器的行为。基类的默认实现调用b_transport_original_path导致一个直通模式。宣布虚拟,这种方法的目的是成为派生类重新定义的专业行为。(3)b_transport_original_path:这种方法用于调用的原始条目修改VTABLE为了维持整个事务路径。

类有四个方法。(我)wil_get_fw_interface供内部使用。这种方法得到了TLM2转发接口指针分层SystemC插座的名称。(2)wil_get_bw_interface供内部使用。这种方法得到了TLM2向后接口指针分层SystemC插座的名称。(3)wil_dup_vtable复制对象的虚表,鉴于其向前和向后TLM2接口指针。(iv)wil_reset_vtable恢复原始对象的虚表,鉴于其向前和向后TLM2接口指针。

每个接口的具体处理方法是继承了WIL_b_transport,WIL_nb_transport_fw,WIL_debug_transport,WIL_dmi类。的处理方法WIL_b_transport(我)wil_get_b_transport得到相关的VTABLE输入值,考虑到分层提卡SystemC插座的名称。(2)wil_set_b_transport设定一个特定的VTABLE输入一个新值。这个新地址值应该是一个包装器方法。(3)wil_reset_b_transport恢复原始值的一个虚表条目。(iv)wil_get_mapped_b_transport_entry供内部使用,得到原始条目映射到实际的包装器。这允许恢复时所需的原始值。

7TLM2显示方法的调用序列b_transport截获的环境。主要演员是发起者socket套接字绑定到一个目标。第一个序列显示了名义序列时启动程序问题b_transport调用。正如所料,对应的b_transport方法在目标执行。接下来,为了拦截这些电话和跟踪两个模块之间的信息交换,aFault_Injection_Wrapper通过创建c++吗操作符。创建包装器后,add_tlm2_wrapper方法调用包装器插入事务路径。要做到这一点,发起者插座的分层SystemC名称作为一个参数传递。另一个参数是一个常量值表明特定的接口被拦截,B_TRANSPORT在这个例子中。一旦包装器插入,同样的电话发出的发起者在第一序列,现在重定向到b_transport_wrapper方法。说,该方法的默认行为是调用b_transport_processing但因为它是虚拟和派生类重新定义,声明Fault_Injection_Wrapper调用此方法。 b_transport_processing现在可以进行预处理前传入事务参数调用吗b_transport_original_path方法,保持原始事务路径。事务处理的目标插座后,再次调用流的回报b_transport_processing,允许一些后处理返回的值。最后,这个方法的回归会导致原始的完成b_transport事务调用。

3.5。使用的例子

下面的代码片段显示如何使用图书馆的一个例子。首先,发起者和目标的声明,都与TLM2插座属性,如下(参见算法1)。

年代启动程序构造:sc_module
{
tlm_utils::simple_initiator_socket <发起者>套接字;
::::
结构目标:sc_module
{
tlm_utils::simple_target_socket <目标>套接字;
::::

考虑到之前的声明,通过获得的对象实例操作符。最后,两个套接字绑定的绑定方法发起者插座。从这一刻,每一TLM2通过引发剂方法调用套接字带来的执行对应的响应方法在目标模块(参见算法2)。

p_initiator =新引发剂(引发剂);
p_target=新目标(目标);
p_initiator - >插座。绑定(p_target - >插座);
::::

如果有必要拦截的b_transport方法的目标模块,它足以定义一个tlm2_wrapper类的特殊处理方法。在这个例子中是b_transport_processing方法的定义。这种方法可以进行一些预处理或后处理的来电参数,以及所示调用原始目标方法的算法3

void tlm2_wrapper:: b_transport_processing (transaction_type&反式,
sc_core:: sc_time&延迟)
{
/ /pre_processing(反式,延迟);
cout < <——B_TRANSPORT Pre_wrapper——< < endl;
b_transport_original_path_call(反式,延迟);
/ /post_processing(反式,延迟);
cout < <——B_TRANSPORT Post_wrapper——< < endl;
}

最后,通过c++包装类被实例化操作符。构造函数接收分层启动程序模块的名称作为一个参数所定义的SystemC。通过add_tlm2_wrapper方法,包装器插入事务路径。在这个例子中只有B_TRANSPORT接口是拦截(参见算法4)。

tlm2_wrapper * p_wrapper = new tlm2_wrapper (“top.Initiator。socket_0”);
::::
p_wrapper - > add_tlm2_wrapper (B_TRANSPORT);/ /包装内联
/ / B_TRANSPORT接口
::::
上面。p_initiator->socket->b_transport( *trans, delay ); // Call doesnt变化
::::
p_wrapper - > remove_tlm2_wrapper (B_TRANSPORT);/ /包装器删除

4所示。性能和可用性问题

拦截库已经在一个c++面向对象编码风格。这使得专业化的包装非常容易通过继承。图书馆已经小于2.000行代码如表所示1随着数量的代码是依赖于编译器的。


共线 Visual c++特定的代码行 GCC特定代码行

1895年 109年 44

TLM2包装器库的源代码可以找到V1.0https://dl.dropbox.com/u/19987939/TLM2Wrapper.zip。使用示例分布在主模块定义了两个TLM2模块并以通常的方式结合。之后,直通TLM2包装被实例化和包装是内联原始事务路径。调用所有TLM2原语后,包装被移除和主程序结束。表2总结了不同模块的代码覆盖率。数据已经通过GCOV, GNU源代码覆盖率分析工具。如图6wil_b_transportwil_dbg_transport有三个方法+类构造函数,wil_nb_transportwil_dmi有六个类构造函数和方法类继承了22个方法之前的类+自己的类的构造函数。见表2插入/删除的所有基本操作包装在TLM2原语都是锻炼。


模块 行执行 分支机构 调用

主要 86的77.9% 80.7%的52 105年56.2
tlm2_wrapper 263的73.4% 172的69.7% 142的60.56%
67的95.52% 100%的50 100%的23
wil_b_transport 89.5%的19 100%的12 100%的4
wil_nb_transport 67.6%的37 100%的20 100%的7
wil_dmi 67.6%的37 100%的20 100%的7
wil_dbg_transport 89.5%的19 100%的12 100%的4

3总结了一系列的性能测试结果进行估计的开销包装器插入事务路径使用不同的技术。一些可用性因素也包括在内。所有的测试进行了使用66 GHz通用笔记本电脑1 gb RAM内存使用微软Windows 7专业服务包1。插入的包装器实现了一个直通功能和调用目标方法。任何修改输入参数和返回值。对于每个发起人插座事务,处理时间使用时间戳测量计数器RDTSC [37),在英特尔处理器。一系列的1.000调用b_transport目标方法是使用以下两种配置:(我)使用一个业务模块之间的发起者和目标;(2)使用虚拟表连接插入方法包装在事务路径使用c++库了。


插入的技巧 个调用时间开销 顶级模特源代码修改 插入时间 删除时间

业务模块 30% 是的 编译时 不允许
VTABLE挂钩 20% 没有 运行时 运行时

鉴于TLM2模型,引入任何插入代码总是引入了一些时间处罚。甚至更多的可扩展性是设计问题。结果表明,虚拟表连接使用的拦截图书馆引入了时间开销接近但低于获得业务模块。其他重要的一点要考虑的是,这种技术,只有所需的特定调用拦截而另TLM2接口的调用以通常的方式运行。使用插入意味着套接字接口的所有方法都是截获,因此推迟。虚拟表连接的包装器,它可以在运行时插入和删除。虚拟连接的其他改进方法,它可以应用于一个单独的对象实例,而不是一个类。这个问题是利用在图书馆使用示例中描述的部分5

5。内联包装器库故障注入的用例

本节提供了一个真实的测试场景ICU的启动软件使用Leon2ViP虚拟平台和TLM2包装器插入图书馆。自从Leon2ViP虚拟平台的内部架构不是本文的重点,人物8只显示主要的组件,强调故障注入包装器的位置:(我)LEON2空间站:SPARC V8不计时的指令集仿真器与阻塞TLM2事务接口。(2)记忆:舞会,eepm, SDRAM模块。通过外部内存布局是高度可配置的配置文件,可以从外部读取当前内容普通二进制文件生成的编译器工具链。(3)总线:此模块互联所有TLM2组件的虚拟平台。(iv)SpaceWire:虚拟SpaceWire IP核心航天器通信。这个接口可以映射到SpaceWire监视器或外部SpaceWire硬件基于Star-Dundee USB SpaceWire砖(38]。

控制软件执行,Leon2ViP提供了一个命令行界面,用户可以发布命令加载内存二进制文件,检查内部状态的处理器和内存块并定义断点/监测点,在许多其他人。SDRAM并舞会区域通常是充满了外部程序二进制文件使用负载命令。Leon2ViP也模拟eepm地区;这些区域的内存内容在系统启动文件的内容名称相同的内存块。文件应该有相同的大小的内存块,必须包含二进制图像。当执行结束时,内存块的内容写回文件。这个模拟的行为eepm当数据更新它使用软件进行数据保护(SDP)模式中实现商业eepm模块。

之一的严格要求飞行软件是应用程序二进制文件应可更新的航班。这个特征允许系统从应用程序错误恢复发射后发现本身。有两个版本的ICU应用软件。EEPROM0模块包含基线版本和EEPROM1模块包含一个可更新的的版本。按照ICUSW健壮性要求(39),启动软件控制ICU后自动复位或开机和主要负责部署应用软件。引导软件验证的完整性两个版本的应用软件存储在eepm模块,以及记忆的完整性在部署它们。根据检查的结果,它将部署一个应用程序的两个版本的软件。如果两个应用程序软件图像受损,引导软件将等待和保持活跃,直到图像修复服务通过遥控,从地球,让内存补丁,转储,检查操作。更快的将测试为了找到可能的失败,可能条件系统堆栈分配和应用程序二进制部署的停留在错误。堆栈分配的考虑,只有32 kibibytes不损坏SDRAM所需运行启动软件。当既可以部署软件应用程序的版本,ICU启动软件必须等待航天器遥控,将加载一个新版本的应用程序软件,避免损坏的内部区域。

在图8用户问题stuckat0命令在0 x40000000地址。这意味着每一个读/写事务选择地址必须与一个逻辑零。执行这个内存访问腐败的一个包装器插入到SDRAM内存的路径。只要包装器插入错误仍然活跃。故障注入包装开发使用拦截库定义b_transport_processing方法以面具应用于数据的读/写事务,只是插入的事务路径下内存模块故障模拟。例如,为了测试引导行为当SDRAM停留在故障故障注入的包装器插入到SDRAM的道路。这使得舞会和eepm事务路径不变;因此舞会上获取操作引导代码和读取操作eepm模块不推迟。第一个结果的完整描述测试ICU引导可以在找到40]。

6。结论和未来的工作

在本文中,我们提出了一个图书馆的运行包装器插入TLM2模型。这里给出的结果是令人鼓舞的,表明它可以插入事务包装在一个简单的方法与最小时间开销和一个伟大的进步之前拦截模块等方法。该技术已成功应用于一个真正的软件开发早期和鲁棒性验证的场景。此外,这里采用的技术是适用于第三方软件组件验证,无需访问组件的源代码。它的缺点使用一些not-well-documented和compiler-dependent特性。图书馆设计已经由思考其可用性和容易定制。这个特性极大地减少了部署时间真实世界的测试场景。包装器内联的运行时自然有一种改进的影响整体系统仿真由于包装器可以安装在飞如果需要或者一些特殊的系统中运行时的情况。在相同的方式,包装不再需要时可以删除。此外,由于插入/删除包装是耗时且容易出错,这个任务还确保自动化测试过程不妥协最终系统的正确性。 A C style version of the library is under development in order to reduce the time penalty introduced in the current version for a single call.

利益冲突

作者宣称没有利益冲突有关的出版。

确认

这项工作一直支持西班牙Ministerio de隐藏y Competitividad资助下aya2011 - 29727 - co2 - 02和aya2012 - 39810 - co2 - 02。

引用

  1. t . a . Henzinger”两个挑战在嵌入式系统设计:可预见性和健壮性”英国皇家学会哲学学报A:数学,物理和工程科学,卷366,不。1881年,第3736 - 3727页,2008年。视图:出版商的网站|谷歌学术搜索
  2. l . Rabelo s Sala-Diakanda j . Pastrana et al .,“仿真建模的太空任务使用高级体系结构,”建模和模拟在工程文章ID 967483卷,2013年,12页,2013。视图:出版商的网站|谷歌学术搜索
  3. SystemC OSCI,打开SystemC倡议,2013。
  4. ESA,”太阳轨道。探索Sun-heliosphere定义研究报告,”科技。众议员I-CA2301,欧洲太空总署,巴黎,法国,2011年。视图:谷歌学术搜索
  5. a·达席尔瓦和s·桑切斯LEON3贵宾:一个虚拟平台故障注入功能,”13日Euromicro数字会议系统的程序设计:架构、方法和工具(DSD 10)里尔,页813 - 816年,法国,2010年9月。视图:出版商的网站|谷歌学术搜索
  6. 桑切斯,m .普列托O。r .马球et al .,“HW / SW合作设计仪表控制单元的高能粒子探测器车载太阳能卫星”太空研究的进步,52卷,不。6,989 - 1007年,2013页。视图:出版商的网站|谷歌学术搜索
  7. a·达席尔瓦和s·桑切斯的使用动态二进制插装在事务级别执行故障注入模型”过程计算机系统的可靠性的第四次国际大会上(DepCos-RELCOMEX ' 09)2009年7月,页237 - 244。视图:出版商的网站|谷歌学术搜索
  8. 婆罗米语f . Randimbivololona a, p . le Meur, t·玛丽和r . Beseme”最后航电软件的集成测试完整的虚拟平台,”程序的嵌入式实时软件和系统(ERTS2 14),图卢兹,法国,2014年2月。视图:谷歌学术搜索
  9. l . y . Wang Wang和z郑,“虚拟样机技术的应用,为机载软件系统模拟试验,”电子工程的进步,沟通和管理卷。2卷,140课堂讲稿电气工程施普林格,页653 - 658年,柏林,德国,2012年。视图:谷歌学术搜索
  10. n . Bombieri f . Fummi, d . Quaglia”系统/网络设计空间探索基于TLM网络化嵌入式系统,”交易在嵌入式计算系统,9卷,不。4、第三十七条,2010年。视图:出版商的网站|谷歌学术搜索
  11. s . Cuenca-Asensi a . Martinez-Alvarez f . Restrepo-Calle f·r·Palomo h . Guzman-Miranda和m . a . Aguirre”基于软核的嵌入式系统在关键航空航天应用程序中,“《系统架构卷,57号10日,886 - 895年,2011页。视图:出版商的网站|谷歌学术搜索
  12. m . Straka j . Kastil z Kotasek, l . Miculka“容错系统设计和建基于注入的测试,”微处理器和微系统公司,37卷,不。2、155 - 173年,2013页。视图:出版商的网站|谷歌学术搜索
  13. w·卢和m . Radetzki”、并发和比较故障模拟SystemC及其在鲁棒性评价中的应用”微处理器和微系统公司,37卷,不。2、115 - 128年,2013页。视图:出版商的网站|谷歌学术搜索
  14. c . Ziemke t Kuwahara i Kossev,”一个集成开发框架独立于平台和可重用的卫星车载软件的快速发展,“《宇航学报,卷69,不。7 - 8,583 - 594年,2011页。视图:出版商的网站|谷歌学术搜索
  15. r·马德尔g . Griessnig大肠Armengaud et al .,“从系统的桥梁为安全性至关重要的汽车嵌入式系统软件开发,”学报》第38 EUROMICRO会议软件工程和先进的应用程序(SEAA 12)2012年9月,页75 - 79。视图:出版商的网站|谷歌学术搜索
  16. 香港,t . Oguntebi j·卡斯珀:布朗森,c . Kozyrakis和k . Olukotun”的系统级硬件/软件合作设计和co-verification商品多处理器系统与自定义硬件,”学报》第八届IEEE / ACM /联合会国际会议硬件/软件合作设计和系统合成(代码+ iss ' 12)ACM,页513 - 520年,纽约,纽约,美国,2012年10月。视图:出版商的网站|谷歌学术搜索
  17. 美国Misera、h·t·Vierhaus和员工看来,“模拟故障注入和加速SystemC。”微处理器和微系统公司,32卷,不。5 - 6,270 - 278年,2008页。视图:出版商的网站|谷歌学术搜索
  18. k . j . Chang和y y陈”,系统级故障注入SystemC设计平台,”学报》第八届国际研讨会上先进的智能系统,第359 - 354页,2007年。视图:谷歌学术搜索
  19. a . Ebnenasir r . Hajisheykhi, s . s . Kulkarni”促进事务级别的容错设计SystemC项目”理论计算机科学卷。496年,50 - 68年,2013页。视图:出版商的网站|谷歌学术搜索|MathSciNet
  20. w·艾克尔诉女猎手,t。施m . Velten和m .船体“事务级别的互动演示:实现断言SystemC框架,”会议的程序设计、自动化和测试在欧洲(日期' 07)EDA财团,页894 - 899年,加州,美国圣何塞2007。视图:谷歌学术搜索
  21. a·哈比比和s . Tahar“SystemC事务级模型的设计和验证”IEEE超大规模集成电路(VLSI)系统,14卷,不。1,57 - 68,2006页。视图:出版商的网站|谷歌学术搜索
  22. b . Niemann和c . Haubelt Assertion-based事务级别的验证模型,”学报在ITG / GI / GMM车间vol.第九卷,第236 - 232页,2006年。视图:谷歌学术搜索
  23. 答:A . Ghofrani s Abolma 'Ali, z . n . Haghi z . Navabi,“TLM2.0断言图书馆使用集中监控方法,”《IEEE东西方设计和测试研讨会(EWDTS 10)东西,页402 - 406年,2010年9月。视图:出版商的网站|谷歌学术搜索
  24. l·皮埃尔和l .铁”,容易处理和快速监测systemC TLM方法规范,”IEEE计算机卷,57号10日,1346 - 1356年,2008页。视图:出版商的网站|谷歌学术搜索|MathSciNet
  25. f r . Tartler d·罗曼对o . Spinczyk”AspectC + +:一个集成的方法对静态和动态适应的系统软件,”以知识为基础的系统,23卷,不。7,704 - 720年,2010页。视图:出版商的网站|谷歌学术搜索
  26. d . Tabakov和m . y .瓦迪”自动aspectization SystemC”车间的程序模块化系统软件(“小姐12),页9-14,纽约,纽约,美国,2012年3月。视图:出版商的网站|谷歌学术搜索
  27. y Endoh“ASystemC: AOP扩展硬件描述语言”学报第十届国际会议上面向方面软件开发的同伴(AOSD的11)页19-28 ACM,纽约,纽约,美国,2011年3月。视图:出版商的网站|谷歌学术搜索
  28. m . Kallel y Lahbib、r . Tourki和a . Baganne”含量对向SystemC事务级别的模型”《21微电子(ICM ' 09)国际会议上2009年12月,页304 - 307。视图:出版商的网站|谷歌学术搜索
  29. m . Kallel y Lahbib、r . Tourki和a . Baganne”systemc事务级别的验证模型使用面向方面的和通用的方法,”第五届研讨会论文集在纳米集成系统的设计和技术时代(dti的10)2010年3月,页1 - 6,。视图:出版商的网站|谷歌学术搜索
  30. a·达席尔瓦和s·桑切斯事务序列跟踪的动态二进制插装TLM模型”12日Euromicro数字会议系统的程序设计:架构、方法和工具(DSD ' 09)2009年8月,页723 - 728。视图:出版商的网站|谷歌学术搜索
  31. A·达席尔瓦和桑切斯,“基于语法的测试框架T LM2.0协议遵从性验证,”第五届国际研讨会论文集DepCoS计算机系统的可靠性,系统可靠性的专著(RELCOMEX 10)可靠性、技术方法,页121 - 132,Oficyna Wydawnicza Politechniki Wrocławskiej,波兰弗罗茨瓦夫2010年。视图:谷歌学术搜索
  32. b·贝利f . Balarin m .麦克纳马拉g . Mosenson m . Stellfox y .渡边,TLM-Driven设计和验证方法露露企业公司,2010。
  33. h . Froehlich”界面增加有效的沟通与SystemC TLM 2.0 e语言模型,”调子,2012。视图:谷歌学术搜索
  34. a . Fokin k Troshina, a .基诺夫”重建反编译的类层次结构的c++程序,”学报》14日欧洲软件维护与再造工程会议(CSMR 10)2010年3月,页240 - 243。视图:出版商的网站|谷歌学术搜索
  35. n . A .卡夫b·A·马洛伊和j·f·权力,“逆向工程的工具链c++应用程序,”科学的计算机编程,卷69,不。2007年1 - 3,页3日到13。视图:出版商的网站|谷歌学术搜索|MathSciNet
  36. Skochinsky,“实用的c++反编译,”2011年《侦察,蒙特利尔,加拿大,2011。视图:谷歌学术搜索
  37. RDTSC”,使用性能监控的RDTSC指令”,2009。视图:谷歌学术搜索
  38. 明星邓迪,“明星邓迪砖”,2013。视图:谷歌学术搜索
  39. o . r .马球和p . Parra独奏环保署飞行软件需求,“技术代表、空间研究小组,Alcala大学,2012。视图:谷歌学术搜索
  40. 答:da Silva,桑切斯,O。r·波罗和p . Parra成功注入故障。验证软件启动车载太阳能卫星的高能粒子探测器,“《宇航学报,卷95,不。1,第209 - 198页,2014。视图:出版商的网站|谷歌学术搜索

版权©2014安东尼奥·达·席尔瓦等。这是一个开放的分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。


更多相关文章

PDF 下载引用 引用
下载其他格式更多的
订单打印副本订单
的观点1713年
下载786年
引用

相关文章

文章奖:2020年杰出的研究贡献,选择由我们的首席编辑。获奖的文章阅读