summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authormergify[bot]2022-02-15 22:35:23 +0000
committerGitHub2022-02-15 22:35:23 +0000
commit4b8584b1d2c46c76b1540e265a84eeb247d684e4 (patch)
treebce2fe248999fa04a2bb854dcc13781c8fac0618 /src/main
parentbe4feccad0d4fe487a0bea57cb44702c08831429 (diff)
Make TruthTable accept unknown input width (#2387) (#2417)
Widths are now padded to the maximum width of the inputs. Co-authored-by: Jack Koenig <koenig@sifive.com> (cherry picked from commit 546b4e13fe90ff09d24b63664c072d46c13c0c38) Co-authored-by: Jiuyang Liu <liu@jiuyang.me>
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/chisel3/util/experimental/decode/TruthTable.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/main/scala/chisel3/util/experimental/decode/TruthTable.scala b/src/main/scala/chisel3/util/experimental/decode/TruthTable.scala
index e742fd66..00fa0f9c 100644
--- a/src/main/scala/chisel3/util/experimental/decode/TruthTable.scala
+++ b/src/main/scala/chisel3/util/experimental/decode/TruthTable.scala
@@ -31,10 +31,15 @@ object TruthTable {
/** Convert a table and default output into a [[TruthTable]]. */
def apply(table: Iterable[(BitPat, BitPat)], default: BitPat, sort: Boolean = true): TruthTable = {
- require(table.map(_._1.getWidth).toSet.size == 1, "input width not equal.")
+ val inputWidth = table.map(_._1.getWidth).max
require(table.map(_._2.getWidth).toSet.size == 1, "output width not equal.")
val outputWidth = table.map(_._2.getWidth).head
- val mergedTable = table
+ val mergedTable = table.map {
+ // pad input signals if necessary
+ case (in, out) if inputWidth > in.width =>
+ (BitPat.N(inputWidth - in.width) ## in, out)
+ case (in, out) => (in, out)
+ }
.groupBy(_._1.toString)
.map {
case (key, values) =>