我想测试寄存器向量(registerFile)。下面是一个读取registerFile索引值的函数:-
class ViewRegFile(regnum: Int, size: Int) extends Module {
val io = IO(new Bundle {
val registers = Input(Reg(Vec(regnum,UInt(size.W))))
val inputs = Input(UInt(size.W))
val ok = Input(UInt(1.W))
val values = Output(UInt(size.W))
})
val buffer = RegInit(VecInit(Seq.fill(regnum)(0.U(size.W)))) // so we have a reset to buffer regmap
when(io.ok === 1.U){
for(i<-0 until regnum) {
buffer(i) := io.registers(i)
}
}
val itr = io.inputs
io.values := buffer(itr)
}
上面的代码使用registerFile registers,该文件具有regnum个大小为size的寄存器。我正在使用变量inputs索引registerFile,并通过变量values输出registerFile的索引值。
为了测试功能,我在测试台中创建了一个registerFile,将一些值初始化为File,并希望使用上述编写的函数ViewRegFile
读取输出。现在,我无法确定实施中哪里可能出错。以下是我尝试制作的测试平台:-失败,并显示错误:import java.io.File import chisel3._ //needed to declare testbench (tb) registerFile import chisel3.iotesters import chisel3.iotesters.{ChiselFlatSpec, Driver, PeekPokeTester} class RegUnitTester(c: ViewRegFile, val regnum: Int, val size:Int) extends PeekPokeTester(c) { private val mod = c val register = RegInit(VecInit(Seq.fill(regnum)(0.U(size.W)))) // tb registerFile val val1 = 1434.U(size.W) val val2 = 9082.U(size.W) register(1) := val1 register(2) := val2 poke(mod.io.registers, register) //loaded tb registerFile to function registerFile for(j<- 0 until regnum) { poke(mod.io.inputs, j) //desired values from function registerFile poke(mod.io.ok,1) step(1) poke(mod.io.ok,0) peek(mod.io.values) } // indexed output } object RegTester extends App { println("Testing RegFile Viewer") iotesters.Driver.execute(Array("--target-dir", "generated", "--generate-vcd-output", "on"), () => new ViewRegFile(4, 16)) { c => new RegUnitTester(c,4,16) } }
和戳
[error] overloaded method value poke with alternatives:
[error] (signal: chisel3.Aggregate,value: IndexedSeq[BigInt])Unit <and>
[error] (signal: chisel3.Bundle,map: Map[String,BigInt])Unit <and>
[error] [T <: chisel3.Element](signal: T, value: Long)(implicit evidence$10: chisel3.iotesters.Pokeable[T])Unit <and>
[error] [T <: chisel3.Element](signal: T, value: Int)(implicit evidence$9: chisel3.iotesters.Pokeable[T])Unit <and>
[error] [T <: chisel3.Element](signal: T, value: BigInt)(implicit evidence$8: chisel3.iotesters.Pokeable[T])Unit <and>
[error] (path: String,value: Long)Unit <and>
[error] (path: String,value: Int)Unit <and>
[error] (path: String,value: BigInt)Unit
[error] poke(mod.io.registers, register)
我想测试寄存器向量(registerFile)。下面是一个读取registerFile索引值的函数:-类ViewRegFile(regnum:Int,size:Int)扩展模块{val io = IO(...
问题是您在测试器中使用Chisel构造。 Chisel API调用(包括RegInit
,VecInit
,.U
和.W
)旨在用于构造硬件。在测试人员中,您应该使用纯Scala对行为进行建模。例如: