14个版本 (重大更改)
0.14.0 | 2022年2月8日 |
---|---|
0.13.2 | 2021年11月11日 |
0.12.1 | 2021年8月18日 |
0.12.0 | 2021年1月9日 |
0.1.0 | 2018年2月27日 |
#730 在 硬件支持
每月44 次下载
在 moore 中使用
1.5MB
31K SLoC
moore编译器的SystemVerilog实现。
此crate实现了SystemVerilog语言的查询式编译器。它力求成为一个完整的IEEE 1800-2017实现,将任何输入源文本映射到等效的LLHD代码。
实现使用源文本的不同表示来处理编译的不同部分。这种方案是必要的,因为SystemVerilog具有非常混乱的性质,其静态和动态类型的奇怪混合。尽管编译器使用查询来处理更复杂和循环的依赖关系,但表示形成了一个处理过程的粗糙链,每个结构都通过(尽管每个都以自己的速度)
- AST:由
syntax
crate中的解析器发出的抽象语法树。 - RST:已解析的语法树,其语法中的歧义已解决。这是通过在AST表示上构建名称解析作用域和defs来实现的,并将名称解析以消除语法中的歧义。
- HIR:高级中间表示,执行将模块体中的结构列表分解为声明、实例、参数等列表的操作。还尝试在适当的地方消除语法糖。在此表示上执行类型检查,并使用
ParamEnv
表示同一HIR模块/接口的不同参数化。 - MIR:中级中间表示,其中所有隐式转换操作和参数化都已明确化并完全展开。此时,大多数SystemVerilog怪异之处都已解决,节点清晰且类型完全经过检查。
- LLHD:低级硬件描述,作为代码生成的最后一步生成。
依赖关系
~12–24MB
~355K SLoC