Shellac:并发程序的编译器合成器
1. 支持的目标语言
Shellac 能够生成面向不同目标语言的编译器后端,以下是其支持的两种主要目标语言及相关编译流程:
- Arduino :Arduino 语言是源自 Wiring 语言的 C++ API。该 API 提供了用于读写硬件输入/输出引脚的函数。Shellac 生成一个从布尔位向量序列到 Arduino C++ 的编译器后端。之后,Arduino 项目工具链会将 C++ 代码编译成 ARM 机器码,并对微控制器进行编程。
- Verilog :Verilog 是一种用于数字电路的仿真和设计语言。其中可在数字电路中实现的非仿真子集被称为可综合 Verilog。Shellac 生成一个从布尔位向量标量到可综合 Verilog 的编译器后端。Intel 工具链会将 Verilog 编译成用于配置 FPGA 的比特流,将其转变为定制数字设备。
2. 形式化与机械化
Unity 规范语言围绕功能表达式求值和原子状态转换的显式分离构建。这种分离使我们能够独立关注每个问题来制定正确性。有两个编译阶段涉及需要形式化正确性的语义转换:
1. Unity 赋值到布尔位向量并行赋值 :在此阶段,我们要证明规范表达式的语义得以保留。
2. 布尔位向量标量到顺序赋值 :在这个阶段,我们需证明目标状态转换是规范的细化。
下面将详细介绍这些形式关系、在 Rosette 中的机械化实现,以及 Shellac 如何生成用于合成重写规则的验证条件
超级会员免费看
订阅专栏 解锁全文
52

被折叠的 条评论
为什么被折叠?



