Spatial 芯片设计语言是斯坦福 PPL 研究组在特定领域(高级硬件/加速器设计)的研究成果和实践平台。
斯坦福 PPL 是斯坦福计算机科学系下的一个研究实验室,全称是 Pervasive Parallelism Laboratory 普及并行实验室。由著名计算机科学家 Kunle Olukotun 教授和 Christos Kozyrakis 教授共同领导。研究目标: 其核心使命是让并行计算(Parallelism)变得“普及”(Pervasive),即让开发各种并行系统(从多核CPU到大型数据中心)变得像开发串行程序一样简单高效。他们关注的是并行编程的抽象、模型、语言和运行时系统。
关键思想: 他们倡导一种称为 “以领域为中心的计算”(Domain-Centric Computing) 的架构范式。认为未来的计算效率提升不在于通用处理器,而在于为特定领域(如机器学习、科学计算、数据处理)定制专用的领域专用架构(DSA) 和硬件加速器。
-
Spatial 是一种高级硬件构造语言(High-Level Synthesis, HLS Language)。
-
设计目标: 它的目的是让硬件设计师和软件工程师能够用高级的、类似软件的抽象(如函数、面向对象、强大的类型系统)来描述复杂的硬件加速器,然后由编译器自动生成低级的、可综合的硬件描述(如 Verilog/VHDL)。
-
核心特性: Spatial 提供了高层次的抽象,例如:
-
内存层次抽象: 允许程序员声明片上缓存、寄存器文件、流缓冲区等,而无需手动管理数据移动的细节。
-
并行原语: 内置了对流水线(Pipelining)、并行化(Parallelization)等并行模式的支持。
-
面向主机-加速器架构: 天然支持将程序的一部分在主机CPU上运行,另一部分在FPGA或ASIC加速器上运行
Spatial 是一种scala的方言,就是外壳看起来就是scala,语法什么的都满足scala的要求,新增了一些语义概念,用于支持并行计算和芯片设计,所以它只是一个看起来像scala的芯片设计语言,而不是常规意义上的scala可执行的代码。它的代码的含义和执行方式跟常规scala代码有很大的区别。Spatial跟Chisel在很多地方类似。都是采用scala方言的方法。都是可以生成verilog。不过侧重点有所不同。
-
Spatial:算法级/架构级语言
-
关注点: 描述的是计算本身和内存架构。你思考的是“我要做什么计算?数据如何在片外DRAM、片上SRAM和寄存器之间流动?如何并行化这些计算?”
-
抽象对象: 控制器(顺序、并行、流水线)、内存层次(DRAM、SRAM、寄存器文件)、数据流。
-
好比: 你在用高级语言(如Python)规划一个算法的流程图和数据结构。
-
-
Chisel:高级的寄存器传输级语言
-
关注点: 描述的是数字电路在时钟周期内的精确行为。你思考的是“这个寄存器在下一个时钟周期应该锁存什么值?这个组合逻辑如何生成?”
-
抽象对象: 寄存器、连线、多路选择器、状态机。它生成的是高度优化的、可综合的RTL。
-
好比: 你在用C++或Java等强大的系统级语言,精确地实现那个算法,但依然比手写汇编(Verilog)更高效。
-
Chisel 的哲学: “给我更好的工具来建造已知的电路模块。” 它强调可重用性和参数化,底层还是RTL思维。
-
Spatial 的哲学: “告诉我你要算什么,我来帮你自动生成最合适的硬件架构。” 它试图将设计师从RTL细节中解放出来,直接思考架构问题。
spatial 基本上使用了scala语法的壳子,也就是语法结构和浅层的语义,同时利用了scala的宏机制来生成仿真程序和verilog代码。
在网络上 spatial的大本营是 https://github.com/stanford-ppl/spatial-lang
有一个可下载的版本
官网是 spatial-lang.org
手册 https://spatial-lang.readthedocs.io/en/legacy/tutorial.html
但是总体来说,资料很少。
另据中科院香山处理器团队的经验,用chisel生成的verilog代码很难读,后面自己又做了一些加强。估计spatial也会有类似的问题。
另外,不排除将来用spatial来生成chisel. 考虑到ppl希望固化并行编程的结果,而不仅仅是提高设计的抽象层次和提高设计效率,因此目前是直接生成verilog的。
scala有一些比较好的本底,比如很强的静态类型检查,纯函数的支持能力,组合复杂数据结构的能力,编译时宏的设计能力,使得它成为高正确性要求编程的首选。
c++也有类似的能力,但是由于历史包袱很重,因此,语法变得极其复杂难懂,且不简练。需要完成类似的功能,需要非常深的理解和魔术般的技巧。
但是scala的主要问题是,生态很弱,编译,下载,库,什么的,都不大方便。国内虽然有一些镜像,比如阿里,清华的镜像,但是总的来说,很难做到开箱即用。这大大影响了这种语言以及相关工具的采用和发展。
总的说来,spatial不论是其语言或者是其思想,都是值得关注的一个方向,是很有潜力的一个方向。