Page 118 - 《软件学报》2020年第10期
P. 118

3094                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

         2.2   输入语言与硬件设计抽象
             ScalaHDL 是一种内嵌于 Scala 语言的硬件描述语言,它被实现成了 Scala 库而不需要修改 Scala 编译器.选
         择 Scala 作为框架输入语言是因为:(1) Scala 是一种多范式的编程语言,既可以支持面向对象编程,也能良好地支
         持函数式编程,提供了更多设计的可能性;(2) Scala 基于 Java 虚拟机运行,可以受益于丰富的 Java 生态.如图 4
         展示了 ScalaHDL 的整体框架,主要分成硬件定义和测试两个模块.ScalaHDL 使用高扩展性、可插拔的模块化
         设计,核心功能实现在 HDLBaseClass 和 SimulationSuite 两个类中(图中红色模块),分别支持硬件的定义和测试.
         而扩展的语言特性,例如新的硬件描述语句语义或者更高的设计抽象则可以实现在 Scala 的 Trait 定义之中(如
         图 4 中浅绿模块所示),只需在硬件定义时指定需要的 Trait 即可使用对应的特性.在 ScalaHDL 中我们实现了
         BasicOps 以支持基本的硬件定义功能,以及通过 Translator 来完成 ScalaHDL 到 Verilog 的翻译.













































                                       Fig.4  The architecture of ScalaHDL
                                            图 4   ScalaHDL 架构

             ScalaHDL 使用 Scala 语言中原生的 Class 作为硬件模块定义的容器,通过继承 HDLBaseClass 并引用
         BasicOps 特性,开发者可以在原生的 Scala 类中使用 BasicOps 中定义的类型、语句和结构来描述硬件设计.
         ScalaHDL 的设计应用了 Lightweight Modular  Staging [48] 的思想,即 ScalaHDL 的翻译通过 Scala 的反射机制,依
         据运行时扫描类定义中实体得到的类型信息,来生成对应的 Verilog 描述.在一个硬件定义类中,会包含两部分代
         码:硬件定义和原生 Scala 语句.翻译时,包含 ScalaHDL 特殊硬件类型的语句会被识别为硬件描述,而原生的
   113   114   115   116   117   118   119   120   121   122   123