From 93e9e2ba8058ef89afacc00c16e138b0243587ba Mon Sep 17 00:00:00 2001 From: Boyang Han Date: Sun, 23 May 2021 04:04:42 -0700 Subject: Merge minimized table before return as a TruthTable --- .../chisel3/util/experimental/decode/QMCMinimizer.scala | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/scala/chisel3/util/experimental/decode/QMCMinimizer.scala b/src/main/scala/chisel3/util/experimental/decode/QMCMinimizer.scala index bc5ea351..3fa5a70c 100644 --- a/src/main/scala/chisel3/util/experimental/decode/QMCMinimizer.scala +++ b/src/main/scala/chisel3/util/experimental/decode/QMCMinimizer.scala @@ -220,7 +220,7 @@ object QMCMinimizer extends Minimizer { val m = outputs.head.getWidth // for all outputs - table.copy(table = (0 until m).flatMap(i => { + val minimized = (0 until m).flatMap(i => { val outputBp = BitPat("b" + "?" * (m - i - 1) + "1" + "?" * i) // Minterms, implicants that makes the output to be 1 @@ -277,6 +277,19 @@ object QMCMinimizer extends Minimizer { getEssentialPrimeImplicants(primeImplicants, implicants) (essentialPrimeImplicants ++ getCover(nonessentialPrimeImplicants, uncoveredImplicants)).map(a => (a.bp, outputBp)) - }).toMap) + }) + + minimized.tail.foldLeft(table.copy(table = Map(minimized.head))) { case (tb, t) => + if (tb.table.exists(x => x._1 == t._1)) { + tb.copy(table = tb.table.map { case (k, v) => + if (k == t._1) { + def ones(bitPat: BitPat) = bitPat.toString.drop(7).dropRight(1).zipWithIndex.collect{case ('1', x) => x} + (k, BitPat("b" + (0 until v.getWidth).map(i => if ((ones(v) ++ ones(t._2)).contains(i)) "1" else "?").mkString)) + } else (k, v) + }) + } else { + tb.copy(table = tb.table + t) + } + } } } \ No newline at end of file -- cgit v1.2.3