From a635ea83f772969a22e9323f82db8cf9437d39fd Mon Sep 17 00:00:00 2001 From: Edward Wang Date: Sun, 15 Jul 2018 10:32:31 -0700 Subject: MixedVec: clarify dynamic indexing of heterogeneous elements --- src/main/scala/chisel3/util/MixedVec.scala | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/scala/chisel3/util/MixedVec.scala b/src/main/scala/chisel3/util/MixedVec.scala index e09cdc4a..eeac76ea 100644 --- a/src/main/scala/chisel3/util/MixedVec.scala +++ b/src/main/scala/chisel3/util/MixedVec.scala @@ -77,18 +77,21 @@ final class MixedVec[T <: Data](private val eltsIn: Seq[T]) extends Record with /** * Dynamically (via a mux) retrieve the element at the given index. + * This is implemented via a mux with the width of the widest element in this MixedVec. + * For example, a MixedVec of type Seq(UInt(4.W), UInt(8.W)) will create an 8-bit mux for this operation. + * Note: it is up to the user to process the resultant UInt (e.g. unflatten, etc). * - * @param index Index with which to retrieve. - * @return Retrieved index. + * @param index Index to retrieve. If the index is out of range, it will return the first element. + * @return Retrieved index as a UInt with the width of the widest element. */ - def apply(index: UInt): T = { + def apply(index: UInt): UInt = { requireIsHardware(index, "index must be hardware") if (length < 1) { throw new IndexOutOfBoundsException("Collection is empty") } - MuxLookup(index, elts.head, elts.zipWithIndex.map { case (el, el_index) => el_index.U -> el }) + MuxLookup(index, elts.head.asUInt, elts.zipWithIndex.map { case (el, el_index) => el_index.U -> el.asUInt }) } /** Strong bulk connect, assigning elements in this MixedVec from elements in a Seq. -- cgit v1.2.3