如何在 I/O 端口中使用 chisel3.experimental.ChiselEnum?
How to use a chisel3.experimental.ChiselEnum in an I/O port?
考虑这段代码:
import chisel3.experimental.ChiselEnum
object MyEnum extends ChiselEnum {
val A, B = Value
}
class UseEnumIO extends Module {
val io = IO(new Bundle {
val in = Input(UInt(1.W))
val out = Output(Bool())
})
io.out := MuxLookup(io.in, false.B, Array(
MyEnum.A -> true.B,
MyEnum.B -> true.B
))
}
我需要使用一个 IO 端口,它应该是 MuxLookup
中的一个 ChiselEnum
对象。
这是我从 SBT 收到的错误消息:
[error] found : scala.collection.mutable.WrappedArray[(MyEnum.Type, chisel3.core.Bool)]
而 Scala 推断 [S <: chisel3.UInt,T <: chisel3.Data]
我也试过val in = Input(MyEnum.Type)
,但出现了更严重的错误。
val defaultVersions = Map(
"chisel3" -> "3.2-SNAPSHOT
)
我不太确定为什么这不起作用,但以下解决方法可能会有所帮助。
尝试
io.out := MuxLookup(io.in, false.B, Seq(
MyEnum.A.asUInt -> true.B,
MyEnum.B.asUInt -> true.B
))
它似乎对我有用。
我会继续寻找更明显的简单语法不起作用的原因。
MuxLookup
选择器需要 UInts(或 Bools)。来自 API docs:
def apply[S <: UInt, T <: Data](key: S, default: T, mapping: Seq[(S, T)]): T
这可能是一个疏忽,MuxLookup
早于 ChiselEnum
很多时间,所以它没有考虑到这一点,我有 filed an issue 来支持这个用例.您可以同时使用 Chick 的解决方法。
考虑这段代码:
import chisel3.experimental.ChiselEnum
object MyEnum extends ChiselEnum {
val A, B = Value
}
class UseEnumIO extends Module {
val io = IO(new Bundle {
val in = Input(UInt(1.W))
val out = Output(Bool())
})
io.out := MuxLookup(io.in, false.B, Array(
MyEnum.A -> true.B,
MyEnum.B -> true.B
))
}
我需要使用一个 IO 端口,它应该是 MuxLookup
中的一个 ChiselEnum
对象。
这是我从 SBT 收到的错误消息:
[error] found : scala.collection.mutable.WrappedArray[(MyEnum.Type, chisel3.core.Bool)]
而 Scala 推断 [S <: chisel3.UInt,T <: chisel3.Data]
我也试过val in = Input(MyEnum.Type)
,但出现了更严重的错误。
val defaultVersions = Map(
"chisel3" -> "3.2-SNAPSHOT
)
我不太确定为什么这不起作用,但以下解决方法可能会有所帮助。 尝试
io.out := MuxLookup(io.in, false.B, Seq(
MyEnum.A.asUInt -> true.B,
MyEnum.B.asUInt -> true.B
))
它似乎对我有用。 我会继续寻找更明显的简单语法不起作用的原因。
MuxLookup
选择器需要 UInts(或 Bools)。来自 API docs:
def apply[S <: UInt, T <: Data](key: S, default: T, mapping: Seq[(S, T)]): T
这可能是一个疏忽,MuxLookup
早于 ChiselEnum
很多时间,所以它没有考虑到这一点,我有 filed an issue 来支持这个用例.您可以同时使用 Chick 的解决方法。