查看原文
其他

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

壁仞科技研究院 壁仞科技研究院 2021-09-19


摘要

    后摩尔时代,芯片架构向专用化的方向发展,打造一套统一的编译器变得势在必行,顶层抽象,底层优化,然后映射到各个不同的专用芯片;同理,在芯片设计领域,顶层支持多种硬件表达,底层抽象、优化、映射到不同的芯片架构变得十分可能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



     往期推荐

1、图神经网络加速器深度调研(上)

2、图神经网络加速器深度调研(中)

3、图神经网络加速器深度调研(下)



关于壁仞科技研究院


壁仞科技研究院作为壁仞科技的前沿研究部门,旨在研究新型智能计算系统的关键技术,重点关注新型架构,先进编译技术和设计方法学,并将逐渐拓展研究方向,探索未来智能系统的各种可能。壁仞科技研究院秉持开放的原则,将积极投入各类产学研合作并参与开源社区的建设,为相关领域的技术进步做出自己的贡献。

扫码关注我们


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存