我尝试为我的项目实现模块。模块粗略结构如下:
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:连接到输出信号,表示故意不驱动该信号。 这是否意味着在初始阶段没有被驱动,但是,当某些情况发生时它可以被驱动?
或者它不是一直驱动的? ig:
io.out.debugOption := DontCare
when (condition){ io.out.debugOption := true}
(3)应用DontCare的价值是什么?
queue.io.enq.valid := DontCare
我是Chisel的初学者。对不起,如果我问的问题很简单。
答案 0 :(得分:1)
一般情况下:Chisel报告未连接的IO不是最高级别的错误,以便更容易出错。 DontCare
是一种在您认为自己真的不希望信号连接到某些内容时能够抑制这些错误的方法。
具体地 (1)子模块的每个IO应该连接到某个东西,但它不必是另一个IO,它可以是文字值或父模块的某个其他组件。
(2)DontCare
允许开发人员保持未连接的线路并抑制错误。通常这是为了向后兼容,或者是某些具有您需要的功能的子模块,但有些则不是。现代更好的做法是在具有这些属性的子模块中使用可选的IO信号。
您的调试示例应该可以正常工作,但这样做可能会更好
而是io.out.debug := false.B
。 DontCare会将信号保持在一个不确定的状态,这很容易成为现实,这很容易产生不良后果。
(3)如前所述,DontCare让开发人员承认可能没有设置信号。
话虽如此,有一种情况是使用Decoupled
模块使用的Queue
,其中信号可能有一些边缘情况,其中它是未连接的,但这种情况确实发生在实际情况中电路的操作。通常最好给它一个字面值的初始赋值,随后使用该信号将覆盖其他条件的初始赋值。这称为“最后连接语义”,即最后一次分配胜利。
如果这太模糊,也许您可以提供一些代码示例和一个小单元测试来说明问题。