文献综述(或调研报告):
当系统的功耗受到限制时,增强性能意味着降低每一次运算的能耗[1]。摩尔定律的终结意味着这一过程需要更多地通过优化设计而不是缩小晶体管尺寸实现。体系结构的创新一直以来是集成电路技术进步的推动力之一[2],在后摩尔时代将发挥日益重要的作用。目前系统芯片(Soc)和异构计算成为了芯片设计的主流趋势。为了充分利用系统资源,实现高性能计算,异构系统中的不同功能模块常常工作在不同的时钟频率和电压之下,频率和电压根据它们的计算负载动态分配[3]。更加复杂的芯片结构加重了设计的负担,对设计方法和描述语言提出了更高的要求。硬件设计语言需要灵活、高效、参数化地对复杂的器件进行建模,使得设计者可以探索更丰富的芯片架构,寻找更能满足应用需求的解决方案。
当前主流的硬件描述语言(HDL)是Verilog和VHDL,它们早于上世纪80年代提出并基本成型,不具备现代编程语言的许多高级特征(如面向对象,函数式编程,类型推断,元编程等)。程序抽象水平低、代码复用性差,不利于描述功能和逻辑复杂的电路,极大地限制了开发效率。SystemVerilog是Verilog的后续版本,针对逻辑电路的仿真验证方面进行了一系列的优化,加入了随机约束、断言等新的语法,以完善验证功能[4]。尽管SystemVerilog引入了面向对象的概念,但面向对象的特性只能用于电路仿真,不可综合,因此不能直接用于电路设计中;再者,现有EDA工具对SystemVerilog的支持也不够积极,这使得工业界仍然倾向使用更加传统的Verilog进行电路设计。随着系统芯片(Soc)的迅速发展,SystemC[5]作为一种软硬件协同设计语言被寄予厚望。它以C 软件设计语言为基础,在C 中加上硬件类库和仿真核。然而目前SystemC的开发多数用于编写硬件模型,而不是直接开发硬件电路,同样因为目前EDA工具对SystemC的支持不够,与Verilog相比,SystemC综合出来的电路无法得到充分的优化。
此外,为了优化硬件描述语言,还有一系列新的设计语言被提出[6]。一种途径结合了传统描述语言和高级语言,比如Genesis2、JHDL、 HML。它们分别利用Perl、Java和ML来实现组件之间的组织和连接,但最底层的电路组件仍然需要用传统HDL描述。另一途径是使用领域特定语言(DSL),如Esterel、DIL、Bluespec。这些语言可能在某一特定领域(如DSP设计)下非常高效,但由于语法缺乏通用性,不容易扩展到多种类型的设计中。此外,高层次综合(HLS)是构建硬件的另一途径,在FPGA设计中应用广泛[7]。HLS通过算法推断出电路构造,程序本身是对算法的描述而不涉及底层硬件。这种方法的好处是,方便不熟悉硬件原理的软件工程师设计FPGA。但由程序推断生成的电路一般比较复杂,很难满足面积、性能和功耗的要求。
Chisel是加州大学伯克利分校开发的一种开源硬件构建语言。它在Scala语言之上构建了用于硬件描述的类库,所有的描述均在通用编程语言Scala下完成。Chisel经编译后可以得到用于FPGA、ASIC设计的Verilog代码,Verilog代码作为Chisel语言和现有EDA工具的媒介,使得Chisel设计可以无缝接入现有的EDA工具链中,从而扫清了Chisel适用性的障碍。这一点相比于SystemVerilog和SystemC是很大的优势。总而言之,Chisel将现代软件编程语言的优点赋予硬件电路设计,以期实现敏捷高效的硬件设计。
Chisel语言敏捷设计在学术界得到多方面的应用,伯克利研究团队在5年内成功流片11个RISC-V的Soc芯片[8][9],利用Rocket芯片生成器为三个不同架构的学术芯片构建内核。Angie W[10]等人在Chisel基础上构建了DSP器件库,可参数化地构建不同规模的电路,快速实现FFT、CORDIC和FIR滤波器。Farzad F[11]等人利用Chisel语言设计了高度可配置的片上网络生成器,以实现高效率的多核间通信。Stevo B[12]等人利用Chisel语言设计了数字光谱仪(spectrometer),包括滤波器相关性,带宽选择,流水线在内的许多参数均可配置,这归功于Chisel语言高度参数化的特性。Ziqiang L[13]等人设计了用于5G通信的实时同步单元,论文中指出,Chisel在此设计加快了仿真速度,提高了代码重用,缩短了代码长度,对于描述复杂算法非常有利。在上述应用的实例中可以总结出,对于不同领域的电路设计,Chisel均体现出了良好的适应性,且相对于传统设计方法,Chisel语言具有更高的设计效率,在描述复杂算法和逻辑中具有明显的优势。而且这种优化在带来高密度、高复用性的代码的同时,并没有以牺牲性能为代价。国内对Chisel语言展开了初步探索,中科院计算所研究团队[14]利用Chisel开发了标签化的RISC-V芯片,展示了敏捷开发在极大提高编码效率的同时,能达到与传统硬件开打模式相当甚至更优的性能、功耗和面积。需要指出的是,在其中几个研究中均提到了构建生成器(generator)的概念。生成器是高度参数化、可以重新配置的电路模块。生成器在硬件设计中的作用相当于库(library)之于软件设计。设计者能够在很多设计中重复使用先前完成的、经过充分优化并测试过的元件,总而节省大量的开发和验证的时间,提升设计效率。
Chisel语言是加州大学伯克利分校(UCB)RISC-V项目的重要组成部分,包括标量处理器Rocket和超标量乱序执行处理器BOOM等RISC-V处理器均采用Chisel而不是传统的硬件描述语言(如Verilog)描述。RISC-V在近年发展迅速,除了涌现大量的开源和商用处理器之外,UCB也提供了一系列针对RISC-V的开源编译器如GCC、LLVM和开源仿真器,以打造更加成熟的软件生态[15]。RISC-V吸取了UCB在RISC研究上接近40年的经验教训,体系架构更加合理。随着开发者社区的发展壮大和实力雄厚的商业公司参与其中,RISC-V被认为是下一代主流体系架构之一。而对我国而言,开源的架构对于实现自主可控的处理器大有益处。学习Chisel语言是研究RISC-V开源处理器的基础之一,十分具有实践价值。
[1] Shacham O , Azizi O , Wachs M , et al. Rethinking Digital Design: Why Design Must Change[J]. IEEE Micro, 2010, 30(6):9-24.
