проблема имени порта из тех, что определены в BlackBox

Скажем, есть модуль B, в котором A является экземпляром.

class B extends Module {
  …
  val u_A = Module(new A)
    // the way to hook u_A’s port is the issue
} 

Описание модуля A:

class A extends Module {
  val io = IO(new Bundle{
    val a = Output(Bool())
  })
  io.a := true.B
}

Декларация A BlackBox:

class A extends BlackBox {
  val io = IO(new Bundle{
    val io_a = Output(Bool()) // HAVE to define port name with io_* prefix otherwise ...
  })
}

Вы ДОЛЖНЫ определить имя порта в BlackBox с префиксом io_, иначе сгенерированный список портов в B RTL не будет соответствовать модулю A. для экземпляра модуля способ перехвата порта u_A таков:

u_A.io.a

для экземпляра BlackBox способ перехвата порта u_A таков:

u_A.io.io_a

Не могли бы вы просветить меня о том, есть ли более удобный способ?


person Lin Frank    schedule 05.07.2017    source источник


Ответы (1)


Несоответствие между выбросами BlackBox и Module io является устаревшим API для лучшей интеграции с Verilog IP, где разработчик Chisel практически не имеет контроля над Verilog. Мы думаем о более явном и структурированном способе обработки таких «невидимых» пакетов, в которых отбрасывается префикс, поскольку есть и другие случаи, когда они могут быть полезны.

Однако, чтобы ответить на ваш вопрос, есть более удобный способ. Мы экспериментируем с тем, что мы называем «мультимодулями ввода-вывода», где вы можете использовать IO(...) несколько раз внутри модуля для создания портов. На самом деле вам не нужна эта функция здесь, но она дает нам chisel3.experimental.ExtModule — альтернативу BlackBox. ExtModule не удаляет префикс молча, поэтому, если вы переключитесь на его расширение вместо BlackBox, вы получите желаемое поведение.

person Jack Koenig    schedule 06.07.2017
comment
могу я спросить, что chisel3.experimental — это пакет для этих новых экспериментов? - person Lin Frank; 13.07.2017
comment
Да, мы добавляем новые функции в chisel3.experimental просто для того, чтобы было понятно, что мы представляем новый API, который может быть изменен. Мы не намерены изменять эти API, мы просто хотим дать понять, что мы могли бы - person Jack Koenig; 13.07.2017