MLIR编译技术应对硬件设计挑战?—初探CIRCT项目

MLIR编译技术应对硬件设计挑战?—初探CIRCT项目

  • 发布时间:2021-05-08 11:11
  • 访问量:

【概要描述】CIRCT项目是基于MLIR编译技术打造的EDA设计工具,旨在硬件设计领域“集百家开源工具之所长”通过编译技术构建硬件设计工具的模块化基础设施。本文将介绍CIRCT项目的技术框架以及一些基本实现。

MLIR编译技术应对硬件设计挑战?—初探CIRCT项目

【概要描述】CIRCT项目是基于MLIR编译技术打造的EDA设计工具,旨在硬件设计领域“集百家开源工具之所长”通过编译技术构建硬件设计工具的模块化基础设施。本文将介绍CIRCT项目的技术框架以及一些基本实现。

  • 分类:研究院
  • 作者:壁仞科技研究院
  • 来源:
  • 发布时间:2021-05-08 11:11
  • 访问量:
详情

摘要

    后摩尔时代,芯片架构向专用化的方向发展,打造一套统一的编译器变得势在必行,顶层抽象,底层优化,然后映射到各个不同的专用芯片;同理,在芯片设计领域,顶层支持多种硬件表达,底层抽象、优化、映射到不同的芯片架构变得十分可能CIRCT项目正是基于MLIR编译技术打造的全新的统一的EDA (Electronic Design Automation)框架,类似于软件中的TensorFlow或者PyTorch,旨在为EDA设计工具提供完整的灵活可配的基础设施,通过层层抽象的方式在一套框架中支持多种硬件设计模式。同时,CIRCT项目与MLIR相结合,做到硬件设计和软件编译的“同源”,实现软件生态和硬件设计生态的一致化。目前,CIRCT项目仍处于探索阶段。

 

CIRCT背景介绍

 

CIRCT[1]项目的全称是Circuit IR Compiler and Tools,基于电路中间表示的编译器和设计工具,将DSL/IR/Compile等软件开发的思想应用到开源硬件设计领域(可参考知乎文章Google的『泛芯片』科技蓝图),加速硬件设计的流程,同时也寻求解决EDA工具的零碎化及封闭化的缺陷,培育统一的硬件设计社区。目前,CIRCT项目处于探索阶段,主要集中于底层抽象IR的定义和开发。关于MLIR相关技术的介绍可参考往期公众号文章MLIR多层编译框架实现全同态加密的讨论[3]。

在目前的EDA开源工具方面,有不少出色的工作,比如综合工具Yosys,Verilog仿真工具VERILATOR, 新的硬件设计工具CHISEL, 基于Python的硬件设计工具Magma等等。但是这些开源硬件设计工具独自成生态,彼此独立不兼容,导致了设计工具的碎片化。如果将这些设计力量统一起来打造一个统一的开源的硬件设计工具,其前景令人充满想象。为此,Christ等人推出了基于MLIR的开源的EDA框架CIRCT,其核心思想是将软件的编译模式搬移到硬件设计中,顶层重用MLIR的高级抽象IR,底层重新引入新的描述电路IR(Verilog/VHDL也是描述电路的IR),打造具有模块化特点的基础设施,能够更好地适配到各种硬件设计中,比如CPU,GPU,CPU+xPU等。

在ASPLOS 2021大会上,Chris Lattner博士做了The Golden Age of Compiler Design in an Eraof HW/SW Co-design[4] 的演讲,阐述了异构计算黄金时代的今天,也迎来了编译器的黄金时代。文中提到了针对新硬件架构下的硬件设计工具,需打破现有的“碎片化”状态,打造统一的硬件设计框架。

在机器学习硬件领域,向着专用化程度越来越高的方向发展,如图1所示,这样将硬件设计推向了两个维度,一个是固有的处理器,如CPU及GPU等;一个是专用化的处理器,如FPGA及ASIC等。在这两个维度中,分散着针对不同环节的开发工具,如图2所示,而CIRCT项目目的在于统一这些零碎的工具,将其融合到一个统一的EDA框架中。从MLIR整个大的生态来看,基于MLIR的软件框架可以涵盖软件开发工具,如图2中红线的左半部分;CIRCT可以涵盖硬件设计工具,如图2中红线的右半部分。MLIR将软件设计和硬件设计彼此关联起来。

 

图1 机器学习硬件分布图[6]

 

图2 软件开发工具及硬件设计工具[6]

 

CIRCT项目每周举行一次例会,邀请各个领域的技术达人进行分享,努力从更多的开源项目中汲取力量,这也就是集百家工具之所长。会议记录及演讲详见CIRCT Weekly Discussion。

 

CIRCT软件框架的介绍

 

CIRCT软件栈如图6所示,这是目前构想的软件栈,尚未开发完成。软件栈分为两部分,蓝色部分表示的是MLIR的基础设施,灰色部分表示的是CIRCT项目独有的基础设施,从图中可以看出整个MLIR的基础设施具有非常好的复用性,同时整个软件栈也体现了MLIR层层lowering的特点。本文主要关注于灰色部分,灰色部分也包含目前CIRCT中的所有方言,但这些方言目前处于相对零碎的状态,没有统一起来。

 

图3 CIRCT项目的软件栈[6]

 

1、Handshake. Handshake方言主要描述独立的非同步的数据传输,数据传输的通道基于FIFO实现。Handshake方言中定义了握手模型和控制逻辑,比如fork,join,mux及demux等,如图4所示,通过这些抽象的Op可以表示出程序中常用到的for循环逻辑,如图5所示。该项工作主要由Xilinx的研究人员开发。

 

图4 Handshake方言中的主要Op[7]

 

图5 Handshake表示for循环结构[7]

 

2、HIR: An MLIR-based Intermediate Representation for Hardware Accelerator Description。HIR是最新加入到CIRCT项目中,由印度理工的研究人员开发,主要在高层次描述时序电路的行为,比如带有延迟的计算、流水线、状态机,同时也有具体调度行为和并行计算的表示等。延迟信息的表示可以参考图6中的Op: hir.delay.

 

图6 HIR中矩阵乘的表示[8]

 

3、ESI (Elastic Silicon Interconnect): 主要是表示片上和片外的互联关系,用于实现点对点双向的数据流通路,数据流通路中含有数据类型,数据类型支持所有MLIR中定义的类型。这些数据类型可以通过接口提供给软件的API,high-level的开发者可以直接获取到数据通路上的数据类型,打破了硬件描述语言中的wire-level protocol和high-level编程的统一。ESI项目源自于微软,目前是CIRCT项目中的一个方言。

4、FIR-RTL选用来自Chisel编译器的IR,是比Verilog更高一级的表达。

5、RTL/Seq/Comb RTL用于描述module和端口,Seq描述时序电路,comb描述组合电路,目前处于开发阶段。

6、LLHD LLHD是受LLVM启发开发的针对硬件设计RTL代码的多层级IR表示。整个LLHD工程分为行为级的表示和结构级的表示。构想的设计中前端支持目前多种硬件语言,比如Chisel,MyHDL,SystemVerilog等,后端可以加入不同硬件厂商的综合工具,最终输出网表级别的IR,设计的流程如图9所示。另外,LLHD对于CIRCT的价值还在于能够基于LLHD的IR实现仿真。在目前的实现中,LLHD的前端只支持SystemVerilog。

 

图7 LLHD设计的flow[9]

 

CIRCT方言转换

 

图8表示了各个方言之间的转换关系。从图中可以看出,目前支持两条到Verilog的转换路径:

图8 各个方言之间的转换关系[10]

 

1、输入为FIR或者Handshake:具体的转换路径为FIR -> high FIRRTL -> mid FIRRTL -> low FIRRTL -> Verilog

2、输入为SystemVerilog:具体的转换路径为SystemVerilog -> behavior LLHD -> structure LLHD ->LLHD-sim

 

CIRCT项目工程中test文件夹提供了查看各个dialect之间转换的窗口,下面以conversion和EmitVerilog两个文件为例介绍Handshake->FIRRTL->Verilog的转换路径。

1、Conversion: 测试各个方言之间的转换。以Handshake转换为FIRRTL代码为例,将Handshake中的branch操作转换为FIRRTL的实现。图9中上半部分代码为Handshake的表达,%arg0表示为输入的数据,%arg1表示为输入的控制逻辑,如果控制逻辑为false,返回%arg0以及对应的控制逻辑;下半部分代码为FIRRTL的表达。执行命令为:circt-opt-lower-handshake-to-firrtl-split-input-file test_branch.mlir。

 

 

图9 Handshake到FIRRTL的转换

 

2、EmitVerilog: 将各个方言转换为Verilog代码输出。图10表示由FIRRTL到Verilog代码的转换。执行命令为:circt-translate firrtl-dialect.mlir -emit-verilog。

 

图10 FIRRTL到RTL代码的转换

 

总结与思考

 

CIRCT项目是MLIR生态中一个非常具有启发性的项目,将编译技术应用到硬件设计中,颠覆了我们对传统硬件设计工具的认识,寻求利用编译技术统一硬件设计工具,打造EDA框架。同时,CIRCT项目也为MLIR的生态拼上了硬件设计的板块,让人对MLIR整个生态充满期待,但不得不说CIRCT项目宏大,充满挑战,目前还处于起步阶段,聚焦在底层IR的抽象表达,全线打通还有很长的路要走。当下,对于电路IR的抽象存在各种挑战,新的IR抽象是否能够完备地描述电路行为,是否能够解决现有Verilog在硬件描述方便的缺陷,比如学习门槛高,代码跟踪困难等局限;未来,能否将芯片验证及芯片设计方法学引入到CIRCT中,能否加快芯片设计和验证的周期。CIRCT项目征途漫漫,令人期待。

由于水平有限,文中存在不足的地方请各位读者批评指正,也欢迎大家一起参与我们的讨论。

 

参考文献

 

1、https://github.com/llvm/circt

2、https://mlir.llvm.org/

3、https://www.birentech.com/news/77.html

4、https://www.bilibili.com/video/BV1mi4y1A7ji

5、https://basicmi.github.io/AI-Chip/

6、Applying Circuit IR Compilers and Tools (CIRCT) to ML Applications, Mike Urbach, MLSys Chips And Compilers Symposium 2021

7、https://drive.google.com/file/d/1UYQAfHrzcsdXUZ93bHPTPNwrscwx89M-/view

8、https://arxiv.org/pdf/2103.00194.pdf

9、LLHD: A Multi-level Intermediate Representation for Hardware Description Languages

10、https://github.com/llvm/circt/blob/main/docs/GettingStarted.md

近期文章

流体力学与物理导引神经网络

流体力学与物理导引神经网络

现代科学中众多复杂的关键应用依赖着对流体运动的精确预测。然而,由于流体力学方程数值求解的复杂性,基于传统数值方法的高分辨率长周期数值模拟运算量大且难以保证数值稳定性。本文将深入介绍PINN方法在流体计算中的应用并分析其与传统数值方法的差别。
2021-10-25
物理导引神经网络方法分析

物理导引神经网络方法分析

随着GPU能力的提升,支撑深度学习的软硬件生态得到了快速发展。通过深度学习来解决科学计算问题成了一种趋势,其中用深度学习来求解偏微分方程的方法也逐渐兴起。尤其引人注意的是一种称为物理导引神经网络的方法,其为科学计算领域注入了新的活力。
2021-10-18

联系我们

这是描述信息

招贤纳士

公众号二维码
这是描述信息

 版权所有   ©   上海壁仞科技有限公司   |    沪ICP备19047354号