XLS:加速硬件合成

2020-09-03 02:27:00

XLS(加速硬件合成)项目旨在通过软件风格方法实现硬件IP的快速开发,该硬件IP还可以作为高效的主机软件运行。

XLS实现了一个高级综合(HLS)工具链,它从灵活的、高级的功能描述中生成可综合的设计。它是完全开源的:Apache2通过GitHub许可和开发。

XLS在Google内部用于从构建块/库生成前馈管道,这些例程/库可以轻松地重定目标、重用和以延迟不敏感的方式组合。

XLS并发进程的实现是以通信顺序进程(CSP)方式实现的,它允许管道彼此通信并随着时间的推移进行诱导,目前还没有提供,但正在进行积极的工作。

XLS仍处于试验阶段,正在快速开发,并不是官方支持的Google产品。预计会出现错误和锋利的边缘。请通过试用、报告错误并让我们知道您的想法来帮助我们!

注意:XLS库的二进制发行版目前不可用,但我们希望通过持续集成来启用它们,请参阅此问题。

以下说明适用于Ubuntu20.04(焦点)Linux发行版。请注意,我们首先假设已经安装了Bazel。

#遵循Bazel安装说明:#https://docs.bazel.build/versions/master/install-ubuntu.html##之后我们观察到:$bazel--versionbazel3.2.0$sudo apt install python3-dev python3-distutils python3-dev libtinfo5#py_binary当前假定它们可以引用/usr/bin/env python#,即使Ubuntu20.04没有‘python`,只有`python3`。#参见https://github.com/bazelbuild/bazel/issues/8685$mkdir-p$HOME/opt/bin/$ln-s$(哪个python3)$HOME/opt/bin/python$ECHO';导出路径=$HOME/opt/bin:$path';>;>;~/.bashrc$source~/.bashrc$Bazel test-c opt...

~$git克隆https://github.com/google/xls.git~$CD xls~/xls$docker内部版本。#执行优化的构建和测试。

导航新的代码库可能会令人望而生畏;下面的描述提供了重要目录及其预期组织/用途的高级视图,并与此XLS堆栈图中的组件相对应:

Dependency_Support:加载、构建和公开XLS外部依赖项的Bazel目标的配置文件。

构建:构建创建XLS工件的宏;例如,将DSL转换为IR,为DSL代码创建测试目标,等等。

Codegen:Verilog AST(Vavast)支持生成Verilog/SystemVerilog操作和FSM。Vavast是由我们称为生成器的组件(例如,PipelineGenerator、SequentialGenerator for FSM)从XLS IR翻译而来的。

常见:在标准库用法之上添加的基本功能。通常,只要有可能,我们都会使用基本构造的简约版本。

Contrib/xlscc:实验性的C++语法支持,目标是由Google的姐妹团队开发的XLS IR(DSLX的替代路径),与XLS项目的其余部分共享相同的开源/测试流程。对于拥有现有C++HLS代码库的团队可能特别感兴趣。

DATA_STRUCTURES:XLS中使用的扩充标准库的通用数据结构;例如BDDS、UNION FIND、MIN CUT等。

DELAY_MODEL:描述、描述和插入目标后端进程上XLS IR操作的数据延迟的功能。已经特征化的描述放在xls/DELAY_MODEL/MODERS中,可以通过命令行标志来引用。

DSLX:模仿Rust的DSL(称为DSLX),同时是具有面向硬件功能的不可变的表达式语言数据流DSL;例如,任意位宽、完全固定大小的对象、完全可分析的调用图。XLS团队发现,与假设冯·诺伊曼式计算的语言相比,数据流DSL非常适合描述硬件。

Dslx/fuzzer:一个全栈多进程Fuzzer,它在DSL级别生成程序,并交叉比较不同的执行引擎(DSL解释器、IR解释器、IR JIT、代码生成的Verilog模拟器)。其设计使其可以轻松地同时在群集中的不同节点上运行,并积累共享结果。

IR:XLS IR定义、文本解析器/格式化程序以及抽象计算和执行引擎的设施(IR解释器,JIT)。

模块:硬件构建块DSLX&34;库(在DSLX标准库之外),可以在更广泛的设计中轻松重用或实例化。

网表:解析/分析/解释网表级别描述的库,通常在简单的结构化Verilog中给出,带有关联的单元库。

通道:在调度/代码生成之前,作为优化的一部分在XLS IR上运行的通道。

调度:调度算法决定在计时设计中何时执行操作(例如,哪个流水线阶段)。

求解器:将XLS IR转换为SMT求解器输入,以便可以在XLS计算上运行正式校样;例如,XLS IR和网表描述之间的逻辑均衡检查。

合成:封装后端合成流的接口,以便工具可以重定目标,例如在ASIC和FPGA流之间。

工具:通过命令行界面以分解的方式使用XLS系统及其库的许多工具。

有关XLS的讨论-开发、调试、使用和任何其他内容-应该转到xls-dev邮件列表。