Ошибка несоответствия типов при использовании Chisel3 BlackBox - PullRequest
0 голосов
/ 18 октября 2018

Я взял chisel-template и попытался использовать его инфраструктуру для запуска базового примера BlackBox, как фиктивной части Chisel, так и части модуля Verilog, взятой из здесь и здесь .

Я скопировал существующую структуру папок / файлов, вошел в эти файлы и заменил GCD и gcd на TryBlackBox и tryblackbox.Я также добавил строку: import chisel3.util.HasBlackBoxResource.Наконец, я поместил файл TryBlackBox.v в путь src/main/resources/tryblackbox/.

Когда я пытаюсь test:runMain tryblackbox.TryBlackBoxMain из sbt, я получаю 16 ошибок, все они жалуются на несоответствие типов, что-то вроде:

[error] /home/apaj/TryBlackBox/src/test/scala/tryblackbox/TryBlackBoxUnitTest.scala:79:60: type mismatch;
[error]  found   : () => tryblackbox.TryBlackBox
[error]  required: () => T
[error]     iotesters.Driver.execute(Array("--fint-write-vcd"), () => new TryBlackBox) {

Я загрузил свой проект в этот репозиторий:

https://github.com/apaj/TryBlackBox.git

Буду признателен за любую возможную помощь в устранении неполадок ...

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Просто для того, чтобы эффективно закрыть историю, я предоставил подробную инструкцию о том, как запустить BlackBox и избежать ошибки несоответствия типов здесь .

0 голосов
/ 19 октября 2018

Вы находитесь на правильном пути, но сейчас вас кусает несколько вещей.

  • Черный ящик не может быть цепью top , на него должны ссылатьсякак пример в обычном долотном модуле.Ошибка, которую вы получаете, заключается в том, что TryBlackBox является BlackBox, а не подклассом обычного долотного модуля.

  • Исключите object TryBlackBoxRepl, в котором repl является частью интерпретатора firrtlи хотя у него есть собственная возможность черного ящика, он требует реализации черного ящика в Scala вместо verilog.Я бы порекомендовал принять это позже.Есть примеры использования черных ящиков Scala в dsptools, firrtl-interpreter и treadle, когда вы будете готовы.

  • Вы должны использовать бэкэнд verilator (или другой бэкэнд на основе verilog) вместо интерпретатора.Вы должны специально вызывать использование verilator вручную, устанавливая аргументы вроде

    object TryBlackBoxMain extends App {
      iotesters.Driver.execute(
        Array("--backend-name", "verilator"),
        () => new TryBlackBoxTop
      ) {
        c => new TryBlackBoxUnitTester(c)
      }
    }
    

Обратите внимание, что в приведенном выше коде я создал отдельный верхний модуль TryBlackBoxTop, в котором вы быэкземпляр TryBlackBox

  • Поскольку вы используете setResource("/tryblackbox/tryMe.v"), имя файла вашего ресурса должно быть resource/tryblackbox/tryMe.v.Возможно, это хорошая идея, чтобы немного переименовать некоторые из них, так как использование TryBlackBox в слишком многих местах может привести к неприятностям.
...