未连接的电线疑惑

Unconnected wires doubts

我尝试为我的项目实现该模块。模块大致结构如下:

class TOP extend Module{
  val io = IO(new Bundle {some IO intend to connect to other module })

  val queue = Module (new Queue(UInt(32.W), 5) )//I instantiate queue for special purpose for my design, and I do not connect the queue to other

  when(condition1){
    queue.io.enq.valid := true.B
    queue.io.enq.bits  := 5.U
  }
  ........
  when(conditionN){
    queue.io.deq.ready := true.B
    val retrieve data out:= queue.io.deq.bits 
  }  
}

当我 运行 它时,我遇到了与未连接电线相关的问题。

阅读页面后 (https://github.com/freechipsproject/chisel3/wiki/Unconnected-Wires)。 页面有些问题我想不通

(1) 每个模块的IO都必须连接其他模块的其他IO吗?

(2) DontCare:连接到输出信号,表示该信号有意不被驱动。 是不是初期不驱动,但是遇到什么情况就可以驱动?

还是一直没驱动? 搞笑:

io.out.debugOption := DontCare
when (condition){ io.out.debugOption := true}

(3) 应用 DontCare 的价值是什么?

queue.io.enq.valid := DontCare

我是 Chisel 的初学者。对不起,如果我问的问题很简单。

总的来说:Chisel 将不在顶层的未连接 IO 报告为错误,以便更难出错。 DontCare 是一种抑制这些错误的方法,如果您认为您真的不想将信号连接到某物。

具体来说 (1) sub-module 的每个 IO 都应该连接到某个东西,但不必连接到另一个 IO,它可以连接到字面值或父模块的其他组件。

(2) DontCare 允许开发人员不连接电线并抑制错误。这通常是为了向后兼容,或者可能是某些 sub-module 具有您需要的功能,但也有一些您不需要的功能。现代更好的做法是在 sub-module 中使用具有这些属性的可选 IO 信号。

您的调试示例应该可以运行,但直接执行可能会更好 io.out.debug := false.B 代替。 DontCare 会使信号处于不确定状态,这很可能是真实的,这很容易产生不良后果。

(3) 如前所述,DontCare 让开发人员承认可能未设置信号。

也就是说,在使用 Queue 模块使用的 Decoupled 时存在一种情况,其中信号可能有一些未连接的边缘情况,但这种情况确实发生了在电路的实际运行中。通常最好给它一个字面值的初始赋值,后续使用该信号将覆盖其他条件的初始赋值。这称为 "last connect semantics",即最后一次分配获胜。

如果这太模糊,也许您可​​以提供更多的代码示例和一个小的单元测试来说明问题。