全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现

有关翻译正确性验证的重点疑难问题及其设计实现方案

在L2C可信编译器的设计与实现中, 对于实线所对应的翻译过程 (CompCert编译器除外) 均借助于Coq证明了正确性 (语义保持性), 然后得出LustreSGen所产生的LustreS代码到Clight代码整个翻译过程的正确性.从LustreS到Clight的任意两个中间语言***S***和***T***(设***S***在前) 之间的语义保持性可描述为

| ∀P.sound§⇒sound(τ§)∧SS§≈ST(τ§),∀P.sound§⇒sound(τ§)∧SS§≈ST(τ§), |

其中, τ是翻译函数, 可将S中间语言的程序P翻译至T中间语言的程序τ(P); SSS中间语言的语义函数, STT中间语言的语义函数; sound(P) 和sound(τ(P)) 分别刻画翻译前后的程序应满足的一些Well-formedness性质 (比如第5.4节所述的左右值不相交的性质.另外, 各层中间表示的性质会有所不同), 用以将各阶段翻译过程的证明串连起来得到整个翻译过程的语义保持性, 同时保证在每一阶段可以正常得到SS(P) 和ST(τ(P)); ≈是单向模拟等价关系:SS(P)≈ST(τ(P)) 意味着:P的所有环境变量在τ(P) 都有匹配对象, 且SS(P) 对环境的改变可以由ST(τ(P)) 对相匹配环境的改变进行模拟.对于合法的LustreS程序, 求值结果总是确定的, 这意味着语义计算的确定性 (在非串行语义的情形, 不同求值过程的结果也是确定的).因此, 证明上述单向模拟关系就足够了.全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现

这一验证目标看似比较明确, 然而在具体设计和实现时, LustreS到Clight的验证过程很复杂, 会遇到许许多多的疑难问题.一方面是因为这两种语言差异非常大, LustreS自身有很多独特的特点; 另一方面是因为形式化验证的特点决定证明的过程可能会经过多次反复.限于篇幅, 本文有选择地与读者分享在实际的设计和实现过程中遇到的一些重点疑难问题以及采取的具体方案, 首先讨论若干共性的问题, 然后再针对前一节提到过的核心翻译步骤详细加以说明.

1 整体证明框架的定义

形式化验证的特点决定了工作最难点在于整体证明框架的定义.形式化证明虽然能够为验证的正确性提供可靠保证, 但验证过程的可复用性、可移植性差.如果在整体框架的定义上出现问题, 即使是微小的问题, 也可能造成整个证明过程需要推倒重来.所以, 如何定义证明框架是能否完成证明的基础, 这直接决定了整体证明的工作量.

为了解决证明框架的定义问题, 我们在总结经验后采取了逆序分层验证的方式.一是由正常的LustreS到Clight的顺序验证, 改为由Clight到LustreS的逆序验证过程.二是尽量将翻译过程拆分为小的步骤, 每步只完成1个功能, 使每一步的的验证尽量简单, 以减少出错的可能性.

2 语义值和语义环境的定义

Lustre*的操作语义定义是实现L2C编译器中主体翻译阶段正确性验证的基础, 而语义值和语义环境又是操作语义定义的基础.

在实现L2C编译器的证明过程中语义值的定义反复经过多次改动.每次改动都给证明过程带来很大的影响.最初Lustre语义值的定义与Clight相差非常大, 这一方面导致Lustre在自身的简化证明过程中难度很大, 另一方面又导致很难和Clight进行对接.最开始的定义尤其在Lustre语义值的写入和读取时, 不支持读写范围的限制, 这导致最后和Clight对接时, 无法提供相应的条件.经过多次证明的反复修改, 最终决定让Lustre语义值的定义尽量接近Clight, 这样一方面可以吸收Compcert的成功经验, 另一方面减少语义值的差异能够简化证明的过程.

3 ID管理

翻译过程中可能产生大量的中间变量, 而且翻译的层数比较多.如何定义程序中已有的id集合不重复, 如何保证翻译新生成的id集合不重复, 以及如何保证新生成的id集合与已有id集合不相交, 是贯穿整个验证过程的问题.为了解决这个问题, 我们对整个翻译过程中的id进行了分类:程序自带的id、翻译新增中间变量的id、预定义id以及特殊预定义的id.

4 左右值不相交的保持性证明

这一难点是在CtempGen的证明中处理结构体和数组类型的赋值运算时发现的.结构体和数组类型赋值运算要翻译为Ctemp中memcpy运算, 这需要有一个对地址范围的限制:要么源地址和目的地址的指针不同, 要么源地址和目的地址的偏移量不同, 要么源地址范围和目的地址范围不相交.而Lustre中不存在指针, 在这一步的证明之前也没有对Lustre赋值运算左右值的地址进行限制, 所以需要定义Lustre中赋值的左右值地址不相交.后来发现在call运算中也存在类似的问题.由于地址不相交性质贯穿Lustre的所有层, 还涉及call运算, 所以带来的工作量非常大.尤其是在部分类型节点的输入和输出参数需要被翻译成结构体的情况下, 这时结构体变量的地址相同, 要证明其偏移范围不相交, 证明过程很复杂.又因为这个定义涉及对表达式的地址求值, 这也增加了证明的工作量.

5 程序初始化及reset函数的证明

Lustre*程序的主节点和节点列表都有对应的reset函数, 主要用于初始化时态运算中所需的第1周期标识变量acg_init.Reset函数的生成和证明本身难度不大, 难点在于在哪些层生成reset函数.Reset函数的生成位置选择不对, 会使证明难度加大, 还可能因为提供的条件不够造成无法证明.经过多次试证, 才发现节点类reset函数的生成ResetfuncGen放在返回值分类ClassifyRetsVar之后最合适.因为返回值分类后, 将需要翻译为输出结构体的变量都归为一类, 这为reset函数的翻译证明提供了合适的条件.而且reset函数翻译后, 和普通节点类型统一起来, 后续不必单独证明reset函数.reset函数和程序初始化紧密相连, 都是贯穿整个证明的过程, 整体证明的工作量也较大.

6 拓扑排序Toposort的证明

经过预处理的LustreS程序是未经排序的.需要对节点列表和每个节点内的等式列表进行排序.使排序后的程序的执行按顺序语义执行, 为后续证明提供条件.其中, 节点的排序能够为后续只翻译单个节点时的证明提供条件.这一部分的证明分3个方面:(1) 排序后的程序和排序前的程序是同一个程序的排列; (2) 排序后的程序满足拓扑排序的性质; (3) 对同一程序经排序后, 任意两个满足拓扑排序性质的程序按照LustreS顺序语义执行的结果是等价的.当前版本中定义了LustreS的并发语义, 从并发语义到顺序语义的语义保持性证明本质上与这3个方面的证明是等效的.

7 高阶算子与嵌套时钟消去过程LustreRGen的证明

为了描述Lustre*复杂的高阶运算, 以及mix等各种特殊运算, LustreS的语法定义比较复杂.LustreS中的高阶运算以及各种特殊运算实际上是由多种简单运算组合而成.比如, 普通的高阶运算可以化简为for循环运算; mapw等特殊高阶运算可以化简为for循环和if运算的组合; flatten运算可以拆分为多个赋值运算的序列; aryprj运算可以拆分为if语句和赋值运算的组合.高阶算子消去的作用就是将LustreS中各种复杂运算拆分为多步简单运算.另外, 嵌套时钟的消除仅需要在等式/语句之前添加相应的条件语句.LustreRGen翻译的过程不产生中间变量, 其证明不涉及环境匹配的问题, 因为翻译前后执行环境都完全相同.但因为需要拆分的复杂运算比较多, 部分复杂运算的拆分过程比较复杂, 使得证明的过程虽然不是很难, 但证明的量比较大.

8 时态算子消去过程LustreFGen的证明

这一层的翻译主要是消去节点列表中的时态运算, 这也是整体翻译和证明的难点.但通过前面一系列的分类和简化, 使得这一部分的证明得以完成, 需要处理3个时态算子fby, fbyn和arrow, 而且以语句的形式独立呈现.全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现

Fby语句的来源分为两部分, 一是由arrow (→) 和pre算子转换过来的, 二是fbyn中n为1的语句.Fby和fbyn的翻译需要生成后置赋值等式 (参见第5.7节的示例), 负责延续历史值的生成.Fby的翻译比较简单, 通过第1周期标志变量FLAGID, 生成主体的if分类赋值语句, 再生成预定义的中间变量和后置赋值等式.Fbyn语句的翻译较为复杂, 因为其历史值是存放在对应的数组当中的.在第1周期是需要利用for循环对其进行初始化; 在后续周期循环取数组对应位置的值; 后置等式要对fbyn下标进行模加运算, 还需循环更新对应下标的值.Arrow的翻译比较简单, 通过第1周期标志变量FLAGID, 生成if分类赋值语句即可.

9 LustreC到Ctemp的证明

LustreC到Ctemp翻译过程CtempGen的证明是整个证明过程中工作量最大的, 也是最难的证明.由于证明的量过大, 不得不分成两部分, 第1部分主要是完成一些基本定义和底层证明, 第2部分完成主体的证明.这里我们抛开翻译细节, 主要分析一下证明量大的原因并描述解决方案.

首先是语义环境的差异较大.LsemC的语义环境主要包括全局常量环境gc、存储节点本地变量的环境te、存储节点输入参数变量的ta和存储输出参数的se.Ctemp的环境主要包括全局环境ge、存储节点本地变量地址的环境eC、存储输入参数的环境leC、存储输出参数的环境teC和存储数据的内存mem.其次, 输出C代码的规范要求造成证明分支多.第三, Ctemp语义环境内的隔离性定义.最后, 函数和语句的互归纳证明.所有各层的节点和语句的证明都要通过互归纳的方式来实现.

高性能嵌入式仿真软件SkyEye

随着科技的发展,系统工程的设计体量逐渐庞大起来,尤其是对于轨道交通、航空航天、核电站等安全关键领域中,如何在复杂度逐年变大的同时保证其安全性和可靠性,是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程(MBSE)技术则给大家提供了一种全新的技术方向,分享一种全数字实时仿真的安全关键领域解决方案,提供一种新的解决思路。全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现,提供高效的运算速度,提高研发效率和安全性。

image

新一代全数字仿真平台SkyEye

基于模型的全数字研发解决方案MBSE工具软件SkyEye是能够满足模拟或仿真外部硬件行为进行软件运行和测试需求的工具。该工具运用国际流行的仿真、测试脚本语言来编写外部硬件逻辑行为所产生外部激励事件以构成嵌入式软件的外部信号激励或数据输入,从而满足软件在全数字仿真运行环境下无须人的干预而闭环运行的要求。全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现

作为基于嵌入式应用的特点,嵌入式软件全数字仿真测试支撑平台SkyEye要为嵌入式系统提供全数字仿真测试环境或测试平台,实现对嵌入式系统进行实时、闭环的系统测试。在该平台上完成被测软件的分析、运行和测试,最重要的是要实现嵌入式系统外部事件的全数字仿真平台,使得嵌入式软件就像在真实硬件环境下连续不中断地运行。


本文标题:高性能嵌入式仿真软件SkyEye

本文链接:http://www.digiproto.com

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

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

相关文章

idea 分支管理插件_Git的分支管理常用命令

文章目录分支管理git stashgitmerge与git rebasegit merge --squashcherry-pick分支管理命令作用git branch查看当前分支git checkout/git switch 分支名称切换分支git merge 分支名称将指定分支合并到当前分支git branch -d 分支名称删除指定分支git diff 分支名称1 分支名称2…

安卓蓝牙键盘切换输入法_采用国产机械轴,三种连接模式轻松切换,TT G521上手体验...

之前我用过三模游戏鼠标,也用过三模薄膜键盘,但是三模机械键盘,还是第一次使用。机械键盘,相信大家都知道,现在已经很普及了,估计当时把机械键盘重新带回到玩家当中的大神,也没有想到它会这么火…

国产自主可控的嵌入式仿真软件SkyEye和同步数据流语言高阶运算消去的可信翻译

同步数据流语言高阶运算消去的可信翻译 同步数据流语言(例如Lustre,Signal等)广泛应用于工业界的核心安全级控制系统,如航空、核电等高安全等级的关键领域,与语言相关的软件的安全性也越来越受到人们的关注,特别是一些基础软件,如操作系统、编译器等.确认这些软件的安全可靠非…

pq 中m函数判断嵌套_压轴题的热点,二次函数与几何的结合,谁会谁吃香

对于整个中考数学来说,二次函数的重要性,我想不用老师多说,大家肯定心里有数。二次函数作为初中数学的重要内容,命题老师很喜欢把它与其他几何图形进行结合,形成综合性更强的试题。不可否认,二次函数与几何…

完全自主可控的安全关键领域仿真测试软件SkyEye可替代SCADE

基于全数字实时仿真平台 SkyEye 产品性质 :全数字实时仿真平台(软件测试和仿真工具) 对标产品 :美国风河公司的Simics,可替代SCADE SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模…

请求接受json tp5_关于jq jsonp跨域请求错误处理bug

前言:昨天,同事修改项目升级插件时遇到了一个ajax 报错,如下:$.ajax({type : "get",async:false,timeout:3000,url : "http://10.10.10.26:808/servlet/updateLog?line1",dataType : "jsonp",//数…

ModelCoder国产化解决方案已逐步代替国外软件Matlab/Simulink

ModelCoder介绍 在安全关键领域,基于模型的软件工程或者软件开发已逐渐进入了我国的装备研制过程中。使用Simulink或者SCADE等嵌入式软件建模工具对算法或者控制逻辑进行可视化建模,然后生成高可靠的二进制代码逐渐成为了安全关键领域的主流开发方式。 …

两用物项许可证办理流程_一指通 | 出口许可证办理流程

什么是出口许可证?出口许可证,是指商务部授权发证机关依法对实行数量限制出口货物签发的准予出口的许可证件。出口许可证监管证件代码为“4”。加工贸易出口“出口许可证”管理的货物,监管证件代码为“x”。边境小额贸易出口“出口许可证”管…

SkyEye实现工业安全关键领域基础软件国产替代

随着科技的发展,系统工程的设计体量逐渐庞大起来,尤其是对于轨道交通、航空航天、核电站等安全关键领域中,如何在复杂度逐年变大的同时保证其安全性和可靠性,是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程&a…

2寸的照片长宽各是多少_贵州公务员考试照片尺寸要求是多少

中公教育在贵州公务员考试中对于照片要求与2寸照片的林小差不多,简单来说就是长宽最小像素为160px和130px、最佳效果为260px*320px;即使考生们已有照片未达到公务员照片的相关要求,考生们可以通过图片处理系统进行等比例裁剪达到照片尺寸要求…

自主可控的全数字实时仿真软件SkyEye支持PowerPC指令级仿真

随着科技的发展,系统工程的设计体量逐渐庞大起来,尤其是对于轨道交通、航空航天、核电站等安全关键领域中,如何在复杂度逐年变大的同时保证其安全性和可靠性,是近年来各大公司需要研究的课题。最近比较火热的基于模型的系统工程&a…

中国自主可控的全数字实时仿真软件SkyEye支持龙芯CPU指令级仿真

传统的系统开发过程,都是由工程师根据项目需求书来编写代码完成系统的开发,但随着功能的完善和版本迭代,系统中庞大的代码量很难确保正确无误,给后期测试和仿真带来了很大的压力和成本,在航空航天、卫星系统、核电等安…

进入实现类快捷键_实测30个自带快捷键,原来键盘也这么好用!

文 / 一周进步 水韬推荐过很多软件快捷键的文章,每次推荐大家都会惊叹,原来自以为熟练掌握的软件,还可以有这么多便捷的操作。活到老,学到老。软件操作是如此,其实在我们使用最多的Windows系统里,在键盘里…

怎么做笔记标签贴_小红书笔记互动到底该怎么做?

小红书很多博主再发完笔记后,喜欢到一些互赞群里去跟别人相互关注点赞收藏评论。这个就是我今天要和大家说的。小红书笔记在一些互赞藏群里自己上关键词车,这样是会被判违规的,什么违规呢?那就是人工干预后台数据。小红书有这样一…

全数字实时仿真平台SkyEye与SystemC集成进行时序仿真

SkyEye与SystemC集成进行时序仿真 仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确,及在设计实现过程中各种分布参数引入后,其设计的功能是否依然正确无误。时序仿真使用布局布线后器件给出的模块和连线的延时信息&…

全数字实时仿真平台SkyEye和同步数据流语义与翻译正确性验证

全数字实时仿真平台 SkyEye,中文全称天目全数字实时仿真软件,应用软件仿真技术,逼真地模拟出被测软件的物理环境。用图形化方式构建虚拟目标系统,有效降低了硬件工程师和软件工程师之间的沟通成本,软件工程师可以不依…

访问不了_同事的电脑无法访问,共享打印机连接不上,问题都在这

作为一个it服务工作者,发现大家平时遇到最多的问题就是公司内部同事的电脑访问不了或者共享打印机打印不了等等。所以今天给大家分享一下引起这些问题的原因所在和解决办法。其实我们只要掌握了核心的几个关键点,对症下药都是比较容易解决的。常见的一些…

全数字实时仿真平台SkyEye实现了与虚拟FPGA协同仿真

1. 可与虚拟FPGA的协同仿真 全数字实时仿真平台SkyEye实现了与虚拟FPGA的协同仿真,可以支持UVM的验证方法。虚拟的FPGA通过协同仿真总线与SkyEye相连,用户可以自主的控制仿真运行速度,提高较大规模嵌入式系统的测试效率。SkyEye本身是多架构…

SkyEye建模之方法介绍篇

SkyEye建模框架介绍 SkyEye模型与硬件开发板,图1-1-1是一块普通的硬件开发板,上面有一些比较常见的设备,包括复杂的CPU、USB口、网口、SD卡控制器等,以及简单的蜂鸣器,键盘等设备。我们试想这样一个问题,真…

全数字实时仿真平台SkyEye目标码覆盖率关键技术

1. 研究背景 1.1零插桩目标码覆盖率统计技术 随着武器装备的复杂度的大幅度增加,运行在装备上的嵌入式系统也越来越复杂,功能迭代越来越多,代码中就可能就会存在部分无用代码,或者在执行过程中无法测试覆盖的分支,这…