Как использовать chisel3.experimental.ChiselEnum в порту ввода / вывода? - PullRequest
3 голосов
/ 30 марта 2019

Рассмотрим этот код:

import chisel3.experimental.ChiselEnum

object MyEnum extends ChiselEnum {
  val A, B = Value
}

class UseEnumIO extends Module {
  val io = IO(new Bundle {
    val in = Input(UInt(1.W))
    val out = Output(Bool())
  })

  io.out := MuxLookup(io.in, false.B, Array(
    MyEnum.A -> true.B,
    MyEnum.B -> true.B
  ))
}

Мне нужно использовать порт ввода-вывода, который должен быть ChiselEnum объектом в MuxLookup.

Это сообщение об ошибке, которое я получил от SBT:

[error]  found   : scala.collection.mutable.WrappedArray[(MyEnum.Type, chisel3.core.Bool)]

пока Скала предположил, что [S <: chisel3.UInt,T <: chisel3.Data]

Я также попытался val in = Input(MyEnum.Type), что дало мне более серьезную ошибку.

val defaultVersions = Map(
  "chisel3" -> "3.2-SNAPSHOT
)

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

MuxLookup требует UInts (или Bools) для селектора. Из API документов :

def apply[S <: UInt, T <: Data](key: S, default: T, mapping: Seq[(S, T)]): T

Это, вероятно, упущение, MuxLookup предшествует ChiselEnum в течение долгого времени, так что это не было сделано с учетом этого, я подал проблему для поддержки этого варианта использования. Тем временем вы можете использовать обходной путь Чика.

2 голосов
/ 30 марта 2019

Я не совсем уверен, почему это не работает, но следующий обход может помочь. Попробуйте

  io.out := MuxLookup(io.in, false.B, Seq(
    MyEnum.A.asUInt -> true.B,
    MyEnum.B.asUInt -> true.B
  ))

мне кажется, это работает. Я буду продолжать искать причину, по которой более очевидный простой синтаксис не работает.

...