预告 | CIRCT 系列教程

大家好,目前第一个系列教程Dataflow 芯片和编译器从入门到进阶已经阶段性完结。下周开始,我们将开启无限智域(1nfinite)社区第二个技术分享系列分享活动 — “CIRCT 系列教程”。本系列共 10 期,将基于碎片化开源 EDA 软件栈的现状,由浅入深地讨论 CIRCT 当下应用及未来规划,欢迎感兴趣的小伙伴们加入 1nfinite 社区,与我们共同交流探讨。

预告 主题
第 1 期 现状:碎片化的开源 EDA 软件栈
第 2 期 CIRCT - 基于 MLIR 的电路编译器和工具链
第 3 期 CIRCT 关键概念:方言(Dialect)
第 4 期 SystemVerilog 在 CIRCT 上的初步探索
第 5 期 Chisel 与 CIRCT 的无缝集成
第 6 期 硬件仿真的两大范式:Cycle-based VS Event-driven
第 7 期 CIRCT 与 Dataflow 加速:突破冯诺依曼架构的新视角
第 8 期 CIRCT 中的形式化验证利器:BMC & LEC
第 9 期 Python 与 CIRCT 的融合:HLS 新视角
第 10 期 CIRCT 愿景及未来规划

一、现状:碎片化的开源 EDA 软件栈

简介:C/C++等编程语言已经由开源的 llvm 和 gcc 统一了编译器软件栈框架,适配各种不同的硬件平台,如将 C/C++、Fortran、Haskell 转换成 LLVM IR,再适配到 X86、PowerPC、ARM;然而,目前开源的硬件编译器却没有统一的平台,即缺乏类似于 LLVM IR 的中间层来适配不同的前后端。这导致 EDA 工具之间难以有效集成,并对定制化设计造成了一定的限制。本文将总结和对比各类开源 EDA 软件栈的优缺点,以及探讨为了适应未来 DSA 的快速发展,我们需要什么样的开源 EDA 软件栈。

关键字:RTL 仿真,形式化验证,High Level Synthesis,RTL Synthesis

二、CIRCT - 基于 MLIR 的电路编译器和工具链

简介:CIRCT(Circuit IR Compilers and Tools)项目致力于将 MLIR 和 LLVM 开发方法应用于硬件设计工具领域,拥有可重用的模块化基础设施,为加速器(DSA)等定制硬件提供一个统一、模块化的开发环境。CIRCT 作为一个基于 MLIR(多层次中间表示)的开源工具,通过方言层优化,降低方言到更为低级的方言及降低到特定于目标的方言等技术,从而促进特定加速器目标的代码生成,解决硬件设计复杂性,加快开发流程。

关键字:CIRCT,加速器,MLIR,LLVM

三、CIRCT 关键概念:方言(Dialect)

简介:方言是 CIRCT 项目中最基本、最关键的概念,因此本文将首先介绍什么是方言。为了让读者能更清晰地理解方言以及后续文章的开展,本会还会详细介绍部分方言,以及这些方言在整个 CIRCT 框架中扮演什么角色。在了解这些方言之后,本文将暂时跳出 CIRCT,进入到 MLIR 的相关内容;随后会简要介绍一下 MLIR 能做什么以及为工业界带来了什么样的变化;最后再回到 CIRCT。

关键字:Dialect,firrtl,moore,seq,comb,hw,arc,sv,llhd,MLIR

四、SystemVerilog 在 CIRCT 上的初步探索

简介:本文将介绍如何使用 CIRCT 工具编译 Verilog/SystemVerilog 代码,经过一系列流程最终生成仿真文件。由于 SV 本身的复杂性以及接入 CIRCT 生态并没有多久,并且相关代码贡献者仅来自 CIRCT 社区部分上游开发者以及 Terapines 开发人员。故而当前并不能十分完善的支持 SV 的所有特性。但仍能通过一些简单的可综合的实例讲解每个步骤,及所使用到的 pass,帮助读者熟练运用 CIRCT 工具处理 SV 代码。

关键词:Verilog/SystemVerilog,moore,综合,仿真,形式化验证

五、Chisel 与 CIRCT 的无缝集成

简介:本文将介绍如何使用 CIRCT 工具和 arcilator 工具从一份 Chisel 代码开始,经过一系列流程最终生成可在 FPGA 或 ASIC 上运行的硬件设计。本文还将探讨 Chisel 硬件构造语言、FIRRTL 中间表示、综合、仿真、形式化验证和代码生成等关键概念。并通过实例讲解每个步骤,及所使用到的 pass,帮助读者熟练运用 CIRCT 工具链处理 Chisel 代码。

关键词:chisel,firrtl,综合,仿真,形式化验证,代码生成,HGLDD

六、 硬件仿真的两大范式:Cycle-based VS Event-driven

简介:仿真在硬件领域是不可或缺的一个环节,它与验证密不可分。本文将对比两种主要的仿真范式:cycle-based(基于时钟周期)和 event-driven(基于事件驱动)。我们将分析两者的优缺点及适用场景,并介绍 CIRCT 框架中的两款仿真器 arcilator 和 llhd-sim,它们分别是 cycle-based 和 event-driven 模型。

关键字:cycle-based,event-driven,arcilator,verilator,同步,异步,时钟域

七、CIRCT 与 Dataflow 加速:突破冯诺依曼架构的新视角

简介:本文将介绍数据流(Dataflow)架构的基本概念,并与传统的冯诺依曼架构进行对比,揭示两者在并行计算和数据访问模式上的根本差异。以及 Dataflow 架构现有的应用场景和未来可能的应用方向,如使用 Dataflow 芯片进行 RTL 仿真。同时,我们还将分析基于 Dataflow 架构的 RTL 仿真有何优缺势,通过对比传统的 RTL 仿真性能数据,从实践出发验证 Dataflow 芯片加速 RTL 仿真的可行性。

关键字:Dataflow 架构,冯诺依曼架构,并行化,handshake,Tenstorrent

八、CIRCT 中的形式化验证利器:BMC & LEC

简介:本文将重点介绍 CIRCT 框架中的两种形式化验证工具:BMC(Bounded Model Checking)和 LEC(Logical Equivalence Checking)。通过简单实例,详细阐述 BMC 和 LEC 的执行流程,并对比两种工具在验证能力和适用场景上的差异。另外,本文还将介绍 SMT(Satisfiability Modulo Theries)方言,旨在为表达 SMT 问题提供的统一接口,并说明与直接打印 SMT-LIB 格式或输出到 Z3 求解器相比有什么优势。最后,本文将探讨基于 CIRCT 如何构建自定义的形式化验证工具。

关键字:形式化验证,JIT,SMT,SMT-LIB Printer,Z3,btor2sim

九、Python 与 CIRCT 的融合:HLS 新视角

简介:本文将探讨如何利用 Python 解释性语言与 CIRCT 工具链的强大组合,实现 HLS 流程,从而将 Python 代码转换为可在 FPGA 或 ASIC 上运行的硬件电路描述。本文还将介绍 PyCDE(Python CIRCT Design Entry API),这是一个用于 FPGA 设计和验证的 Python API。以及 ESI(Elastic Silicon Interconnect) Dialect,用于辅助加速器系统构建。结合二者,读者可以轻松地使用 Python 与 CIRCT 进行交互,构建硬件设计。

关键词:PythonCDE,python binding,FPGA, ESI,AI 加速器

十、 CIRCT 愿景及未来规划

简介:CIRCT 项目本身是 LLVM 开源社区下的实验性的项目,致力于解决开源 EDA 工具碎片化问题与加快加速器设计。因此在 CIRCT 项目的愿景/未来规划中,希望能在同一框架中支持多种不同的硬件设计模式,如生成器、HLS、原子事务等;提高 CIRCT 工具质量,如缩短编译时间、增强可用性和强调重用性;根据需求增添方言或划分多个层级;鼓励社区参与,通过开源的方式来推动项目的发展,并通过社区的反馈和贡献,不断改进 CIRCT 工具等等。

关键词:基于数据流的多核编程,锁存器,碎片化,加速硬件设计

2 Likes