Chisel: доступ к параметрам модуля из тестера

Как получить доступ к параметрам, используемым для создания модуля, из тестера, который его тестирует?

В приведенном ниже тесте я явно передаю параметры как модулю, так и тестеру. Я бы предпочел не передавать их тестеру, а вместо этого извлекать их из модуля, который также был передан.

Также я новичок в scala / chisel, поэтому любые советы по плохим методам, которые я использую, будут оценены :).

import Chisel._
import math.pow

class TestA(dataWidth: Int, arrayLength: Int) extends Module {
  val dataType = Bits(INPUT, width = dataWidth)
  val arrayType = Vec(gen = dataType, n = arrayLength)
  val io = new Bundle {
    val i_valid = Bool(INPUT)
    val i_data = dataType
    val i_array = arrayType
    val o_valid = Bool(OUTPUT)
    val o_data = dataType.flip
    val o_array = arrayType.flip
  }
  io.o_valid := io.i_valid
  io.o_data := io.i_data
  io.o_array := io.i_array
}

class TestATests(c: TestA, dataWidth: Int, arrayLength: Int) extends Tester(c) {
  val maxData = pow(2, dataWidth).toInt
  for (t <- 0 until 16) {
    val i_valid = rnd.nextInt(2)
    val i_data = rnd.nextInt(maxData)
    val i_array = List.fill(arrayLength)(rnd.nextInt(maxData))
    poke(c.io.i_valid, i_valid)
    poke(c.io.i_data, i_data)
    (c.io.i_array, i_array).zipped foreach {
      (element,value) => poke(element, value)
    }
    expect(c.io.o_valid, i_valid)
    expect(c.io.o_data, i_data)
    (c.io.o_array, i_array).zipped foreach {
      (element,value) => poke(element, value)
    }
    step(1)
  }
}    

object TestAObject {
  def main(args: Array[String]): Unit = {
    val tutArgs = args.slice(0, args.length)
    val dataWidth = 5
    val arrayLength = 6
    chiselMainTest(tutArgs, () => Module(
      new TestA(dataWidth=dataWidth, arrayLength=arrayLength))){
      c => new TestATests(c, dataWidth=dataWidth, arrayLength=arrayLength)
    }
   }
}

person Ben Reynwar    schedule 20.05.2015    source источник


Ответы (1)


Если вы сделаете аргументы dataWidth и arrayLength членами TestA, вы можете просто сослаться на них. В Scala это можно сделать, вставив val в список аргументов:

class TestA(val dataWidth: Int, val arrayLength: Int) extends Module ...

Затем вы можете ссылаться на них из теста как на элементы с c.dataWidth или c.arrayLength

person user2548418    schedule 22.05.2015