未连接的电线疑惑
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",即最后一次分配获胜。
如果这太模糊,也许您可以提供更多的代码示例和一个小的单元测试来说明问题。
我尝试为我的项目实现该模块。模块大致结构如下:
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",即最后一次分配获胜。
如果这太模糊,也许您可以提供更多的代码示例和一个小的单元测试来说明问题。