Наименование верхнего уровня в chisel3

class generator(options: Map[String, Any]) {
  trait for_module extends abstractModule {
    //generates trait with params
  }
  class my_module extends abstractModule with for_module
  def exec = {
    ...
    Driver.execute(Array("-tn", "SomeName", "-td", "SomePath"), () => new my_module)
    ...

  }
}
object generator {
  def main(args: Array[String]) = {
    ...
    val a = generator(someopts)
    a.exec
  }
}

В этом коде флаг -tn должен изменить имя схемы верхнего уровня, но он изменяет только имя файла верхнего уровня. Лучшие имена модулей, такие как "module generatormy_module", но я хочу генерировать имя динамически из параметров.

Это ошибка в датах? Или как я могу изменить имя модуля верхнего уровня?

PS: метод предложить имя не работает тоже!

1 ответ

Решение

Флаг -tn не предназначен для изменения схемы верхнего уровня, а только для ее указания и использования по умолчанию в именах файлов. Способ указать имя модуля зубила - переопределить desiredName метод. Вы можете переопределить его аргументом конструктора модуля, чтобы сделать его более программируемым. Модификация приведенного выше примера:

class generator(options: Map[String, Any]) {
  trait for_module extends abstractModule {
    //generates trait with params
  }
  class my_module(name: String) extends abstractModule with for_module {
    override def desiredName = name
  }
  def exec = {
    val topName = "SomeName"
    Driver.execute(Array("-tn", topName, "-td", "SomePath"), () => new my_module(topName))
    ...

  }
}
object generator {
  def main(args: Array[String]) = {
    ...
    val a = generator(someopts)
    a.exec
  }
}
Другие вопросы по тегам