Ошибка при передаче значений с помощью peekpoketester - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь передать некоторые случайные целые числа (которые я сохранил в массиве) на мое оборудование в качестве Входных данных через метод poke в peekpoketester. Но я получаю эту ошибку:

chisel3.internal.ChiselException: Ошибка: отсутствует в пользовательском модуле. Возможная причина: пропущено завершение Module (), вызов API с чистым долотом или попытка создать оборудование внутри BlackBox.

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

class TesterSimple (dut: DeviceUnderTest)(parameter1 : Int)(parameter2 : Int) extends
PeekPokeTester (dut) {
 var x = Array[Int](parameter1) 
 var y = Array[Int](parameter2) 
 var z = 1 
 poke(dut.io.IP1, z.asUInt)
 for(i <- 0 until parameter1){poke(dut.io.IP2(i), x(i).asUInt)}
 for(j <- 0 until parameter2){poke(dut.io.IP3(j), y(j).asUInt)}
}

object TesterSimple extends App {
 implicit val parameter1 = 2
 implicit val parameter2 = 2
 chisel3.iotesters.Driver (() => DeviceUnderTest(parameter1 :Int, parameter2 :Int)) { c =>
 new TesterSimple (c)(parameter1, parameter2)}
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Я бы предложил пару вещей.

  1. Основная проблема, я думаю, вы не инициализируете свои массивы должным образом
    1. Попробуйте использовать Array.fill или Array.tabulate для созданияи инициализировать массивы
  val rand = scala.util.Random
  var x = Array.fill(parameter1)(rand.nextInt(100))
  var y = Array.fill(parameter2)(rand.nextInt(100))
  1. Вам не нужно .asUInt в poke, он принимает Int с или BigInt с
  2. При определении аппаратных констант используйте .U вместо .asUInt, последний - способ приведения других типов долот, он работает, но это вещь обратной совместимости.
  3. Это лучшене начинать переменные или методы с заглавных букв
  4. Я предлагаю нам class DutName(val parameter1: Int, val parameter2: Int) или class DutName(val parameter1: Int)(val parameter2: Int), если вы предпочитаете.
    1. Это позволит использовать параметры dut при написании теста.
    2. Например, for(i <- 0 until dut.parameter1){poke(dut.io.IP2(i), x(i))}
    3. Это избавит вас от необходимости дублировать объекты параметров на DUT иваш тестер

Удачи!

0 голосов
/ 18 октября 2019

Не могли бы вы также поделиться своим DUT? Я полагаю, что наиболее вероятный случай, когда ваше DUT не распространяется Module

...