Не могу совать MixedVec - PullRequest
       42

Не могу совать MixedVec

1 голос
/ 14 октября 2019

Я объявил MixedVec в интерфейсе моего модуля:

class WbInterconOneMaster(val awbm: WbMaster,
                          val awbs: Seq[WbSlave]) extends Module {
    val io = IO(new Bundle{
      val wbm = Flipped(new WbMaster(awbm.dwidth, awbm.awidth))
      val wbs = MixedVec(awbs.map{i => Flipped(new WbSlave(i.dwidth, i.awidth, i.iname))})
    })

Это правильно компилируется и Verilog генерируется правильно. Но я не могу вставить значения в сигнал, подобный этому:

  for(wbs <- dut.io.wbs) {
    poke(wbs.ack_o, 0)
  }

Получил эту ошибку во время выполнения (серверная часть verilator):

[info]   java.util.NoSuchElementException: head of empty list
[info]   at scala.collection.immutable.Nil$.head(List.scala:420)
[info]   at scala.collection.immutable.Nil$.head(List.scala:417)
[info]   at scala.collection.mutable.Stack.top(Stack.scala:132)
[info]   at chisel3.internal.naming.NamingStack.pop_return_context(Namer.scala:133)
[info]   at chisel3.util.MixedVec.length(MixedVec.scala:81)
[info]   at scala.collection.IndexedSeqLike$class.iterator(IndexedSeqLike.scala:90)
[info]   at chisel3.util.MixedVec.iterator(MixedVec.scala:81)
[info]   at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
[info]   at chisel3.util.MixedVec.foreach(MixedVec.scala:81)
[info]   at wbplumbing.TestWbInterconDualSlave.<init>(testwbplumbing.scala:61)

Обратите внимание, что вопрос уже задавался проект github с версией долота 3.1.6, но помечен как закрытый. Я использую версию 3.1.8, и она, кажется, еще не работает.

[править]

Я обновил свой проект с помощью долота 3.2.0 и iotester 1.3.0:

libraryDependencies += "edu.berkeley.cs" %% "chisel3" % "3.2.0"
libraryDependencies += "edu.berkeley.cs" %% "chisel-iotesters" % "1.3.0"

И у меня все еще есть ошибка, когда я раскомментирую строку:

  for(wbs <- dut.io.wbs) {
    poke(wbs.ack_o, 0)
  }

(если я оставил эти строки с комментариями, это работает)

Но трассировка стека отличается:

[info] - should read and write wishbone value on two slaves *** FAILED ***
[info]   chisel3.internal.ChiselException: Error: Not in a RawModule. Likely cause: Missed Module() wrap, bare chisel API call, or attempting to construct hardware inside a BlackBox.
[info]   at chisel3.internal.throwException$.apply(Error.scala:42)
[info]   at chisel3.internal.Builder$.referenceUserModule(Builder.scala:287)
[info]   at chisel3.Data.connect(Data.scala:384)
[info]   at chisel3.Data.$colon$eq(Data.scala:475)
[info]   at wbplumbing.TestWbInterconDualSlave$$anonfun$15.apply(testwbplumbing.scala:63)
[info]   at wbplumbing.TestWbInterconDualSlave$$anonfun$15.apply(testwbplumbing.scala:62)
[info]   at scala.collection.Iterator$class.foreach(Iterator.scala:742)
[info]   at scala.collection.AbstractIterator.foreach(Iterator.scala:1194)
[info]   at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
[info]   at chisel3.util.MixedVec.foreach(MixedVec.scala:88)
[info]   ...

1 Ответ

1 голос
/ 15 октября 2019

Я не уверен, что происходит, но мне удалось воспроизвести вашу ошибку в текущем выпуске chisel3, но, похоже, тот же код работает должным образом в моментальном снимке кандидата на выпуск 3.2. Можете ли вы попробовать свой код там? Надеюсь, это будет работать лучше. Проблема, по-видимому, не связана непосредственно с MixedVec, но должна быть в основном коде.

Я должен сказать, что вы должны быть особенно осторожны при использовании MixedVec, он не индексируется аппаратным индексом, поэтому все ссылки на его элементы должны ссылаться из константных Scala-элементов во время разработки.

...