如何将零打包到凿子中
how to pack zeros in to bundles in chisel
我有一个关于将零打包成包的问题。例如考虑下一个代码:
class CmplxNum(val bitwidth: Int) extends Bundle {
val real = SInt(INPUT,bitwidth.W)
val imag = SInt(INPUT,bitwidth.W)
}
class MyClass extends Module {
val io = IO(new Bundle {
val in = new CmplxNum(16)
val load = Bool(INPUT)
val clr = Bool(INPUT)
...
})
...
val sample = RegEnable(io.in,0.S,io.load) // <-- how do i set the reset value
When(io.clr) {
sample <> sample.fromBits(0.S) // <-- I tried this it compiles, but dont know if it is correct
}
}
如何在 RegEnable 和 clr 情况下将零打包到这个 Bundle 中?
对于 RegEnable,我得到了类型不匹配的详细说明错误,这很有意义
这是一种方法。它依赖于相对较新的 BundleLiterals (new CmplxNum(16)).Lit(_.real -> 0.S, _.imag -> 0.S)
。我还稍微重构了您的代码以使用当前的 chisel3 习惯用法。如果没有特定需要,我不建议将您的 Input/Output 放在 Bundle 中。此外,更现代的方法是将 IO 字段包装在 Input() 或 Output()
中
import chisel3._
import chisel3.util.RegEnable
import chisel3.experimental.BundleLiterals._
class CmplxNum(val bitwidth: Int) extends Bundle {
val real = SInt(bitwidth.W)
val imag = SInt(bitwidth.W)
}
class MyClass extends Module {
val io = IO(new Bundle {
val in = Input(new CmplxNum(16))
val load = Input(Bool())
val clr = Input(Bool())
...
})
...
val sample = RegEnable(
io.in,
init = (new CmplxNum(16)).Lit(_.real -> 0.S, _.imag -> 0.S),
enable = io.load
)
when(io.clr) {
sample <> sample.fromBits(0.S) // <-- I tried this it compiles, but dont know if it is correct
}
}
我有一个关于将零打包成包的问题。例如考虑下一个代码:
class CmplxNum(val bitwidth: Int) extends Bundle {
val real = SInt(INPUT,bitwidth.W)
val imag = SInt(INPUT,bitwidth.W)
}
class MyClass extends Module {
val io = IO(new Bundle {
val in = new CmplxNum(16)
val load = Bool(INPUT)
val clr = Bool(INPUT)
...
})
...
val sample = RegEnable(io.in,0.S,io.load) // <-- how do i set the reset value
When(io.clr) {
sample <> sample.fromBits(0.S) // <-- I tried this it compiles, but dont know if it is correct
}
}
如何在 RegEnable 和 clr 情况下将零打包到这个 Bundle 中? 对于 RegEnable,我得到了类型不匹配的详细说明错误,这很有意义
这是一种方法。它依赖于相对较新的 BundleLiterals (new CmplxNum(16)).Lit(_.real -> 0.S, _.imag -> 0.S)
。我还稍微重构了您的代码以使用当前的 chisel3 习惯用法。如果没有特定需要,我不建议将您的 Input/Output 放在 Bundle 中。此外,更现代的方法是将 IO 字段包装在 Input() 或 Output()
import chisel3._
import chisel3.util.RegEnable
import chisel3.experimental.BundleLiterals._
class CmplxNum(val bitwidth: Int) extends Bundle {
val real = SInt(bitwidth.W)
val imag = SInt(bitwidth.W)
}
class MyClass extends Module {
val io = IO(new Bundle {
val in = Input(new CmplxNum(16))
val load = Input(Bool())
val clr = Input(Bool())
...
})
...
val sample = RegEnable(
io.in,
init = (new CmplxNum(16)).Lit(_.real -> 0.S, _.imag -> 0.S),
enable = io.load
)
when(io.clr) {
sample <> sample.fromBits(0.S) // <-- I tried this it compiles, but dont know if it is correct
}
}