在 Chisel 中可以减少 Vec 吗?
Are Vec can be reduced in Chisel?
我正在尝试减少 UInt
中的 Vec
个 Bundle,但出现错误:
class DiffPair extends Bundle {
val p = Bool()
val n = Bool()
}
class TMDS extends Bundle {
val clk = new DiffPair()
val data = Vec(3, new DiffPair())
}
val io = IO(new Bundle {
//...
val tmds = Output(new TMDS())
})
val O_tmds_data_p = IO(Output(UInt(3.W)))
如果我使用此 reduce
代码:
O_tmds_data_p := gbHdmi.io.tmds.data.reduce((a,b) => Cat(a.p, b.p))
我遇到了这个错误:
[info] compiling 1 Scala source to /home/user/GbHdmi/target/scala-2.12/classes ...
[error] /home/user/GbHdmi/src/main/scala/topgbhdmi.scala:72:67: type mismatch;
[error] found : chisel3.UInt
[error] required: gbhdmi.DiffPair
[error] O_tmds_data_p := gbHdmi.io.tmds.data.reduce((a,b) => Cat(a.p, b.p))
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed 31 août 2021, 15:04:08
我知道a
和b
是DiffPair
,但是a.p
和b.p
是Bool
没有?
你试过了吗
O_tmds_data_p := gbHdmi.io.tmds.data.asUInt
我认为这对你有用。
我找到的解决方案是在 reduce 之前用 map
取 'p' 值:
O_tmds_data_p := gbHdmi.io.tmds.data.map(_.p.asUInt).reduce((a,b) => Cat(a,b))
或者,以简化的方式:
O_tmds_data_p := gbHdmi.io.tmds.data.map(_.p.asUInt).reduce(_ ## _)
而且,这种方法行不通,对我来说原因不明:
O_tmds_data_p := gbHdmi.io.tmds.data.reduce(_.p.asUInt ## _.p.asUInt)
错误:
sbt:GbHdmi> runMain gbhdmi.TopGbHdmiDriver
[info] compiling 1 Scala source to /home/user/GbHdmi/target/scala-2.12/classes ...
[error] /home/user/GbHdmi/src/main/scala/topgbhdmi.scala:71:63: type mismatch;
[error] found : chisel3.UInt
[error] required: gbhdmi.DiffPair
[error] O_tmds_data_p := gbHdmi.io.tmds.data.reduce(_.p.asUInt ## _.p.asUInt)
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed Sep 1, 2021, 9:17:15 AM
我正在尝试减少 UInt
中的 Vec
个 Bundle,但出现错误:
class DiffPair extends Bundle {
val p = Bool()
val n = Bool()
}
class TMDS extends Bundle {
val clk = new DiffPair()
val data = Vec(3, new DiffPair())
}
val io = IO(new Bundle {
//...
val tmds = Output(new TMDS())
})
val O_tmds_data_p = IO(Output(UInt(3.W)))
如果我使用此 reduce
代码:
O_tmds_data_p := gbHdmi.io.tmds.data.reduce((a,b) => Cat(a.p, b.p))
我遇到了这个错误:
[info] compiling 1 Scala source to /home/user/GbHdmi/target/scala-2.12/classes ...
[error] /home/user/GbHdmi/src/main/scala/topgbhdmi.scala:72:67: type mismatch;
[error] found : chisel3.UInt
[error] required: gbhdmi.DiffPair
[error] O_tmds_data_p := gbHdmi.io.tmds.data.reduce((a,b) => Cat(a.p, b.p))
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed 31 août 2021, 15:04:08
我知道a
和b
是DiffPair
,但是a.p
和b.p
是Bool
没有?
你试过了吗
O_tmds_data_p := gbHdmi.io.tmds.data.asUInt
我认为这对你有用。
我找到的解决方案是在 reduce 之前用 map
取 'p' 值:
O_tmds_data_p := gbHdmi.io.tmds.data.map(_.p.asUInt).reduce((a,b) => Cat(a,b))
或者,以简化的方式:
O_tmds_data_p := gbHdmi.io.tmds.data.map(_.p.asUInt).reduce(_ ## _)
而且,这种方法行不通,对我来说原因不明:
O_tmds_data_p := gbHdmi.io.tmds.data.reduce(_.p.asUInt ## _.p.asUInt)
错误:
sbt:GbHdmi> runMain gbhdmi.TopGbHdmiDriver
[info] compiling 1 Scala source to /home/user/GbHdmi/target/scala-2.12/classes ...
[error] /home/user/GbHdmi/src/main/scala/topgbhdmi.scala:71:63: type mismatch;
[error] found : chisel3.UInt
[error] required: gbhdmi.DiffPair
[error] O_tmds_data_p := gbHdmi.io.tmds.data.reduce(_.p.asUInt ## _.p.asUInt)
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed Sep 1, 2021, 9:17:15 AM