我试图设计下面的波普尔携带加载机由富勒。到目前为止,我试了很多次,但是我在和Chisel语法公司做斗争。有人能帮我指出我做错了什么吗?以下是我的守则:
class RcaAdder(val n:Int) extends Module {
val io = IO(new Bundle {
val a = Input(UInt(n.W))
val b = Input(UInt(n.W))
val cin = Input(UInt(1.W))
val sum = Output(UInt(n.W))
val cout = Output(UInt(1.W))
})
//Create FullAdders
val fadder = Seq.tabulate(n) {
x => Module(new FullAdder())
}
//Setup
val summ = chisel3.Vec(n, Bool())
val carry = chisel3.Vec(n+1, UInt(1.W))
carry(0) := io.cin
//Do the wiring
for(inx <- 0 to n){
fadder(inx).io.a := io.a(inx)
fadder(inx).io.b := io.b(inx)
fadder(inx).io.cin := io.cin
carry(inx+1) := fadder(inx).io.cout
summ(inx) := fadder(inx).io.sum
}
io.sum := summ.asUInt()
io.cout := carry(n+1)
}这是一个错误:
data to be connected 'UInt<1>' must be hardware, not a bare Chisel type
at rca.RcaAdder.<init>(RcaAdder.scala:40)
RcaAdder.scala:40尝试过在Wire()或IO()中包装、携带或求和,但这并没有帮助。:(
有什么想法吗?在这里真的很挣扎。
发布于 2021-05-15 21:52:40
Stevo是对的,电线包装是必要的,但是还有一些其他的错误。
carry
until而不是to
io.cout := carry(n)而不是n+1下面的代码应该可以工作。
class RcaAdder(val n:Int) extends Module {
val io = IO(new Bundle {
val a = Input(UInt(n.W))
val b = Input(UInt(n.W))
val cin = Input(UInt(1.W))
val sum = Output(UInt(n.W))
val cout = Output(UInt(1.W))
})
//Create FullAdders
val fadder = Seq.tabulate(n) {
x => Module(new FullAdder())
}
//Setup
val summ = Wire(chisel3.Vec(n, Bool()))
val carry = Wire(chisel3.Vec(n+1, UInt(1.W)))
carry(0) := io.cin
//Do the wiring
for(inx <- 0 until n){
fadder(inx).io.a := io.a(inx)
fadder(inx).io.b := io.b(inx)
fadder(inx).io.cin := io.cin
carry(inx+1) := fadder(inx).io.cout
summ(inx) := fadder(inx).io.sum
}
io.sum := summ.asUInt()
io.cout := carry(n)
}这里的问题很好地说明了在for上使用for的原因,因为它减少了索引错误的可能性。
https://stackoverflow.com/questions/67536239
复制相似问题