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
的实例,其中 T
是 Module
.
的子 class
这里使用了 Scala 的许多惯用特性:函数 Currying、隐式参数、作为该语言的第一个 class 公民的函数。花点时间学习这些东西的语法是值得的。查看 Chisel 的 generator-bootcamp tutorial,特别是第 3.2 和 3.3 节,了解 Chisel 利用 Scala 语法的一些方式
这个在凿子库里面
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
的实例,其中 T
是 Module
.
这里使用了 Scala 的许多惯用特性:函数 Currying、隐式参数、作为该语言的第一个 class 公民的函数。花点时间学习这些东西的语法是值得的。查看 Chisel 的 generator-bootcamp tutorial,特别是第 3.2 和 3.3 节,了解 Chisel 利用 Scala 语法的一些方式