在凿子中测试寄存器文件

问题描述 投票:1回答:1

我想测试寄存器向量(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(...

scala chisel
1个回答
0
投票

问题是您在测试器中使用Chisel构造。 Chisel API调用(包括RegInitVecInit.U.W)旨在用于构造硬件。在测试人员中,您应该使用纯Scala对行为进行建模。例如:

© www.soinside.com 2019 - 2024. All rights reserved.