Как указать пакет Blackbox, который сопоставляется с `input [127:0]`, но действует как Vec(2, UInt(64)) в исходном коде Chisel?

Я хочу взаимодействовать с полной кросс-панелью AXI, порты которой выглядят примерно так:

      input [(NM * AXI_DATA_WIDTH) - 1:0] S_AXI_XYZ0,
...
output [(NS * AXI_SOMETHING_WIDTH - 1:0] M_AXI_XYZ0
...

где NM обозначает количество мастеров, а NS обозначает количество ведомых устройств. Как вы понимаете, каждый из портов кроссбара будет лишь частично подключен к каждому ведомому/ведущему.

Теперь в идеале я хотел бы определить набор долот, например

      class AxiXbar(val AXI_DATA_WIDTH: Int, val NS: Int, ...) extends Bundle {
  val S_AXI_XYZ0 = Vec(NS, UInt(AXI_DATA_WIDTH))
  ...
}

но как только я использую это, чтобы дать Blackbox свой интерфейс

      class MyXbar extends Blackbox {
  val io = IO(new AxiXbar)
}

Зубило попытается верилогизировать MyXbarк чему-то вроде

      MyXbar inst #(...) (
  ...
  .S_AXI_XYZ0_0(foo_wire_0)
  .S_AXI_XYZ0_1(foo_wire_0)

  ...
  )

Это нормально, когда Chisel генерирует полный дизайн, но при взаимодействии с модулем Blackbox мне нужно, чтобы Chisel сгладил Chisel Vec только в один S_AXI_XYZ0вместо порта. Как я могу этого добиться?

Я знаю, что Chisel3 поддерживает DataView как метод изменения «формы» пакета интерфейса, но в их поваренной книге DataView они заявляют, что просмотр подслов (split/concat) еще не поддерживается.

Я пытался использовать макросы литья Chisel asType(...)или же asUInt. Без успеха, хотя, поскольку я не полностью понимаю, что они делают под капотом. Поэтому их сложно правильно применять.

0 ответов

Другие вопросы по тегам