Chisel 中的高级参数化手册

Advanced Parameterization Manual in Chisel

这个在凿子库里面

object Module { 

  // returns a new Module of type T, initialized with a Parameters instance if  _p !=None.

  def apply[T<:Module](c: =>T)(implicit _p: Option[Parameters] = None):T

}

我不明白=参数中的符号。它代表什么?

这个例子有两个 = 符号。第一个对应于 By-name 参数:https://docs.scala-lang.org/tour/by-name-parameters.html.

前者很重要,因为 Chisel 中的模块在构建时必须包裹在 Module(...) 中。我们通常使用调用名来完成:

class MyModule extends Module {
  ...
}
// This works!
def func(mod: => MyModule) = {
  val instance = Module(mod) // The module is constructed inside Module(...)
}
func(new MyModule)

// This doesn't work!
def func(mod: MyModule) = {
  val instance = Module(mod)
}
func(new MyModule) // The module is constructed too early, here!

第二个是默认参数:https://docs.scala-lang.org/tour/default-parameter-values.html。主要是方便的东西:

def func(x: Int = 3) = { println(x) }
func(5) // prints 5
func()  // prints 3

(implicit _p: Option[Parameters] = None) 中的 = 正在将默认值 None 分配给参数 _p。这意味着除非另有说明,否则没有 Parameter 实例分配给 _p.

以防万一您询问 (c: =>T) 中的 =>=> 表示第一个参数 c 是对 c 函数的引用=31=] T 的实例,其中 TModule.

的子 class

这里使用了 Scala 的许多惯用特性:函数 Currying、隐式参数、作为该语言的第一个 class 公民的函数。花点时间学习这些东西的语法是值得的。查看 Chisel 的 generator-bootcamp tutorial,特别是第 3.2 和 3.3 节,了解 Chisel 利用 Scala 语法的一些方式