在我的代码中,我定义了条件输出:
class EccGenerate[D <: Data](data: D, doubleBit : Boolean = true) extends Module {
val eccBits = calcCodeBits(data.getWidth)
val io = IO(new Bundle {
val in = Input(data.cloneType)
val out = Output(UInt(eccBits.W))
val par = if (doubleBit) Some(Output(Bool())) else None
})
尝试在par输出上使用:=运算符失败,因为它并不总是输出。使用条件输入时,我将使用io.par.get()检索输入的当前值,是否可以使用相应的原语,运算符或函数调用来设置条件输出的值?
问题是您无法连接到par
,因为它的类型是Option[Bool]
,并且没有为:=
定义Option
。如果选项包含某些内容,则需要打开包装并分配到Bool
内部。
执行此操作的功能编程方式为:
io.par.foreach(_ := foo)
如果需要,您也可以对其进行详细说明:
io.par match {
case Some(a) => a := foo
case None =>
}
if
语句也将起作用:
if (par.nonEmpty) {
io.par.get := foo
}
您基本上需要检查io.par
是Some
还是None
,有几种方法可以做到这一点:
if (io.par.isDefined) {
io.par.get := ...
}
io.par match {
case Some(port) => port := ...
case None => // Do nothing
}
io.par.foreach(_ := ...)
根据我的工作,我倾向于使用#2或#3,但是对于不熟悉Scala和函数式编程的人来说,#1可能更清楚。
有关更多信息,请查看选项的API文档:https://www.scala-lang.org/api/2.12.10/scala/Option.html