为了满足国内某安全攸关领域的需求, L2C编译器的开发始于2010年9月, 其目标是设计实现一个经过形式化验证的可信编译器, 其源语言是面向领域的同步数据流语言Lustre*(Lustre语言的一个变种, 参考下一节), 目标语言是C, 最终可用作相关领域数字化仪控系统的安全级代码生成器.国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译步骤及其设计与实现。国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍

1、L2C编译器简介

L2C编译器的发展进程可归为3个里程碑.一个是面向Lustre的一个核心子集, 设计实现了L2C编译器的一个原型系统, 于2013年6月完成验收.另一个里程碑是已实现除嵌套时钟外Lustre全部特性的一个单时钟L2C编译器版本, 完全能够满足国内该安全攸关领域目前的实际应用需求, 并于2015年4月完成严格的企业级验收, 这些工作的相关技术和代码已在实际应用中发挥作用.

在上述第2个里程碑之后, 项目组对L2C编译器的设计框架进行了较大程度的优化调整, 目标是拓展应用领域以及开源系统的建设.目前, L2C编译器进入了第3个里程碑的发展阶段, 其目标是在目前面向企业的版本 (不开源) 基础上裁减并适当改造, 形成了覆盖Lustre V6[19]全部特性的可开源版本.目前, 这一L2C编译器的单时钟版本 (L2C-MC) 已经开放源码 (https://github.com/l2ctsinghua/l2c/releases/tag/version-0.8), 支持嵌套时钟的版本处于测试与完善的周期, 其源码不久也将开放.

2、源语言的特性

L2C编译器的不同版本, 其源语言 (Lustre*) 可能有所不同, 本文以目前支持的最多特性为准.Lustre*覆盖了Lustre V6的全部特性, 并且根据实际应用的需求在此基础上有许多扩展, 特别是在高阶运算方面比Lustre V6更加丰富.

图1展示一个简单的Lustre程序, 可见, 一个Lustre程序 (program) 由多个节点 (node) 组成, 节点中包含输入参数 (parameters)、输出参数 (returns) 和函数体 (body), 其中函数体又由局部变量 (local variables) 和等式 (或语句) 序列组成, 结构清晰.

下面以图1示的Lustre程序为例来阐述Lustre的某些重要语言特性, 并且在图2中给出图1中主节点Main的一组合理输入与输出来直观展示Lustre*语言的这些特性.

(1) 流数据对象.图 2展示的输入输出很直观地体现了Lustre程序区别于C语言程序的一个很重要的特性, 即在Lustre中每一个变量都是一个无穷长的流 (stream) 数据对象, 而不仅仅是一个单个的值.每一个周期 (cycle), 变量都可能会有不同的值或者没有值, 其中图 2截取了输入输出前10个周期的值, 后面还有无穷个周期.虽然每个周期的值可能会变化, 但处理逻辑每个周期都一样, 如图 1所示的主节点Main的代码逻辑, 每个周期都一样.Lustre*是同步语言的一种, 所有同步语言均满足同步假设:当前周期的输入时间出现时, 系统能够在下个周期的输入时间出现之间计算出当前周期的输出.这一重要的同步假设使得同步语言在嵌入式实时控制系统中得到大规模应用.

(2) 数据流并发性.不同于C程序, Lustre程序具有数据流并发性, Lustre节点中的等式 (相当于语句) 虽然在书写时有先后顺序, 但都是并发执行的.更复杂的情况是, Lustre程序中的等式 (或语句) 之间存在因果关系, 所以在并发执行时还需要考虑等式 (或语句) 间的拓扑关系.如图 1中第7行~第8行所示, 这两行就存在因果关系.第7行k*的赋值依赖于第8行执行的结果, 所以第7行应该在第8行之后执行.这里拓扑关系的具体含义可参见第4节.

(3) 高阶算子.Lustre支持如map, re等10多个高阶算子, 这些高阶算子可以很方便地操作数组对象, 在编写程序时会更加便利.如图 1中第10行所示的map算子, 以节点 (或称函数) Max以及两个数组x1和x2作为参数, 返回另一个数组p*.语义上, 相当于并行执行“p[i]=Max (x1[i], x2[i])”(i从0变到1).

(4) 时态与时钟算子.由于Lustre的流数据对象特性, 语言提供了时态算子, 比如pre, fby, arrow (→) 等, 可以对流数据进行操作.另外, Lustre还支持嵌套的时钟, 提供了可改变时钟快慢的算子, 如when使时钟变慢形成下一层嵌套的时钟, 而current与merge使时钟变快, 回到上一层嵌套时钟.如图 2所示, 使用when算子后, 主节点中y1的时钟相对于x3的时钟变慢了 (根据布尔量b取值为true时进行采样); 使用了fby算子之后, 主节点中s相对于y1时钟周期不变, 但每个周期的值向后shift了1个周期 (注意, 这里指相对于y1时钟的shift, 即对应于b取值为true时的时钟周期).

3、L2C编译器的主体翻译框架

随着源语言 (Lustre*) 特性的增加以及不同开发阶段的不同理念, L2C可信编译器的翻译框架也在不断变化, 先后出现过接近10个稳定的框架图, 图 3是其中最近的一个.国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍

如图 3所示, Lustre源程序经过词法、语法以及静态语义分析 (类型检查), 翻译到类型良好的抽象语法树 (abstract syntax tree, 简称AST) 形式的高级中间语言Well-typed Lustre AST代码. Well-typed Lustre* AST代码经过一些简单的预处理变换 (LustreSGen) 生成一种具有规范形式的中间语言LustreS代码.预处理变换主要包括全局常量和类型的合并、拆分表达式列表、通过引入新变量提升某些特殊表达式 (如call和fby表达式) 至等式 (或语句) 级别等.

对于这部分的翻译过程, 目前我们没有去进行形式化验证, 故在图 3中用虚线箭头来表示.词法和语法分析算法或者相关的工具是比较成熟的, 比较可信, 但若要验证它们的正确性却是很困难的, 因此目前的可信编译器 (包括CompCert) 基本上不验证这一部分工作.此外, 其余的翻译工作 (包括类型检查) 相对比较简单, 也比较容易验证, 同时也因为它们是受Lustre*变化影响较大的部分, 所以我们在整个L2C可信编译器的实现中将这部分验证工作放在了最低的优先级.另外, 这些翻译过程的翻译确认程序是比较容易实现的, 这也是我们不急于完成这部分验证工作的重要原因之一.

高性能嵌入式仿真软件SkyEye

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

新一代全数字仿真平台SkyEye

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

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


本文标题:国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍

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

国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍相关推荐

  1. 支持国产处理器仿真的全数字实时仿真平台SkyEye与可信编译器L2C的核心翻译步骤

    1.核心翻译步骤示例 本节我们以第2节提到的Lustre语言的主要特性为线索来解释L2C在翻译过程中的关键节点是如何处理的, 并以图 1的实例来解释Lustre程序是如何被一步步地翻译到Clight语 ...

  2. 高性能高可靠性的全数字嵌入式仿真测试软件SkyEye

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

  3. 高性能全数字嵌入式仿真测试软件SkyEye支持多达70余种核心

    全数字仿真平台作为工业领域不可缺少的重要软件之一,除了可以与MATLAB或者Simulink集成外,还支持哪些优秀的功能?在了解新一代全数字仿真平台SkyEye之前,先来学习一下什么是全数字仿真平台. ...

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

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

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

    同步数据流语言高阶运算消去的可信翻译 同步数据流语言(例如Lustre,Signal等)广泛应用于工业界的核心安全级控制系统,如航空.核电等高安全等级的关键领域,与语言相关的软件的安全性也越来越受到人 ...

  6. 国产自主可控的代码自动生成工具SkyEye

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

  7. 网络磁干扰仿真测试软件,电磁仿真软件有哪些?电磁仿真软件专辑推荐!

    电磁仿真软件有哪些?电磁仿真软件专辑推荐! 点击:179  日期:2021-05-06 11:16:59.0 [软件] 导读:随着计算电磁学在工程应用领域影响力的不断加深,商用电磁仿真软件越来越多,操 ...

  8. 汽车智能安装仿真测试软件,智能网联汽车仿真测试平台建设.pdf

    国家轿车质量监督检验中心 智能网联汽车仿真测试平台建设 目录 1 智能网联汽车仿真测试平台建设的需求 基于仿真工具的智能网联汽车研发测试 2 及认证测试 3 现阶段智能网联汽车仿真测试面临的关键问题 ...

  9. 电路原理仿真测试软件,测试工具篇-运放测试电路仿真《TINA-TI》

    ©版权声明:本文为[看我哒 www.kanwoda.com]原创文章,转载时请注明出处! 出门向左,感谢Jerry Gao的分享<测试基础篇-电容与电感对电流测试的影响>,文中介绍了用LT ...

最新文章

  1. GCC中通过--wrap选项使用包装函数
  2. Linux下SVN服务器同时支持Apache的http和https及svnserve独立服务器三种模式且使用相同的访问权限账号...
  3. ML 自学者周刊:第 4 期
  4. 【设置字符集】Win7 64位系统安装MySQL5.5.21图解教程
  5. Searchsploit
  6. 银行员工会购买自己银行的理财产品吗?
  7. 上古时期(大雾)的数据结构pdf
  8. 【Linux内核】物理内存组织结构
  9. Linux内核Crash分析
  10. c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子
  11. 由B+树看MySQL索引结构
  12. js 跳转传递汉字参数
  13. iOS 14.5 目前已經發布了8 個測試版更新
  14. 虚拟化实验室推进计算机网络专业实践教学的解决方案
  15. 没钱充会员 百度网盘下载限速怎么办?这些招可以突破百度网盘非会员限速限制
  16. IP数据在金融风控反欺诈领域的常见应用?
  17. Python if else elif
  18. 测评EasyRecovery的数据恢复效果与多种功能
  19. 计算机科学发展与大规模集成电路,计算机科学与技术发展趋势
  20. mac安静执行脚本_自动切换mac输入法-安静模式

热门文章

  1. @Component和@Configuration作为配置类的差别
  2. raid卡组不同raid_RAID 类型介绍
  3. c语言中foreach的用法,详解JavaScript中的forEach()方法的使用
  4. 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
  5. java中删除最大的数,【Java练习】删除字符串中字符个数最少的字符
  6. mysql 回滚之后抛出异常_在PHP中 开始事务后,程序抛出异常 没有执行commit也没有执行rollback mysql事务会回滚吗?...
  7. java 06_JAVA06 数组
  8. 华为开启管理员模式_又一年的心动模式开启,华为nova8系列8号色撩人肺腑
  9. 《零基础》MySQL 管理(三)
  10. word文档保存到服务器,读取SQL表数据保存到Word并将Word文档保存到服务器代码