Стамеска: разъединенная направленность теряется во вложенных Vecs - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть Vec[Decoupled[UInt]], который я хочу подключить к Vec из Vec[Decoupled[UInt]] на основе сигнала выбора.Однако, как только кажется, что направленность Decoupled теряется, когда он вложен в два слоя глубиной, поэтому он не позволяет мне инициализировать сигналы готовности или управлять выходом с помощью входа.

Например, Зубило позволяет мне создать экземпляр этого:

class Example extends Module {
  val io = IO(new Bundle {
    val in = Vec(3, Flipped(Decoupled(UInt(3.W))))
    val out = Vec(3, Decoupled(UInt(3.W)))
  })
  io.in.foreach(_.ready := false.B) // Only here for consistency
  io.out <> io.in
}

Но это приводит к ошибке:

class Example extends Module {
  val io = IO(new Bundle {
    val sel = Input(UInt(4.W))
    val in = Vec(10, Vec(3, Flipped(Decoupled(UInt(3.W)))))
    val out = Vec(3, Decoupled(UInt(3.W)))
  })
  io.in.foreach(_.foreach(_.ready := false.B))
  io.out <> io.in(io.sel)
}

Последний дает ошибки, которые читаются

Sink is unwriteable by current module (line 7)
Both left and right are drivers (line 8)

Это ошибка с долотом или я что-то упустил?Как я могу обойти это?

1 Ответ

0 голосов
/ 20 сентября 2018

Это ... странно.Я еще не нашел причину, но подтвердил ошибочное поведение, которое вы видите.К счастью, есть простой обходной путь, поместите Flipped вне Vec.

class Example extends Module {
  val io = IO(new Bundle {
    val sel = Input(UInt(4.W))
    val in = Flipped(Vec(10, Vec(3, Decoupled(UInt(3.W)))))
    val out = Vec(3, Decoupled(UInt(3.W)))
  })
  io.in.foreach(_.foreach(_.ready := false.B))
  io.out <> io.in(io.sel)
}

Я подал проблему в репозитории Chisel для отслеживания этой ошибки.

...