如何写入条件输出

How do I write to a conditional output

在我的代码中,我定义了一个条件输出:

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() 来检索输入的当前值,是否有相应的原语、运算符或函数调用可用于设置条件输出的值?

你基本上需要检查 io.parSome 还是 None,有几种方法可以做到这一点:

  1. 势在必行
if (io.par.isDefined) {
  io.par.get := ...
}
  1. 模式匹配
io.par match {
  case Some(port) => port := ...
  case None => // Do nothing
}
  1. 函数式编程(大概)
io.par.foreach(_ := ...)

根据我正在做的事情,我倾向于选择 #2 或 #3,但对于不太熟悉 Scala 和函数式编程的人来说,#1 可能更清楚。

有关详细信息,请查看选项的 API 文档:https://www.scala-lang.org/api/2.12.10/scala/Option.html

问题是您无法连接到 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
}