条件批量连接 <>
Conditional Bulk Connection <>
我想对双向总线进行有条件的批量连接,概念如下。
val io = IO(new Bundle {
val master = Decoupled(UInt(8.W))
val slave0 = Flipped(Decoupled(UInt(8.W)))
val slave1 = Flipped(Decoupled(UInt(8.W)))
val select = Input(Bool())
})
when (select) {
io.slave0 <> io.master
io.slave1 <> some_null_decoupled
}.otherwise {
io.slave1 <> io.master
io.slave0 <> some_null_decoupled
}
这比必须单独描述 io.master.ready
、io.slave0.bits
、io.slave0.valid
、...等信号的逻辑更清晰。
是否有类似的语法可以使用?当我在我的代码中尝试这样做时,我收到了很多 firrtl.passes.CheckInitialization$RefNotInitializedException
消息。
我怀疑问题出在 some_null_decoupled
的描述上。除了缺少 some_null_decoupled
这一事实之外,这看起来很正常。以下对我来说很好用(使用 Chisel 3.1.6):
import chisel3._
import chisel3.util._
class ConditionalBulkConnect extends Module {
val io = IO(new Bundle {
val master = Decoupled(UInt(8.W))
val slave0 = Flipped(Decoupled(UInt(8.W)))
val slave1 = Flipped(Decoupled(UInt(8.W)))
val select = Input(Bool())
})
val some_null_decoupled = Wire(Decoupled(UInt(8.W)))
some_null_decoupled.ready := false.B
when (io.select) {
io.slave0 <> io.master
io.slave1 <> some_null_decoupled
}.otherwise {
io.slave1 <> io.master
io.slave0 <> some_null_decoupled
}
}
object ConditionalBulkConnectTop extends App {
chisel3.Driver.execute(args, () => new ConditionalBulkConnect)
}
这有什么帮助吗?否则您能否提供更多信息,例如 some_null_decoupled
的实现和 Chisel 的版本?
我想对双向总线进行有条件的批量连接,概念如下。
val io = IO(new Bundle {
val master = Decoupled(UInt(8.W))
val slave0 = Flipped(Decoupled(UInt(8.W)))
val slave1 = Flipped(Decoupled(UInt(8.W)))
val select = Input(Bool())
})
when (select) {
io.slave0 <> io.master
io.slave1 <> some_null_decoupled
}.otherwise {
io.slave1 <> io.master
io.slave0 <> some_null_decoupled
}
这比必须单独描述 io.master.ready
、io.slave0.bits
、io.slave0.valid
、...等信号的逻辑更清晰。
是否有类似的语法可以使用?当我在我的代码中尝试这样做时,我收到了很多 firrtl.passes.CheckInitialization$RefNotInitializedException
消息。
我怀疑问题出在 some_null_decoupled
的描述上。除了缺少 some_null_decoupled
这一事实之外,这看起来很正常。以下对我来说很好用(使用 Chisel 3.1.6):
import chisel3._
import chisel3.util._
class ConditionalBulkConnect extends Module {
val io = IO(new Bundle {
val master = Decoupled(UInt(8.W))
val slave0 = Flipped(Decoupled(UInt(8.W)))
val slave1 = Flipped(Decoupled(UInt(8.W)))
val select = Input(Bool())
})
val some_null_decoupled = Wire(Decoupled(UInt(8.W)))
some_null_decoupled.ready := false.B
when (io.select) {
io.slave0 <> io.master
io.slave1 <> some_null_decoupled
}.otherwise {
io.slave1 <> io.master
io.slave0 <> some_null_decoupled
}
}
object ConditionalBulkConnectTop extends App {
chisel3.Driver.execute(args, () => new ConditionalBulkConnect)
}
这有什么帮助吗?否则您能否提供更多信息,例如 some_null_decoupled
的实现和 Chisel 的版本?