From bffc8b9e851af88128f1c683e67634ebde25c14b Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 24 May 2018 11:46:32 -0700 Subject: Fix UIntToOH for output widths larger than 2^(input width) (#823) * Add test for UIntToOH * Pad UIntToOH inputs to support oversized output widthds * Optimize Bits.pad in case of known widths * Add missing import and fix test in OneHotMuxSpec --- src/main/scala/chisel3/util/OneHot.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/scala/chisel3') diff --git a/src/main/scala/chisel3/util/OneHot.scala b/src/main/scala/chisel3/util/OneHot.scala index 9a911c41..8a0bb9fc 100644 --- a/src/main/scala/chisel3/util/OneHot.scala +++ b/src/main/scala/chisel3/util/OneHot.scala @@ -46,7 +46,8 @@ object UIntToOH { def apply(in: UInt, width: Int): UInt = width match { case 0 => 0.U(0.W) case _ => - val shiftAmount = in((log2Ceil(width) - 1) max 0, 0) + val shiftAmountWidth = log2Ceil(width) + val shiftAmount = in.pad(shiftAmountWidth)((shiftAmountWidth - 1) max 0, 0) (1.U << shiftAmount)(width - 1, 0) } } -- cgit v1.2.3