2015-05-20 6 views
1

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

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

Также я новичок в 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) 
    } 
    } 
} 

ответ

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^